stm32 串列埠通訊

2021-10-19 09:33:36 字數 2507 閱讀 2062

串列埠通訊

步驟如下

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;

3.gpio 埠模式設定:pa9 和 pa10 要設定為復用功能;

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.串列埠狀態(即我們需要知道資料的接收與傳送狀態)

rxne(讀資料暫存器非空),當該位被置 1 的時候,就是提示已經有資料被接收到了,並且可以讀出來了。這時候我們要做的就是盡快去讀取 usart_dr,通過讀 usart_dr 可以將該位清零,也可以向該位寫 0,直接清除。

tc(傳送完成),當該位被置位的時候,表示 usart_dr 內的資料已經被傳送完成了。如果設定了這個位的中斷,則會產生中斷。該位也有兩種清零方式:1)讀 usart_sr,寫usart_dr。2)直接向該位寫 0。

1.flagstatus usart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag);

usart_getflagstatus(usart1, usart_flag_rxne);

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

配置 nvic 中斷優先順序分組nvic_init;

使能串列埠中斷的函式是void usart_itconfig(usart_typedef* usartx, uint16_t usart_it, functionalstate newstate)

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

9.獲取相應中斷狀態(既要知道串列埠的工作狀態也要知道)

我們在中斷處理函式中,要判斷該中斷是哪種中斷,使用的函式是:itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it)

usart_getitstatus(usart1, usart_it_tc)

10.中斷服務函式

void usart1_irqhandler(void) ;

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串列埠通訊

串列埠作為mcu最重要的外部介面,同時也是軟體開發重要的除錯手段,其重要性不言而喻。在這裡我們主要從庫函式的角度來講述如何設定串列埠,來達到最基本的通訊功能。串列埠的設定一般可以歸結為以下幾個步驟 1 串列埠時鐘使能,gpio時鐘使能。2 設定引腳復用器對映,呼叫gpio pinafconfig函式...