STM32串列埠通訊

2021-07-25 20:24:11 字數 3265 閱讀 1357

串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。

在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。

串列埠的設定一般可以歸結為以下幾個步驟:

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

2)設定引腳復用器對映,呼叫gpio_pinafconfig函式。

3)gpio初始化設定:設定為復用模式。

4)串列埠引數初始化,包括波特率,字長,奇偶校驗位等。

5)開啟中斷並且初始化nvic,使能中斷。

6)使能串列埠。

7)編寫中斷處理函式:函式名稱格式為usartxirqhandler 。

下面,我們依次對照庫函式來進行串列埠的配置。

1)串列埠時鐘使能和gpio時鐘使能。

rcc_apb2periphclockcmd(rcc_apb2periph_usart1,enable);//

使能usart1

時鐘rcc_ahb1periphclockcmd(rcc_ahb1periph_gpioa,enable); //

使能gpioa

時鐘2)設定引腳復用

gpio_pinafconfig(gpioa,gpio_pinsource9,gpio_af_usart1); //pa9

復用為

usart1

gpio_pinafconfig(gpioa,gpio_pinsource10,gpio_af_usart1);//pa10

復用為usart1

3)gpio口模式設定

gpio_initstructure.gpio_pin = gpio_pin_9 | gpio_pin_10; //gpioa9

與 gpioa10

gpio_initstructure.gpio_mode = gpio_mode_af;//

復用功能

gpio_initstructure.gpio_speed = gpio_speed_50mhz; //

速度50mhz

gpio_initstructure.gpio_otype = gpio_otype_pp; //

推挽復用輸出

gpio_initstructure.gpio_pupd = gpio_pupd_up; //

上拉gpio_init(gpioa,&gpio_initstructure); //

初始化pa9

, pa10

4)串列埠引數初始化

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); //

初始化串列埠

5)使能串列埠

usart_cmd(usart1, enable); //

使能串列埠

6)串列埠資料傳送與接收

void usart_senddata(usart_typedef* usartx, uint16_t data); // 向串列埠寫入乙個資料

uint16_t usart_receivedata(usart_typedef* usartx); // 從串列埠讀入乙個資料

7)讀取串列埠狀態

flagstatus usart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag)

;第二個引數標示我們所要檢視串列埠的哪種狀態,如rxne(讀資料暫存器非空),tc(傳送完成)等。

8)開啟中斷並且初始化nvic,使能相應中斷。

先要配置nvic中斷優先順序分組

nvic_initstructure.nvic_irqchannel = usart1_irqn;

nvic_initstructure.nvic_irqchannelpreemptionpriority=3;//

搶占優先順序

3nvic_initstructure.nvic_irqchannelsubpriority =3; //

響應優先順序

3nvic_initstructure.nvic_irqchannelcmd = enable; //irq

通道使能

nvic_init(&nvic_initstructure); //

根據指定的引數初始化

vic

暫存器接下來需要使能相應中斷函式

void usart_itconfig(usart_typedef* usartx, uint16_t usart_it,functionalstate newstate)

第二個入口引數標示使能的串列埠型別,如

usart_itconfig(usart1, usart_it_rxne, enable);//

開啟中斷,接收到資料中斷

usart_itconfig(usart1

,usart_it_tc

, enable); //傳送資料結束產生中斷

需要注意的是,我們在使用中斷之前必須先設定系統中斷優先分組

nvic_prioritygroupconfig(nvic_prioritygroup_2);//

設定系統中斷優先順序分組 

2 9)獲取相應中斷狀態

itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it)

比如我們使能了串列埠傳送完成中斷,那麼我們在中斷處理函式中,需要判斷該中斷是不是串列埠傳送完成中斷,

usart_getitstatus(usart1, usart_it_tc)

10)中斷服務函式

void usart1_irqhandler(void) ; //串列埠1的中斷服務函式

stm32串列埠通訊

通訊方式 1 同步通訊 帶時鐘同步訊號傳輸 spi,iic等 2 非同步通訊 不帶時鐘用途訊號 usrt,單匯流排 stm32串列埠引腳表 串口號 rxd txd 1 pa10 pa9 2 pa3pa2 3 pb11 pb10 4 pc11 pc10 5 pd2pc12 通訊過程 接收過程 由rx入...

STM32串列埠通訊

1.常用的串列埠相關暫存器 1 usart sr狀態暫存器,對應的庫函式 flagstatus usart getflagstatus usart typedef usartx,uint16 t usart flag 2 usart dr資料暫存器,對應的庫函式 void usart senddat...

stm32串列埠通訊

stm32串列埠通訊主要是配置相應的引數 1 初始化串列埠引腳 void usartgpioconfigure void 2 初始化串列埠的一些引數 void usartconfigure void 3 初始化串列埠時鐘 void usartrccinit void 5 實現中斷函式 void us...