私はいくつかの(主にCubeMXで生成された)コードを持っています:
volatile uint8_t buf[4];
int main(void)
{
...
HAL_UART_Receive_IT(&huart3, buf, sizeof(buf));
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
if (huart->Instance == USART3) {
HAL_UART_Transmit(&huart3, buf, sizeof(buf), 0xFFFF);
HAL_UART_Receive_IT(&huart3, buf, sizeof(buf));
}
}
これは、USART3 で受信したすべてを正常にエコーします。(このコードは、シリアル ポートについて学習するための使い捨ての例です。)
HAL_UART_RxCpltCallback()
呼び出されHAL_UART_Receive_IT()
てから次の受信を設定するまでの時間が気になります。
この間隔でデータが失われないことを保証する STM32F103 の機能はありますか? USART の受信バッファが 2 バイトを超えているという証拠は見つかりませんでした。
優先度の高い USB デバイスの動作によって の呼び出しが遅延し、HAL_UART_RxCpltCallback()
1 つまたは複数の文字が失われる可能性があることを特に懸念しています。