___ ___シンプルですが、書かれた良い思い出として悪いです
在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と、 } }