【STM8】串口数据一直卡在读中断

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

▪ 现象

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 接收中断的使能位

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值