历史上的今天
返回首页

历史上的今天

今天是:2024年12月21日(星期六)

2018年12月21日 | STM8S类型单片机UART一直进入接收中断问题解决方案

2018-12-21 来源:eefocus

问题描述:


在一个项目中,下位机使用的是STM8S003F3为主芯片。在使用RS485进行与上位机通信时,会一直进入接收中断,根本未接收到上位机的正确数据。


解决过程:


一开始以为是485芯片R0引脚未上拉的缘故导致这个问题,经过将此引脚通过MCU内部上拉,问题得到缓解。程序工作也稳定了,运行了一周也没问题,所以一直以为问题解决了,结果在实地安装后,没过多久又出现了这个问题,按理说,如果是外部电磁干扰,应该是偶发,也不应该出现了就不会好起来,干扰源不可能一直都在。然后又是一个头疼的事啊。。继续找答案解决。


这时又跑去官网下载了stm8s类芯片的应用手册,重点就是它了。


原来stm8s类型芯片的UART使用时在接收中断时要注意一个过载问题,下面呢就是手册原文:


过载错误


如果RXNE还没有被复位,又接收到一个字符,则发生溢出错误。数据只有当RXNE位被清零后


才能从移位寄存器转移到RDR寄存器。


当溢出错误产生时:


● OR位被置位。


● RDR内容将不会丢失。读UART_DR寄存器仍能得到先前的数据。


● 移位寄存器中以前的内容将被覆盖。随后接收到的数据都将丢失。


● 如果RIEN位被置1,则产生中断。


顺序执行对UART_SR和UART_DR寄存器的读操作,可复位OR位。



首先STM8的UART接收中断的使能位是RIEN,而当RIEN为1的时候就会进入接收中断,而能让RIEN为1的时候是有两种情况的。


1,一个就是在接收寄存器不为空的时候。(对应的中断请求标志RXNE)


2,另一个就是上面说的过载错误了,在RXNE标志位还没有复位,又接收到一个字符,这时也会触发接收中断。(对应的中断标志位OR)


那么我们的问题就是出现在这里了,我们在每次接收中断都会清除RXNE标志位,但是并没有清除OR标志位,故当出现一次RXNE还没有被复位,又接收到一个字符的情况也就出现了OR一直没被清除,所以就一直进入接收中断了。所以解决问题就是只要每次接收中断都需要清除RXEN和OR这两个标志位就可以解决问题了。


解决方法:


对于RXNE清零有两种方法:直接手动清零或读UART_DR寄存器就可以让RXNE清零。


对于OR清零就不能直接手动写0了,这时为了同时能清除RXNE和OR标志位,我们就使用手册上最后一句给的方案。顺序读取这两个寄存器,这样即清除了OR同时又清除了RXNE标志位。


代码:(用的stm8s lib库)


 INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

{

    /* Read one byte from the receive data register */

if( UART1_GetITStatus(UART1_IT_RXNE) == SET)

{

    Rxdata = UART1_ReceiveData8();

}

}



if( UART1_GetITStatus(UART1_IT_RXNE) == SET)


这句就是读取UART_SR寄存器,函数是库函数


Rxdata = UART1_ReceiveData8();


这句就是读取UART_DR寄存器,Rxdata就是自己定义接收数据的一个变量(缓存区)。函数是库函数,读取八位数据。


至此,无限进入接收中断的问题就解决了。


推荐阅读

史海拾趣

Eurosil Electronics Ltd公司的发展小趣事

面对日益激烈的市场竞争,Eurosil始终保持对研发的投入和关注。公司不断引进新技术、新设备,加强研发团队的建设,推动产品升级和产业升级。通过持续的创新,Eurosil在电子行业中保持了领先地位,并为客户提供了更加先进、高效的产品解决方案。

ETA-USA公司的发展小趣事

进入XXXX年代,ETA-USA开始将重心转向CAE(计算机辅助工程)软件的开发。公司投入大量资源进行研发,成功推出了一系列创新的CAE软件解决方案,如Dynaform,这些软件在覆盖件冲压成形、汽车碰撞模拟等领域取得了显著的应用效果。这一突破不仅巩固了ETA-USA在电子工程领域的地位,也为其后续发展奠定了坚实的基础。

