STM32 03 USART(串列埠通訊)

2021-10-24 13:40:15 字數 2895 閱讀 1615

/*usart初始化結構體:該結構體必須配置*/

1typedef

struct

usart_inittypedef;

以及

/*usart時鐘初始化結構體,一般usart用作非同步通訊,不需要配置*/

1typedef

struct

usart_clockinittypedef;

配置usart相關暫存器的過程:先初始化結構體,然後呼叫函式:void usart_init(usart_typedef* usartx, usart_inittypedef* usart_initstruct);

① 開時鐘(gpio、usart的時鐘): 除了開啟usart1時鐘之外,也要開啟對於的gpio時鐘,usart1的tx對應的引腳pa9的時鐘,呼叫函式:rcc_apb2periphclockcmd(rcc_apb2periph_gpioa, enable);

usart1掛載在apb2高速時鐘線上,呼叫函式:rcc_apb2periphclockcmd(rcc_apb2periph_usart1, enable);

值得注意的是此時不需要開啟afio的時鐘,至於afio時鐘什麼時候開啟,可以看這個人,講的很好

②配置模式(復用推挽輸出,浮空輸入): usart1的tx對應引腳pa9的輸出模式為:推挽復用模式,因為usart功能均為引腳的復用功能,輸入模式為浮空輸入。

③配置串列埠的工作引數,使用上述3.1中的函式配置即可。

④如果需要使用usart中斷,則需要配置寫配置nvic的函式。

⑤呼叫函式:void usart_itconfig(usart_typedef* usartx, uint16_t usart_it, functionalstate newstate);來啟用或禁用指定的usart中斷,可以啟用下列中斷。

具體中斷事件如下:

傳送期間:傳送完成、清除傳送、傳送資料暫存器空

接收期間:空閒匯流排檢測、溢位錯誤、接收資料暫存器非空、校驗錯誤、lin斷開符號檢測

⑥使能串列埠(使cr1暫存器的ue位置1),呼叫函式:void usart_cmd(usart_typedef* usartx, functionalstate newstate);

①判斷資料已經傳送完成的標誌有兩個:txe和tc位,txe位用於檢測傳送資料暫存器空,而tc位檢測資料是否傳送完成,因為usart_cr暫存器只有dr[8:0]9位有效,因此在傳送乙個位元組的資料時,可以判斷txe或者tc標誌位,但是對於大資料傳輸時,使用tc位判斷更加準確。

②判斷資料已被接收,可以讀取時,僅根據rxne位判斷即可

void

usart_deinit

(usart_typedef* usartx)

;/*串列埠初始化重置*/

void

usart_init

(usart_typedef* usartx, usart_inittypedef* usart_initstruct)

;/*串列埠初始化*/

void

usart_cmd

(usart_typedef* usartx, functionalstate newstate)

;/*串列埠使能,配置usart-cr1的ue位置1*/

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)

;/*檢查usart-sr暫存器的狀態標誌位是否設定*/

void

usart_clearflag

(usart_typedef* usartx, uint16_t usart_flag)

;/*清除usart的標誌位*/

itstatus usart_getitstatus

(usart_typedef* usartx, uint16_t usart_it)

;/*中斷狀態位獲取函式*/

void

usart_clearitpendingbit

(usart_typedef* usartx, uint16_t usart_it)

;/*中斷狀態位清除函式*/

其中flagstatus usart_getflagstatus(usart_typedef* usartx, uint16_t usart_flag);和itstatus usart_getitstatus(usart_typedef* usartx, uint16_t usart_it);函式檢查的標誌位是一樣的,只是用途不一樣,前者用於檢測資料是否傳送、接收等等,而後者的函式主要用於中斷。

STM32USART串列埠通訊

問題描述 利用usart串列埠程式,實現pc與stm32通訊,計算機傳送資料,stm32接受後,再傳送給pc端 1.gpio埠配置 根據手冊 pa.9為tx 傳送 pa.10為rx 接受 因此 pa.9為復用推挽輸出,pa.10為浮空輸入,一行 搞定 void gpio config 2.配置usa...

stm32 USART 串列埠通訊

簡單區分同步和非同步就是看通訊時需不需要對外提供時鐘輸出 usart 有專門控制傳送的傳送器 控制接收的接收器,還有喚醒單元 中斷控制等等。使用 usart 之前需要向 usart cr1 暫存器的 ue 位置 1 使能 usart,ue 位用來開啟供給給串列埠的時鐘。傳送或者接收資料字長可選 8 ...

plc和pc串列埠通訊接線 USART 串列埠通訊

串列埠通訊協議簡介 串列埠通訊 serial communication 是一種裝置間非常常用的序列通訊方式,因為它簡單便捷,因此大部分電子裝置都支援該通訊方式,電子工程師在除錯裝置時也經常使用該通訊方式輸出除錯資訊。在電腦科學裡,大部分複雜的問題都可以通過分層來簡化。如晶元被分為核心層和片上外設 ...