STM32之USART 232串列埠通訊《一》

2021-08-01 01:13:45 字數 4587 閱讀 6752

1)開啟gpio的時鐘使能和usart的時鐘使能。

2)設定串列埠 io 的 io 模式(一般輸入是浮空輸入,輸出是復用推挽輸出)

3)初始化usart。(包括設定波特率、資料長度、停止位、校驗位等)

4)如果使用中斷接收的話,那麼還要設定 nvic 並開啟中斷使能。(即設定 它的中斷優先順序)

1)rcc_)apb2periphclockcmd()函式

開啟時鐘函式,我們要開啟時鐘有兩個 gpio 口時鐘和 usart 時鐘。rcc_apb2periphclockcmd(rcc_apb2periph_gpioa,enable);

rcc_apb2periphclockcmd(rcc_apb2periph_usart1,enable);

兩個函式分別開啟了 gpioa 和 usart1 的時鐘(usart 使用的是 pa9 、pa10)。

2) gpio_init()函式

gpio_initstructure.gpio_pin = gpio_pin_9; //tx

gpio_initstructure.gpio_speed=gpio_speed_50mhz;

gpio_initstructure.gpio_mode = gpio_mode_af_pp;

gpio_init(gpioa,&gpio_initstructure);

gpio_initstructure.gpio_pin = gpio_pin_10;//rx

gpio_initstructure.gpio_mode = gpio_mode_in_floating;

gpio_init(gpioa,&gpio_initstructure);

3) usart_init()函式

這個函式用於配置 usart 的設定,它擁有兩個輸入引數。

第乙個引數是用來設定要選擇的串列埠,我們要使用的是usart1,所以 我們設定:usart1

第二個引數是傳遞乙個結構體的指標,這個結構有6個成員

1、第乙個成員是:usart_baudrate,表示要設定的串列埠波特率,我們可以設定我們想要的波特率。

2、第二個成員是:usart_wordlength,,表示要傳送資料的長度,一般是8位資料長度,所以我們設定為,usart_wordlength_8b.

3、第三個成員是:usart_stopbits,表示停止位的長度,我們設定為:usart_stopbits_1;

4、第四個成員是:usart_parity. 表示是否需要校驗, 我們設定為不需要,usart_parity_no.

5、第五個成員是:usart_hardwareflowcontrol, 表示是否需要硬體流, 所謂硬體流就是使用 dma ,我們這裡不適用, 所以我們設定為硬體流使能

usart_hardwareflowcontrol_none

6、第六個成員是:usart_mode, 表示你要設定的模式,我們要設定既能接收又能傳送, 所以設定為 :usart_mode_tx|usart_mode_rx. 所以最後設定的**為:

usart_initstructure.usart_baudrate=9600; //波特率設定為 9600 //波特率

usart_initstructure.usart_wordlength=usart_wordlength_8b; //資料

長 8 位

usart_initstructure.usart_stopbits=usart_stopbits_1; //1 位停止

位usart_initstructure.usart_parity=usart_parity_no; //無效驗

usart_initstructure.usart_hardwareflowcontrol=usart_hardwareflowcontr

ol_none; //失能硬體流

usart_initstructure.usart_mode=usart_mode_rx|usart_mode_tx; //開

啟發送和接受模式

usart_init(usart1,&usart_initstructure); /* 初始化 usart1 */

4)、usart_cmd()函式

串列埠使能函式,它有兩個輸入引數。第乙個引數是用來設定要設定的usart,我們要開啟的是 usart1, 所以我們設定為 usart1。第兩個引數用來選擇設定的狀態,所以我們設定為:usart_cmd(usart1,enable);

5)、nvic_init(&nvic_initstructure)函式

用來設定中斷的優先順序和開啟總中斷。這個要輸入乙個結構體指標。 這個結構

體的引數分別有四個成員:

第乙個成員是 nvic_irqchannelpreemptionpriority, 表示搶占優先 級的等級,

我們設定為 0。

第二個成員是 nvic_irqchannelsubpriority,表示響應優先順序的等 級,我們也

設定為 0。

第三個成員是 nvic_irqchannel,表示選擇你要設定的全域性中斷, 我們設定是 usart1 的中斷, 所以我們設定 : usart1_irqn。

第四個成員是 nvic_irqchannelcmd,表示要設定的狀態, 我們是要開啟中斷的,所以我們設定為:enable

還有我們要對中斷進行分組,我們使用的是組1,如下:

nvic_prioritygroupconfig(nvic_prioritygroup_1);

