串列埠485通訊第一次傳送資料丟失第一個位元組
描述如標題
思路:多次測試只在第一次通訊資料出現此種情況,查資料手冊發現如下:
在USART_DR暫存器中寫入了最後一個數據字後,在關閉USART模組之前或設定微控制器進入低功耗模式(詳見下圖)之前,必須先等待TC=1。 使用下列軟體過程清除TC位: 1.讀一次USART_SR暫存器; 2.寫一次USART_DR暫存器。 注: TC位也可以通過軟體對它寫’0’來清除。此清零方式只推薦在多緩衝器通訊模式下使用。
解決方案:
1:寫一次USART_DR暫存器之前必須先讀取一次USART_SR暫存器
if(USART_GetITStatus(USART1,USART_FLAG_TC)!=Bit_SET) //清除TC位 { USART_SendData(USART1,Temp); //傳送資料 while (USART_GetFlagStatus(USART1,USART_FLAG_TC) !=SET); //輪詢知道傳送完畢(等待TC=1) }
2:寫一次USART_DR暫存器之前必須先通過軟體對TC位寫’0’清除
USART_ClearFlag(USART1,USART_FLAG_TC); //清除TC位 USART_SendData(USART1,Temp); //傳送資料 while (USART_GetFlagStatus(USART1,USART_FLAG_TC) !=SET); //輪詢知道傳送完畢(等待TC=1)
注意:這裡強調每次,必須注意!!!