打印
[MCU新闻]

关于N76E003的应用问题

[复制链接]
1631|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
尛舞icc|  楼主 | 2018-10-10 14:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如标题,N76E003驱动TM1652数码管芯片,用IO口模拟串口发送,在不关中断的情况下,发送的数据出错率非常高,而且定时器中断开启,影响到端口翻转的速率,请问大家有没遇到这种情况???   
STM8S003上应用时没有这样的现象。
有精通的高手解答一下不。
沙发
tianxj01| | 2018-10-11 10:13 | 只看该作者
软串口,最容易被中断干扰,发生误码,这个不用怀疑,STM8S003也一样,单片机工作原理决定了的,你说原来STM8S003不会出现,不用问,不是发送期间关闭了中断,就是用的硬件串口。
定时器中断开启,影响到端口翻转的速率??没明白你的问题具体什么意义。
想要软串口不发生误码,可以采用中断编写软串口程序发送数据,定义中断级别比别的中断高,该中断可以是软中断或者是其他的比如定时器中断。简单一点发送期间,关闭其他可能冲突的中断。
其实,TM系列,同样功能的有SPI驱动的,就稳定多了,不关中断,软SPI驱动妥妥的。

使用特权

评论回复
板凳
jasontu| | 2018-10-11 11:07 | 只看该作者
同楼上,应该是io送资料出去时,中断打断io资料发生的时间。

使用特权

评论回复
地板
tianxj01| | 2018-10-11 16:20 | 只看该作者
jasontu 发表于 2018-10-11 11:07
同楼上,应该是io送资料出去时,中断打断io资料发生的时间。

对啊,简单一点,比如开了一个time 定时中断,而软串口发送期间,发生time中断,那么该中断直接打断软串口程序执行中断函数,如果程序比较长,而软串口波特率比较高,就非常容易产生发送误码。
解决的办法其实也简单,比如这里必须这个time中断程序,那么干脆就把软串口发送程序写到该中断,并且把该中断优先级定义为高。
当我们需要发送串口数据时候,就把发送缓冲区填满,变长度的,需要另外给个长度寄存器。然后给个发送标记,在该time中断发生时候,检测发送标记,有的就发送缓冲区就成了。这样该time就变成软串口的同步发送定时器,而其他中断优先级比较低,不会打断本中断,这样就不可能发生误码。

使用特权

评论回复
5
734774645| | 2018-10-12 19:39 | 只看该作者
正常,因为你发送时候可能被中断程序打断。

使用特权

评论回复
6
小灵通2018| | 2018-10-13 09:21 | 只看该作者
应该在发送的时候关闭中断,发送完后恢复。就可以了。

使用特权

评论回复
7
Q80351951| | 2018-10-13 09:30 | 只看该作者
优先级搞高就没事了

使用特权

评论回复
8
尛舞icc|  楼主 | 2018-10-13 13:05 | 只看该作者
tianxj01 发表于 2018-10-11 10:13
软串口,最容易被中断干扰,发生误码,这个不用怀疑,STM8S003也一样,单片机工作原理决定了的,你说原来ST ...

感谢解答,但是 STM8S003也是用IO口模拟UART_TX驱动芯片   开着定时器  也没关系    还是不太理解STM8为什么就可以  不出问题

使用特权

评论回复
9
小明的同学| | 2018-10-14 13:19 | 只看该作者
好多人喜欢在中断函数了干一堆事情,不知道这样会影响到其他的程序运行。

使用特权

评论回复
10
小明的同学| | 2018-10-14 13:20 | 只看该作者
不是超级紧急的事情不要在中断里直接处理,搞一些全局变量作为状态标志位,中断里只对这些标志位进行置位操作,主函数里根据状态位再进行顺序操作。

使用特权

评论回复
11
小明的同学| | 2018-10-14 17:52 | 只看该作者
尛舞icc 发表于 2018-10-13 13:05
感谢解答,但是 STM8S003也是用IO口模拟UART_TX驱动芯片   开着定时器  也没关系    还是不太理解STM8为 ...

两个程序肯定设计不同了,一个影响到了,一个没有影响到,跟单片机无关。比如一个你中断处理内容比较少,或者刚好跟虚拟串口错开了。

使用特权

评论回复
12
jekey| | 2018-10-14 18:14 | 只看该作者
stm8运行得比n76e003快,所以stm8可以正常。
用n76e003的定时器做软件串口应该可以解决。

使用特权

评论回复
13
hwpga| | 2018-10-14 19:23 | 只看该作者
程序写的不行,跟芯片没什么关系
N76E003模拟串口38400bps 收发都没丢帧

使用特权

评论回复
14
尛舞icc|  楼主 | 2018-10-20 08:08 | 只看该作者
小明的同学 发表于 2018-10-14 17:52
两个程序肯定设计不同了,一个影响到了,一个没有影响到,跟单片机无关。比如一个你中断处理内容比较少, ...

中断里面内容一样,只做2条指令,标志位自加,没别的,基本的常识还是知道的,不会在中断里面处理内容的

使用特权

评论回复
15
尛舞icc|  楼主 | 2018-10-20 08:09 | 只看该作者
hwpga 发表于 2018-10-14 19:23
程序写的不行,跟芯片没什么关系
N76E003模拟串口38400bps 收发都没丢帧

不会吧,几10款产品在量产了,不至于这个写不好吧,还是感觉这2个芯片有区别,而且定时器这么差别很大

使用特权

评论回复
16
小灵通2018| | 2018-10-21 23:24 | 只看该作者
解决了吗,还是问题依旧。

使用特权

评论回复
17
尛舞icc|  楼主 | 2018-10-23 15:38 | 只看该作者
小灵通2018 发表于 2018-10-21 23:24
解决了吗,还是问题依旧。

只能通过关中断解决....

使用特权

评论回复
18
寂静的火| | 2018-11-14 14:55 | 只看该作者
可能是51和stm8本身架构的问题吧,,51进一次中断保存现场几条指令退出几条指令。stm8没用过,但是stm32我记得是一次性全部保存
另一个方面,,上面也有人说了,,就是指令周期的问题,新塘这个里面大部分指令都是要几个时钟周期才能执行完的,stm8可能不用吧。
另外现在keil优化的时候也不知道用的是什么版本的指令对应时间,上次看了下汇编出来的程序有些东西用的运算方式明显不是快速的做法,而我配置里面设置的是以速度为目的进行优化。
我做这个对时间有要求的部分都是要参照汇编出来的程序重新调整下c的写法。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

230

帖子

2

粉丝