リモート温度センサーから温度データを受信するために、xbee に接続された STM32f4 ディスカバリー ボードを使用しています。使用されるコードは、CMIS UART サンプル コードです。パケットデータを1バイトずつ受信します。つまり、UART 受信割り込みは、各バイトが受信されるたびに呼び出されます。完全なパケットを取得したら、温度データをコピーします。私の UART コールバック関数は問題なく動作します。しかし、数時間後、UART 受信割り込みが機能しなくなり、UART は何も受信できなくなります。ただし、UART 送信は引き続き機能します。ボーレート 115200 の UART1 を使用しています。UART 割り込み優先度を 0 に設定しましたが、この優先度を共有する割り込みは他にありません。他のすべての割り込み優先度は UART よりも低くなります。UART 割り込みがトリガーを停止する理由を教えてください。
#define PACKET_DELIMETER 0x7E
uint8_t g_frame_ok=0; //flag to indicate complete packet received
uint8_t g_index_of_aoBuf=0; //Index of receive buffer
uint8_t g_aoBuf_of_xbee[100]={0};//Receive Buffer
uint8_t r_byte=0; //Receiving byte
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *allUartHandle)
{
__HAL_UART_FLUSH_DRREGISTER(allUartHandle);
if(HAL_UART_Receive_IT(allUartHandle, (uint8_t *)&r_byte, 1) == HAL_OK) //Interrupt occurs when each byte arrives
{
if(r_byte==PACKET_DELIMETER)
{
//start receiving packet
}
if( g_index_of_aoBuf>=g_aoBuf_of_xbee[2]+4)
{
g_frame_ok=1;
BSP_LED_On(LED4);
}
}
}