STM32F103 UART通訊講解

2021-09-24 08:27:48 字數 2538 閱讀 3974

一、序列通訊的通訊方式

1.同步通訊:帶時鐘同步訊號傳輸,有一根線是同步時鐘。例如spi(全雙功)、iic(半雙工)通訊介面

2.非同步通訊:不帶時鐘同步訊號,必須約定好波特率。例如uart(全雙功)

二、stm32的串列埠通訊介面

uart:通用非同步收發器。

usart:通用同步非同步收發器。

stm32f10x系列包含3個usart和2個uart。

都是ttl電平交叉相連即可

與pc機可以使用usb-ttl進行通訊。

三、通訊引腳

四、常用串列埠相關暫存器

2.usart_dr資料暫存器:通過讀寫這個暫存器來傳送接收資料

3.usart_brr波特率暫存器:

波特率計算方法:波特率=fplclkx /(16*usartdiv);usartdiv=72000000/(115200*16)=39.0625

div_fraction=16*0.0625=1=0x01;(小數部分)

div_mantissa=39=0x27;(整數部分)

從而得到usart_brr波特率暫存器的值為0x0271,這就是115200的波特率對應的暫存器值。

五、串列埠操作相關庫函式

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

串列埠初始化:波特率,資料字長,奇偶校驗,硬體控制流以及收發使能。

第乙個成員變數是串列埠標號,第二個成員變數是結構體

typedef struct

usart_inittypedef;

void usart_cmd(usart_typedef* usartx, functionalstate newstate);

使能串列埠

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

使能相關中斷

void usart_senddata(usart_typedef* usartx, uint16_t data);

傳送資料到串列埠

uint16_t usart_receivedata(usart_typedef* usartx);

從串列埠接收資料

flagstatus usart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag);

獲取狀態標誌位

void usart_clearflag(usart_typedef* usartx, uint16_t usart_flag);

清除狀態標誌位

itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it);

獲取中斷狀態標誌位

void usart_clearitpendingbit(usart_typedef* usartx, uint16_t usart_it);

清除中斷狀態標誌位

六、串列埠配置一般步驟

1.串列埠時鐘使能

rcc_apb2periphclockcmd(rcc_apb2periph_usart1|rcc_apb2periph_gpioa, enable);    

2.串列埠復位(不是必須的)

usart_deinit();

3.gpio模式設定

對gpio口輸入輸出的設定

4.串列埠初始化設定

usart_init(usart1, &usart_initstructure); 

5.開啟中斷並且初始化nvic

nvic_init();

usart_itconfig(usart1, usart_it_rxne, enable);

6.使能串列埠

usart_cmd(usart1, enable);  

7.編寫中斷處理函式

void usart1_irqhandler(void)   

8.串列埠資料收發

void usart_senddata(usart_typedef* usartx, uint16_t data);

uint16_t usart_receivedata(usart_typedef* usartx);

9.串列埠傳輸狀態獲取

itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it);

void usart_clearitpendingbit(usart_typedef* usartx, uint16_t usart_it);

七、串列埠初始化程式編寫

void uart_init(u32 bound)

STM32F103串列埠通訊

usart 通用同步非同步收發器 是乙個序列通訊裝置,可以靈活地與外部裝置進行全雙工資料交換。有別於 usart 還有乙個uart,它是在 usart 基礎上裁剪掉了同步通訊功能,只有非同步通訊。全雙工的,非同步通訊 分數波特率發生器系統 傳送和接收共用的可程式設計波特率,最高達4.5mbits s...

STM32F103XX CAN通訊筆記(一)

一 什麼是can?can是controller area network的縮寫。是一種序列通訊協議,在車載行業中有廣泛的應用,主要連線不同的控制單元和感測器。二 can的通訊協議 三 can的應用 本次對can的研究,主要基於專案需求,研究裝置間通過can通訊進行資料傳輸做一些筆記。平台 stm32...

STM32F103的CAN 通訊之通訊協議

can匯流排的通訊模式 can是一種有效支援分布式控制 3 或實時控制的序列通訊網路,可實現全分布式多機系統 可以用點對點,一點對多點以及全域性廣播幾種方式傳送和接受資料 can匯流排直接通訊距離最遠可達10km 此時傳輸速率可能達到5kb s 通訊速率最高可達1mb s 此時傳輸距離可能達到40m...