gd32 串口进入USART_INT_FLAG_ERR_ORERR中断,请问这是什么原因造成的?
时间: 2023-09-15 15:20:21 浏览: 321
USART_INT_FLAG_ERR_ORERR中断表示串口出现了溢出错误,这通常是由于接收数据的速度太慢导致缓冲区溢出引起的。你需要检查以下几个方面:
1. 检查串口接收数据的速度是否与发送数据的速度相匹配。如果发送数据的速度比接收数据的速度快,就有可能导致缓冲区溢出。
2. 检查串口缓冲区的大小是否足够。如果缓冲区大小不够,就容易出现缓冲区溢出。
3. 检查串口中断是否正确配置。如果串口中断配置不正确,也有可能导致缓冲区溢出。
4. 检查代码实现是否存在 bug。例如,可能存在某些情况下,没有及时清空串口缓冲区或者错误处理缓冲区溢出的情况。
通过以上的检查,你应该能找到造成USART_INT_FLAG_ERR_ORERR中断的原因。
相关问题
flagstatus = (USART_REG_VAL2(usart_periph, int_flag) & BIT(USART_BIT_POS2(int_flag)));
这段代码是在使用宏定义来获取USART的中断标志位。其中,usart_periph为USART外设的指针,int_flag为中断标志位在寄存器中的偏移量,USART_REG_VAL2和USART_BIT_POS2也是宏定义。BIT是一个位操作宏,将一个数值左移n位,生成一个具有第n位为1的二进制数。
具体地,`USART_REG_VAL2(usart_periph, int_flag)`会返回usart_periph指向的USART外设在int_flag偏移量处的寄存器的值,然后将这个值与`(1 << USART_BIT_POS2(int_flag))`进行按位与操作,得到中断标志位的状态。最后,将flagstatus变量赋值为这个状态值。
usart_interrupt_flag_get(UART3, USART_INT_FLAG_TBE) != RESET
这段代码中没有找到usart_interrupt_flag_get(UART3, USART_INT_FLAG_TBE) != RESET的引用。请确认是否提供了正确的引用内容。
#### 引用[.reference_title]
- *1* [GD32 Usart配置与重定义fputc](https://blog.csdn.net/cftchaoxiaoshu/article/details/122702216)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [RISC-V_GD32VF103-USART 串口中断接收 printf发送](https://blog.csdn.net/qq_43588817/article/details/110007729)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文