2016-06-15 10 views
1

こんにちは私はstm32 HALライブラリを使用してシリアルrx割り込みを作成しようとしています。STM32 HAL rx割り込みはバイトを正しく取得できません

本当にシンプルなプログラムです。 PCはstm32ボードにバイトを与え、stm32はrx割り込みルーチンを使ってそれらのバイトを取ります。

問題は、私が "12345"のように4バイト以上送信すると、stm32ボードは4バイトしか得られず、最後の1バイト(5)はどこかにあります。ここでは理解を深めるための写真です。ここで

enter image description here

はHAL_UART_RxCpltCallbackルーチンで私のコードです:

HAL_UART_Transmit(&huart4, &receive1, 1, 1000); 
HAL_UART_Receive_IT(&huart4, &receive1, 1); 

あなたが任意のアイデアを持っている場合は、コメントしてください:)

答えて

3

を機能チェック:HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)を。

  1. たとえば、16バイトのように十分に長いサイズを作成します。
  2. HAL_UART_RxCpltCallbackルーチンを関数HAL_UART_Receive_IT(...)に呼び出します。私は、最後の文字(\n)を追加するように提案する。このような検出:

    if ((*huart->pRxBuffPtr) == '\n') { 
        HAL_UART_RxCpltCallback(huart); //-------------------------------------------///////// 
    } else { 
        huart->pRxBuffPtr++; 
    } 
    
関連する問題