stm32外設(shè)指的是單片機(jī)外部的外圍功能模塊,比如鍵盤控制芯片,液晶,A/D轉(zhuǎn)換芯片,等等。外設(shè)可通過單片機(jī)的I/O,SPI,I2C等總線控制。
常見stm32外設(shè):基本IO、定時(shí)器TIM、串口USART、ADC模數(shù)轉(zhuǎn)換、DAC數(shù)模轉(zhuǎn)換、SPI串行通信、EXIT外部中斷、BKP備份數(shù)據(jù)、RTC鬧鐘SysTick系統(tǒng)滴答、WDG看門狗(獨(dú)立+窗口)、DMA傳輸數(shù)據(jù)、片內(nèi)FLASH編程、FSMC讀寫外部SRAM、外部NorFlash操作等。
stm32外設(shè)的初始化和設(shè)置:
在設(shè)置一個(gè)外設(shè)前,必須調(diào)用以下一個(gè)函數(shù)來使能它的時(shí)鐘
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_PPPx,ENABLE);
1,在主應(yīng)用文件中聲明一個(gè)結(jié)構(gòu)PPP_InitTypeDef,例如:PPP_InitTypeDef
PPP_InitStructure;
2,為變量PPP_InitStructure的各個(gè)結(jié)構(gòu)成員填入允許的值??梢圆捎靡韵?種方式:
a)PPP_InitStructure.member1=val1;
b)PPP_StructInit(&PPP_InitStructure)PP_InitStructure.memberX=valX;
3,調(diào)用函數(shù)PPP_Init()來初始化外設(shè)PPP;
4,在這一步,外設(shè)PPP已被初始化??梢哉{(diào)用函數(shù)PPP_Cmd()來使能之。
使用STM32外設(shè)的步驟
1,PPP_Init()函數(shù),其功能是根據(jù)PPP_InitTypeDef中指定的參數(shù),初始化外設(shè)PPP,如TIM_Init()名為PPP_DeInit()函數(shù),其功能為復(fù)位外設(shè)PPP的所有寄存器至缺省值。
2,PPP_StructInit()函數(shù),其功能為通過設(shè)置PPP_InitTypeDef結(jié)構(gòu)中的各種參數(shù)來定義外設(shè)的功能,例如:USART_StructInit()
3,PPP_Cmd()函數(shù),其功能為使能或者失能外設(shè)PPP,例如:SPI_Cmd
4,PPP_ITConfig()函數(shù),其功能為使能或者失能來自外設(shè)PPP的中斷源,例如:RCC_ITConfig
5,PPP_DMAConfig()的函數(shù),其功能為使能或者失能外PPP的DMA接口
6,PPP_GetFlagStatus()的函數(shù),其功能為檢查外設(shè)PPP某標(biāo)志位被設(shè)置與否
7,PPP_ClearFlag()的函數(shù),其功能為清除外設(shè)PPP標(biāo)志位,例如:I2C_ClearFlag.
8,PPP_GetITStatus()的函數(shù),其功能為判斷來自外設(shè)PPP的中斷發(fā)生與否
?
9,PPP_ClearITPendingBit()的函數(shù),其功能為清除外設(shè)PPP中斷待處理標(biāo)志位
STM32外設(shè)使用要點(diǎn)
1、時(shí)鐘安全系統(tǒng)(CSS)
時(shí)鐘安全系統(tǒng)被激活后,時(shí)鐘監(jiān)控器將實(shí)時(shí)監(jiān)控外部高速振蕩器;如果HSE時(shí)鐘發(fā)生故障,外部振蕩器自動(dòng)被關(guān)閉,產(chǎn)生時(shí)鐘安全中斷,該中斷被連接到Cortex-M3的NMI的中斷;同時(shí)CSS將內(nèi)部RC振蕩器切換為STM32的系統(tǒng)時(shí)鐘源(對于STM32F103,時(shí)鐘失效事件還將被送到高級定時(shí)器TIM1的剎車輸入端,用以實(shí)現(xiàn)電機(jī)保護(hù)控制)。
操作流程:
1)、啟動(dòng)時(shí)鐘安全系統(tǒng)CSS: RCC_ClockSecuritySystemCmd(ENABLE); (NMI中斷是不可屏蔽的?。?/p>
2)外部振蕩器失效時(shí),產(chǎn)生NMI中斷,對應(yīng)的中斷程序:
void NMIException(void)
{
if (RCC_GetITStatus(RCC_IT_CSS) ! RESET)
{ // HSE、PLL已被禁止(但是PLL設(shè)置未變)
…… // 客戶添加相應(yīng)的系統(tǒng)保護(hù)代碼處
// 下面為HSE恢復(fù)后的預(yù)設(shè)置代碼
RCC_HSEConfig(RCC_HSE_ON); // 使能HSE
RCC_ITConfig(RCC_IT_HSERDY, ENABLE); // 使能HSE就緒中斷
RCC_ITConfig(RCC_IT_PLLRDY, ENABLE); // 使能PLL就緒中斷
RCC_ClearITPendingBit(RCC_IT_CSS); // 清除時(shí)鐘安全系統(tǒng)中斷的掛起位
// 至此,一旦HSE時(shí)鐘恢復(fù),將發(fā)生HSERDY中斷,在RCC中斷處理程序里, 系統(tǒng)時(shí)鐘可以設(shè)置到以前的狀態(tài)
}
}
評論
查看更多