stm32學習筆記 串列埠(原子開發板)

2021-06-29 12:23:24 字數 3212 閱讀 9588

1,stm32的串列埠資源相當豐富的,功能也相當強勁。alientek  ministm32開發板所使用的stm32f103rct6最多可提供5路串列埠,有分數波特率發生器、支援同步單線通訊和半雙工

單線通訊、支援lin、支援數據機操作、智慧卡協議和irda sir endec規範、具有dma等。

2,串列埠設定的一般步驟可以總結為如下幾個步驟:

1)  串列埠時鐘使能,gpio時鐘使能

2)  串列埠復位

3)  gpio埠模式設定

4)  串列埠引數初始化

5)  開啟中斷並且初始化nvic(如果需要開啟中斷才需要這個步驟)

6)  使能串列埠

7)  編寫中斷處理函式

下面,我們就簡單介紹下這幾個與串列埠基本配置直接相關的幾個韌體庫函式。這些函式和定義主要分布在stm32f10x_usart.h和stm32f10x_usart.c檔案中。

1.串列埠時鐘使能。串列埠是掛載在apb2下面的外設,所以使能函式為: rcc_apb2periphclockcmd(rcc_apb2periph_usart1); .串列埠復位。當外設出現異常的時候可以通過復位設定,實現該外設的復位,然後重新配置這個外設達到讓其重新工作的目的。一般在系統剛開始配置外設的時候,都會先執行復位該外設的操作。復位的是在函式usart_deinit()中完成:

void usart_deinit(usart_typedef* usartx);//串列埠復位  

比如我們要復位串列埠1,方法為:

usart_deinit(usart1);    //復位串列埠1

3.串列埠引數初始化。串列埠初始化是通過usart_init()函式實現的,

void usart_init(usart_typedef* usartx, usart_inittypedef* usart_initstruct);

這個函式的的第乙個入口引數是指定初始化的串列埠標號,這裡選擇usart1。

第二個入口引數是乙個usart_inittypedef型別的結構體指標,這個結構體指標的成員變數用

來設定串列埠的一些引數。一般的實現格式為:

usart_initstructure.usart_baudrate = bound;                                  //一般設定為9600;

usart_initstructure.usart_wordlength = usart_wordlength_8b;//字長為8位資料格式

usart_initstructure.usart_stopbits = usart_stopbits_1;                //乙個停止位

usart_initstructure.usart_parity = usart_parity_no;                    //無奇偶校驗位

usart_initstructure.usart_hardwareflowcontrol

= usart_hardwareflowcontrol_none;                    //無硬體資料流控制

usart_initstructure.usart_mode = usart_mode_rx | usart_mode_tx;  //收發模式

usart_init(usart1, &usart_initstructure);                                     //初始化串列埠

從上面的初始化格式可以看出初始化需要設定的引數為:波特率,字長,停止位,奇偶校驗位,

硬體資料流控制,模式(收,發)。我們可以根據需要設定這些引數。

4.資料傳送與接收。stm32的傳送與接收是通過資料暫存器usart_dr來實現的,這是

乙個雙暫存器,包含了tdr和rdr。當向該暫存器寫資料的時候,串列埠就會自動傳送,當收

到收據的時候,也是存在該暫存器內。  

stm32庫函式操作usart_dr暫存器傳送資料的函式是:

void usart_senddata(usart_typedef* usartx, uint16_t data);

通過該函式向串列埠暫存器usart_dr寫入乙個資料。

stm32庫函式操作usart_dr暫存器讀取串列埠接收到的資料的函式是:

uint16_t usart_receivedata(usart_typedef* usartx);

通過該函式可以讀取串列埠接受到的資料。

5.串列埠狀態。串列埠的狀態可以通過狀態暫存器usart_sr讀取。

6.串列埠使能。串列埠使能是通過函式usart_cmd()來實現的,這個很容易理解,使用方法

是:        

usart_cmd(usart1, enable);                                        //使能串列埠                                    

7.開啟串列埠響應中斷。有些時候當我們還需要開啟串列埠中斷,那麼我們還需要使能串列埠中

斷,使能串列埠中斷的函式是:

void usart_itconfig(usart_typedef* usartx, uint16_t usart_it,  

functionalstate newstate)

這個函式的第二個入口引數是標示使能串列埠的型別,也就是使能哪種中斷,因為串列埠的中斷類

型有很多種。比如在接收到資料的時候(rxne讀資料暫存器非空),我們要產生中斷,那麼我

們開啟中斷的方法是:

usart_itconfig(usart1, usart_it_rxne, enable);//開啟中斷,接收到資料中斷

我們在傳送資料結束的時候(tc,傳送完成)要產生中斷,那麼方法是:

usart_itconfig(usart1,usart_it_tc,enable);

8.獲取相應中斷狀態。當我們使能了某個中斷的時候,當該中斷發生了,就會設定狀態寄

存器中的某個標誌位。經常我們在中斷處理函式中,要判斷該中斷是哪種中斷,使用的函式是:  

itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it)

比如我們使能了串列埠傳送完成中斷,那麼當中斷發生了,  我們便可以在中斷處理函式中呼叫這

個函式來判斷到底是否是串列埠傳送完成中斷,方法是:

usart_getitstatus(usart1, usart_it_tc)

返回值是set,說明是串列埠傳送完成中斷發生。

STM32之串列埠通訊 學習筆記

並行通訊 按位傳輸 序列通訊 按乙個位元來傳輸 單工 單向傳輸,一根訊號線 半雙工 雙向傳輸,某一時刻只能往乙個方向傳輸,一根訊號線就可以了 全雙工 雙向傳輸,同時往兩個方向傳輸,一般需要有兩根訊號線 同步通訊 必須有同步時鐘訊號線 非同步通訊 設定相同的波特率不需要時鐘訊號線 常見的串列埠通訊介面...

STM32串列埠筆記

參考原子的程式 基本照抄o o 串列埠設定的一般步驟可以總結為如下幾個步驟 1 串列埠時鐘使能,gpio 時鐘使能 2 串列埠復位 3 gpio 埠模式設定 4 串列埠引數初始化 5 開啟中斷並且初始化 nvic 如果需要開啟中斷才需要這個步驟 6 使能串列埠 7 編寫中斷處理函式 時鐘設定,埠模式...

正點原子STM32串列埠例程解析

學習32,串列埠的使用很重要,特別是現在學的越多就覺得在很多方面通訊才是主角,原子歷程寫的挺好,但是我看論壇裡好像沒怎麼有這個的解析那就按自己的理解寫寫吧,希望能幫助到正在學習的同學。然後寫在前面,初學者或者想深入學習一定要多看看參考手冊。在主函中使用以下語句實現將接收到的資料傳送出去 if usa...