▪ 现象
STM8 UART1 开启了读中断,初始化代码如下:
// 配置串口参数为:波特率115200,8位数据位,1位停止位,无校验,禁止同步传输,允许接收发送
UART1_Init((u32)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO, UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
// 启用 UART1 中断
// UART1_IT_RXNE_OR 表示 接收数据寄存器非空或者溢出错误时 触发中断
UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE);
// 启用 UART1
UART1_Cmd(ENABLE);
当通过PC端的串口软件向 STM8 一次性发送多字节数据时(例如:01 02 03),那么STM8就会一直不停的进入读中断,陷入死循环。
▪ 原因
STM8S 类型芯片的 UART 使用时在接收中断时要注意一个过载问题,下面呢就是手册原文:
过载错误:
如果 RXNE 还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当 RXNE 位被清零后才能从移位寄存器转移到RDR寄存器(接收数据寄存器)。
当溢出错误产生时:
- OR位被置位
- RDR内容将不会丢失。读UART_DR寄存器仍能得到先前的数据。
- 移位寄存器中以前的内容将被覆盖。随后接收到的数据都将丢失。
- 如果RIEN位被置1,则产生中断。
如果顺序执行对UART_SR和UART_DR寄存器的读操作,可复位OR位。
首先 STM8 的 UART 接收中断的使能位

本文探讨了STM8S系列MCU的UART模块在接收大量连续数据时出现的过载错误问题,解释了过载产生的原因,并提供了解决方案。
最低0.47元/天 解锁文章
1278

被折叠的 条评论
为什么被折叠?



