這兩天在做串列埠誤位元速率通訊的實驗的時候,發現串列埠列印資料會發生第一發個資料丟失的情況,通過查閱資料,具體原因為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函式...