HAL、STM32ライブラリUART_Receive異なるデータ長を解決

___ ___シンプルですが、書かれた良い思い出として悪いです
在stm32f1xx_hal_uart.c文件下修改
 / * * 
  * @briefが非ブロッキングモードでデータ量を受信
  * @paramのhuart:ポインタ含まUART_HandleTypeDef構造に
  *指定されたUARTモジュールの構成情報を。
  * @retval HALの状態
  * / 
// ----------------------------------------- ---------------------------------------- 
uint16_tフラグ、RX_SIZE。
// ------------------------------------------------ --------------------------------- 
静的 HAL_StatusTypeDef UART_Receive_IT(UART_HandleTypeDef * huart)
{ 
  uint16_t * TMP。
  uint32_t tmp_state =0 ; 
  
  tmp_state = huart-> 国家; 
  もし((tmp_state == HAL_UART_STATE_BUSY_RX)||(tmp_state == HAL_UART_STATE_BUSY_TX_RX))
  { 
    場合(huart-> Init.WordLength == UART_WORDLENGTH_9B)
    { 
      TMP =(uint16_t *)huart-> pRxBuffPtr。
      もし(huart-> Init.Parity == UART_PARITY_NONE)
      {
         * TMP =(uint16_t)(huart-> Instance-> DR&(uint16_t)0x01FF )。
        huart - > pRxBuffPtr + = 2 ; 
      } 
      
      {
         * TMP =(uint16_t)(huart-> Instance-> DR&(uint16_t)0x00FFに); 
        huart - > pRxBuffPtr + = 1 ; 
      } 
    } 
    
    { 
      場合(huart-> Init.Parity == UART_PARITY_NONE)
      {
         * huart-> pRxBuffPtr ++ =(uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに)。
                // -------------------------------- STA --------------- ---------------------------------- 
                場合(フラグ== 100 
                {                     
                        もし、(((uint8_t)(huart - > Instance-> DR&(uint8_t)0x00FFに))== 0×05)RX_SIZE = 1 もし(((uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに))== 0x06で)RX_SIZE = 0 
                        フラグ = 101 
                } 
                そう であれば(フラグ< 100)RX_SIZE = 0 
                
                もし(huart-> RxXferCount == 15 
                { 
                    もし、(((uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに))== 0x1A)フラグ+ = 10  RX_SIZE = 255 ; 
                } 
                場合(huart-> RxXferCount == 14 
                { 
                    もし、(((uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに))== 0x5A)フラグ+ = 20  RX_SIZE = 255 ; 
                } 
                であれば(huart-> RxXferCount == 11 
                { 
                    もし、(((uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに))== 0x04の)フラグ+ = 30  RX_SIZE = 255 ; 
                } 
                であれば(huart-> RxXferCount ==9 
                { 
                    もし、(((uint8_t)(huart-> Instance-> DR&(uint8_t)0x00FFに))== 0×00)フラグ+ = 40  RX_SIZE = 255 ; 
                } 
                // --------------------------------- END ------------- ----------------------------------- 
      }
       
      {
         * huart-> pRxBuffPtr ++ =(uint8_t)(huart- > Instance-> DR&(uint8_t)0x007F )。
      } 
    } 
    もし(--huart-> RxXferCount == RX_SIZE || RX_SIZE == 255// -------------------------
    { 
      __HAL_UART_DISABLE_IT(huart、UART_IT_RXNE)。

      / * 送信プロセスが進行中であるかどうかチェックする* / 
      場合(huart->状態== HAL_UART_STATE_BUSY_TX_RX)
      { 
        huart - >状態= HAL_UART_STATE_BUSY_TX。
      } 
      
      { 
        / * UARTパリティエラー割り込み禁止* / 
        __HAL_UART_DISABLE_IT(huart、UART_IT_PE)を、

        / * UARTエラー割り込み禁止:(フレームエラー、ノイズエラー、オーバーランエラー)* / 
        __HAL_UART_DISABLE_IT(huart、UART_IT_ERR)を、

        huart - >状態= HAL_UART_STATE_READY。
      }
            // ------------------------------------------------ --------------------------------- 
            フラグ= 0/////////////// / 
            RX_SIZE = 0//////////// // 
            // ---------------------------------- ----------------------------------------------- 
      HAL_UART_RxCpltCallback(huart );
      返すHAL_OKを。
    } 
    戻りHAL_OKと、
  } 
  
  { 
    戻りHAL_BUSYと、
  } 
}

 

おすすめ

転載: www.cnblogs.com/benhhs/p/11652550.html