Cardinal Components公司的发展小趣事

随着时间的推移,Cardinal不断推出新的产品系列以满足市场需求。2013年,公司推出了CJ速差器系列,这一系列产品以其高性能和稳定性受到了市场的广泛好评。随后,在2015年,CJ系列被移植到2.5×2.0封装尺寸,进一步提高了产品的集成度和可靠性。这些产品系列的拓展与升级不仅丰富了公司的产品线,也为客户提供了更多的选择。

Connection One公司的发展小趣事

随着技术的不断成熟,Connection One公司开始寻求与其他企业的战略合作。通过与全球知名的电子设备制造商合作,公司的芯片产品得以广泛应用于各类电子设备中。这种合作不仅拓展了公司的市场份额,还提升了其品牌知名度。

FOSLINK公司的发展小趣事

FOSLINK公司自成立以来,始终将技术创新视为企业发展的核心驱动力。在早期,公司专注于研发高性能的电子元器件,如混合积体电路(IC)和单石数位积体电路(ASIC)。通过不断的技术积累和优化,FOSLINK成功推出了多款具有行业领先地位的产品,不仅满足了市场对高质量电子元器件的需求,还引领了行业的技术进步。这一系列的创新成果,使FOSLINK在电子行业中逐渐崭露头角,赢得了众多客户的信赖和好评。

胜利(VICTOR)公司的发展小趣事

随着产品的不断升级和市场的扩大,胜利公司开始将目光投向国际市场。1980年代,VICTOR品牌成功进入欧美市场,凭借优质的产品和合理的价格,迅速赢得了消费者的认可。公司还积极参加国际赛事,通过赞助等方式提升品牌知名度。

问答坊 | AI 解惑

一个牛人对模拟电路的理解(转)

复旦攻读微电子专业模拟芯片设计方向研究生开始到现在五年工作经验,已经整整八年了,其间聆听过很多国内外专家的指点。最近,应朋友之邀,写一点心得体会和大家共享。 我记得本科刚毕业时,由于本人打算研究传感器的,后来阴差阳错进了复旦逸夫 ...…

查看全部问答>

8051超生波测距电路图+测距程序(全)

本人急需8051超生波测距电路图+测距程序(全),望各位大虾帮帮忙,谢谢…

查看全部问答>

照明电器国家标准目录.doc

谁要是有全部的就好了…

查看全部问答>

有没有无线倒车摄像头,内置锂电的

来自EEWORLD合作群:499581  群主:wangkj…

查看全部问答>

求问 Driver达人,DDk工具的区别

最近买了大家推荐的《Windows驱动开发详解》,按照作者要求配置开发环境, 但是没有下载到Xp的DDk,只下载到win2000 DDK, 想问下这个能用来编译 作者的驱动例子么? 最好动手做过的,不要推理啊,因为我问过,说是没问题,但是 编译了作者的hel ...…

查看全部问答>

nfs 挂载问题??

哪位高手能解决?小弟nfs挂载有问题 mount: wrong fs type, bad option, bad superblock on 192.168.66.206:/hh123       missing codepage or other error       In some cases useful info is found ...…

查看全部问答>

串口读数据出现误码?

做了一个读写串口的程序。 存在如下问题 在串口打开后,建立串口收数据线程,监控串口传来的数据。每当收到数据后再进行处理。 现在的问题是当用到ClearCommError(ceSeries->m_hComm,&dwReadErrors,&cmState);的时候cmState获得接收到数据的长度 ...…

查看全部问答>

gsm modem 的怎样选择啊?

求教高人啊,我所在单位有短信需求发送需求啊,量比较大,一个月几万条记录,问怎样采购GSM MODEM啊,口碑、服务好一些的啊,有二次开发包的最好啊,小弟刚接触这方面,不懂,有知道的回回啊,发者有分啊…

查看全部问答>

msp430做频率计

刚学MSP430没几天,想自己做一个数字频率计,原理是什么,如何设置寄存器,谢谢!…

查看全部问答>