在线时间17 小时
UID329129
ST金币122
蝴蝶豆2
注册时间2011-11-18
该用户从未签到
中级会员
- 最后登录
- 2022-9-14
|
使用STM32F1做串口通信测试,想试一下在921600波特率下通信是否稳定,stm32cubemx自动生成代码,开启了两个中断,一个定时器Tim2(每1ms中断1次),一个Usart1中断(在中断里面把接收到的1个字符发送出去)。没有启动Tim2中断前,串口能随时发随时收。
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
uint8_t ch[2];
/* USER CODE END USART1_IRQn 0 */
HAL_UART_IRQHandler(&huart1);
/* USER CODE BEGIN USART1_IRQn 1 */
HAL_UART_Receive(&huart1,ch,1,100);
HAL_UART_Transmit(&huart1,ch,1,100);
__HAL_UART_CLEAR_FLAG(&huart1,UART_FLAG_RXNE);
/* USER CODE END USART1_IRQn 1 */
}
主程序啥也不干,空转。
使用了Tim2中断,并且在Tim2里面设置断点,暂停一下,串口就不能接受数据了,再也进不了接收中断。查看寄存器状态,应该是串口连续接收到数据,未能及时响应,造成了ORE故障。所以,只要开启多个中断,串口接收处理不及时,都会产生ORE错误。
请教大家,我是不是在主程序里需要加入ORE故障判断并清除的代码?看了那么多代码,没有见到谁的主程序有判断ORE的代码,也没见人提到过,各位专家是怎么解决的,敬请指教。
|
|