|
回顧之前的教程, 主要寫了GPIO點燈, EXTI按鍵中斷, USART串口通信,通過這幾個實驗,筆者已經(jīng)能總結(jié)出用ST庫開發(fā)的步驟和共同點了。那么接下來就來談談他們的共同點。
初始化:
翻看前面筆者寫過的例程,不難發(fā)現(xiàn)我們在使用這些外設之前,總要先定義一個結(jié)構體,然后給該結(jié)構體中的相關參數(shù)賦值。先看看之前都用了哪些結(jié)構體:
- GPIO_InitTypeDef形的結(jié)構體用來配置GPIO外設
- EXTI_InitTypeDef形的結(jié)構體用來配置按鍵等其他的外部中斷
- NVIC_InitTypeDef形的結(jié)構體用來配置總中斷管理器。
- USART_InitTypeDef形式結(jié)構體用來配置串行口相關參數(shù)。
可能有人要問, 之前自己在學51時,直接配置相關寄存器就行了,在stm32開發(fā)中,是不是就不需要配置寄存器,直接通過填充結(jié)構體就可以了呢?其實不然。我們可以在相關初始化函數(shù)上右擊鼠標,選擇Go to Definition, 便可以一目了然。例如GPIO_Init這個函數(shù),
如圖,
Init.jpg (54.11 KB, 下載次數(shù): 196)
下載附件
2015-7-9 01:13 上傳
該函數(shù)會將之前填充的相關結(jié)構中參數(shù)寫入GPIO中BRR, BSRR, CRH寄存器中:
QQ%E5%9B%BE%E7%89%8720141128094518.jpg (28.2 KB, 下載次數(shù): 164)
下載附件
2015-7-9 01:13 上傳
而這幾個寄存器正是配置stm32的pin口speed,mode。有時,如果我們不懂結(jié)構中相關參數(shù)在對應寄存器中的意思時,可以通過查詢《stm32手冊》來查找其參數(shù)意義。
因此在使用st庫對外設進行初始化,一般的步驟如下:
- 定義一個xxx_InitTypeDef類型的初始化結(jié)構體,
- 根據(jù)使用需求,向這些結(jié)構體中寫入特定的控制參數(shù),
- 填充好結(jié)構體,把這個結(jié)構體作為函數(shù)xxx_Init()的參數(shù)進行傳遞。寫入對應的寄存器 中。
數(shù)據(jù)輸入與輸出:
在按鍵試驗中,我們用了GPIO_ReadInputData()函數(shù)來讀取按鍵輸入pin口的電平。同樣也可以用GPIO_ReadOutputData()函數(shù)來讀取pin口的輸出值, 說道著這里,想必大家知道這兩個函數(shù)的重要性,有了這兩個函數(shù),就可以讓MCU做一些邏輯任務了。同樣,在在串口通信中,用了USART_SendData與UART_ReceiveData來通過串口收發(fā)數(shù)據(jù)。
標志位的檢查與清除:
當外設完成了某些工作或出現(xiàn)某些狀態(tài)的時候,會觸發(fā)一些事件, 同時在相關寄存器中標志位就會被置位,例如,在USART通信中,當數(shù)據(jù)接收或者發(fā)送完成后,都會觸發(fā)一個中斷一個事件,并且進入同一中斷服務程序中,這時候,檢查標志位就很重要了,如果要確定是否為接收數(shù)據(jù)引發(fā)的中斷,此時就可以用USART_GetITStatus來檢查他的TXNE位是否被置位,具體如圖所示:
QQ%E5%9B%BE%E7%89%8720141128102001.jpg (39.65 KB, 下載次數(shù): 172)
下載附件
2015-7-9 01:13 上傳
接收位標志位的清除可以有兩種方法第一是當你用軟件讀取USART_DR寄存器時,便可以完成RXNE的清除,同時也可以通過軟件對它寫0也可以清除。
|
|