У меня есть некоторый (в основном сгенерированный 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.
Я особенно обеспокоен тем, что некоторые действия USB-устройства с более высоким приоритетом могут задержать вызов HAL_UART_RxCpltCallback()
, и поэтому один или более символов могут быть потеряны.