詳細地nvic中斷優先順序配置請參考一下資料:

6)usart_senddata()函式

這個函式是用來傳送資料的,它有兩個引數:

第乙個引數是用來選擇使用的 usart 我們要使用 usart1,所以選擇 usart1;第二個引數是用來傳遞要傳送的資料,一般為乙個8位資料。

注意:這個傳送函式結束之後一定要接乙個檢測狀態函式, 用來檢測你的資料是否傳送完成,如果不檢測的話,傳送回產生錯誤。

7)usart_getflagstatus()函式

這個函式是用來檢測狀態的函式,它有兩個引數:

第乙個引數是用來選擇要檢測的usart ,我們可以選擇usart1,;

第二個引數是用來設定要檢測的狀態的,我們要檢測usart是否傳送完成,所以我們設定:usart_flag_tc。這個函式還有乙個返回值,如果傳送完成,那麼它返回set(set也是非0),如果沒有傳送完成,那麼它返回reset,即0。

8)、usart_itconfig()函式

是用來開啟 usart 中斷函式,它有三個引數:

第乙個引數是選擇要開啟的usart,我們使用usart1.

第二個引數用來選擇要開啟 usart中斷的哪個中斷,我們選擇開啟接收中斷,即usart_it_rxne;

最後乙個引數用來設定狀態,我們設定為enable:

usart_itconfig(usart1, usart_it_rxne ,enable);

9)usart的中斷函式

前面我們學習 nvic 的時候,我們說過,在庫函式中,每個中斷的 中斷函式

名字都已經幫我們定義了好,一般放在啟動檔案中(大家可以 開啟

startup_stm32f10x_hd.s 檢視 264 行之後,都是幫起好的中斷函式) 。 而我們

要使用 usart1 的中斷函式叫做:void usart1_irqhandler (void);需要注意

的是,因為我們中斷函式只有乙個,但是中斷標誌卻有 多種,所以在中斷函式

中,最好確認檢測一下相應的中斷標誌位,看看 產生中斷的是否是你想要的中

斷。10)usart_getitstatus()函式

這個函式是獲取中斷標誌狀態函式,它有兩個引數:

第乙個引數是用來選

擇要讀取的串列埠,我們要讀取 usart1,所以 這個引數設定為:usart1。

第二個引數是選擇要讀取的中斷標誌位,我們要讀取的是接收中斷 的標誌位,所以這個引數設定為:usart_it_rxne。 它是接收緩衝器非空標誌位,即接收緩衝器非空標誌位置為set

它還有乙個返回值,如果中斷標誌設定了,那麼它返回 set (set 也就是非零) , 如果中斷標誌沒有設定, 那麼它返回 reset(即 0) ; 所以我們讀取的函式應該寫為:

usart_getitstatus(usart1, usart_it_rxne)。

與它相對應的有usart_it_txe:傳送完成標誌位,即傳送完成標誌位置為set

10)usart_receivedata()函式

這個函式用來讀取 usart 接收到的資料。它有乙個引數。這個引數 是用來

選擇你要讀取的 usart, 我們要讀取 usatt1, 所以我們設定為:usart1。 這

個函式通過返回乙個 16 位的資料。 當然如果你是通過 8 位傳送的, 那麼它

就返回乙個 8 位的資料。

STM32學習之USART串列埠

通用同步非同步收發器 usart 支援lin 區域性互連網 智慧卡協議和irda 紅外資料組織 sir endec規範,以及數據機 cts rts 操作 允許多處理器通訊 使用多緩衝器配置的dma方式,可以實現高速資料通訊。stm32f107有5個usart。usart暫存器 狀態暫存器 usart...

STM32 串列埠USART 通訊

通過stm32向串列埠傳送資料顯示在串列埠終端上 我用的是串列埠除錯工具 並且在除錯工具上傳送認識字元,然後在終端上顯示出來,就是這樣了,分別驗證了usart1和usart2,雖說只是乙個1和2,但是初始化時鐘的時候,並不一樣的,我們先來看卡下圖中 各個模組,io口時鐘分布 在系統初始化各個模組前,...

STM32詳細配置 USART

前言 串列埠對於處理器來說算是一種標配,也是在軟體開發中必不可少的,那就是使用串列埠來除錯資訊 列印出相應的資訊 stm32f0系列的晶元,串列埠根據型號不同,數量也不同,從1個到8個不等。今天主要總結串列埠簡單且常用的功能,傳送字元和 中斷接收字元。今天提供的串列埠傳送功能將在後面的各個模組總結中...