1. 程式人生 > >串列埠485通訊第一次傳送資料丟失第一個位元組

串列埠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)

注意:這裡強調每次,必須注意!!!