關於STM32串列埠列印資料,丟失第乙個位元組的總結

2021-09-23 07:37:29 字數 628 閱讀 9794

這兩天在做串列埠誤位元速率通訊的實驗的時候,發現串列埠列印資料會發生第一發個資料丟失的情況,通過查閱資料,具體原因為stm32的usart的sr暫存器的tc為初始為1,導致第一次列印時的第乙個資料被覆蓋,所以列印不出;現將解決辦法總結如下:

(1)直接修改while的等待條件,while(usart_getflagstatus(usart1, usart_flag_txe)==reset);把tc改為txe,因為txe只能硬體清零,在資料寫進dr時就置0,資料移出時置1,可以保證資料不會在dr被覆蓋;

(2)既然tc位初始為1導致的問題,那麼我們在傳送每乙個位元組前把tc置0也可以解決問題,寫多一句

usart_clearflag(uart4, usart_flag_tc);

(3)條件允許情況下,也可以委屈自己一下,在輸出字元前面加一沒用字元,也可以解決;

(4)在write usart_dr之後,加入乙個小延時,讓資料傳送完畢,應該也能間接排除這個錯誤。 

總結:硬體復位後,串列埠傳送首個資料之前,先讀取一下usart_sr,則能夠保證首個資料傳送時,不出現覆蓋的情況。

:《stm32用printf函式重定向到串列埠usart1發現第乙個字元沒列印出來具體如下:》 

csdn:《stm32串列埠第乙個位元組丟失問題的分析過程》

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函式...