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個不等。今天主要總結串列埠簡單且常用的功能,傳送字元和 中斷接收字元。今天提供的串列埠傳送功能將在後面的各個模組總結中...