Есть программка для выявления проблемы.
Простое usart эхо, принимает байты - срабатывает прерывание и отправляет hello назад.
Сам код может быть странный, но суть не в этом. Выдернули из большого.
Суть в том, что прерывание "виснет" когда начинаю бомбить быстро байтами. Как будто захлебывается. Помогает только снятие питания или резет.
и срабатывает строка "if(HAL_UART_Receive_IT(&huart1, &rcv, 1)!=HAL_OK)"
Как быть? В чем проблема?
Сразу для ответов "гугли", "читай RM" и прочих ... проходим мимо!
Я хочу получить ответ, о тех, кто действительно умный и знает, как решить проблему, кто уже сталкивался с этим.
....
UART_HandleTypeDef huart1;
....
char rcv;
volatile int rcvd;
....
....
int main(void)
{
...
MX_USART1_UART_Init();
...
while (1)
{
if(rcvd)
{
HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_SET);
rcvd = 0;
HAL_UART_Transmit(&huart1, "Hello!\r\n", 8, 0xFFFF);
HAL_GPIO_WritePin(Led_GPIO_Port, Led_Pin, GPIO_PIN_RESET);
}
}
}
....
....
....
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart == &huart1)
{
if(rcv == '\n') rcvd = 1;
if(HAL_UART_Receive_IT(&huart1, &rcv, 1)!=HAL_OK)
{
HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_0);
}
}
}
...
...
...