可変長データを受信するためのシリアルポート

(アイドル割り込みSCM用)可変長データプログラムを受信するためのシリアル・ポートは、20msのは時折パック現象を貼り受信側、テスト手順が50ms以上の間隔がスティックパック現象に表示されませんSTM32F4探検を送信するかどうかを判断するためにタイマーを使用しています。

typedefは構造体
{ 
        Rec_Flag uint8_t。
        uint8_tプロセス; 
        uint8_tタイムアウト。/ * 单位MS * / 
        uint8_t Rx_Length。
        uint8_t Tx_Buf [ 64 ]。
        uint8_t Rx_Buf [ 64 ]。
} USART_RTx_TypeDef。

extern USART_RTx_TypeDef USART2_RTx。


空隙 USART2_IRQHandler(ボイド
{ 
  IF(LL_USART_IsActiveFlag_RXNE(USART2) =!RESET)
  { 
    USART2_RTx.Rx_Buf [USART2_RTx.Rx_Length ++] = USART2-> DR。
    スイッチ(USART2_RTx.Process)
    { 
      ケース 0
        USART2_RTx.Timeout = 3 
        USART2_RTx.Process = 1 
        LL_TIM_EnableCounter(TIM1)。
        破ります;
      ケース 1 
        USART2_RTx.Timeout = 3 破ります;
      デフォルト
        USART2_RTx.Timeout = 0 ; 
        USART2_RTx.Process = 0 ; 
        LL_TIM_DisableCounter(TIM1)。
        破ります; 
    } 
  } 
} 


ボイド TIM1_UP_TIM10_IRQHandler(ボイド
{ 
  / * ユーザコードはTIM1_UP_TIM10_IRQn 0 BEGIN * / 
  場合(!LL_TIM_IsActiveFlag_UPDATE(TIM1)= RESET)
  { 
    LL_TIM_CleaRFlag_UPDATE(TIM1)を、
    USART2_RTx.Timeout - ;
    もし(USART2_RTx.Timeoutの== 0 
    { 
      USART2_RTx.Rec_Flag = 1/ * 接收完成标志* / 
      LL_TIM_DisableCounter(TIM1)。
      USART2_RTx.Process = 0 ; 
    } 
  } 
}

 

最後に、まだあなたにいくつかの情報を提供し、私が皆を助ける方法でお願い致します

(STM32シリアルアプリケーション)
http://www.makeru.com.cn/live/1392_1164.html?s=45051

STM32に基づいてシリアル操作説明
http://www.makeru.com.cn/live/1758_490.html?s=45051を

 

おすすめ

転載: www.cnblogs.com/QianD/p/11289514.html