打印
[技术文档]

HK32航顺单片机RS485应用的一个BUG

[复制链接]
1603|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZZY001|  楼主 | 2022-3-28 16:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
芯片缺货的情况依然没有缓解,ST的单片机价格也是居高不下,最近的一个设计中,使用了航顺的一款单片机HK32F103C8T6,价格要比ST的便宜不少,硬件兼容,软件需要做少量改动,上手起来还是比较容易。但在使用过程中也发现一些问题,这里跟大家分享一下。

串口不进接收中断

硬件上是单片机+SP3485芯片,做485通讯,Modbus协议,电路板为从机,电脑为主机,总线上也挂了其它板子的从机设备。

测试过程中发现经常485通讯中断(其它板子正常),重新上电后正常。以为是芯片死机了,但是在线仿真测试的时候发现芯片并没有死机,示波器测试串口接收端是有数据的,只是串口中断进不去了。

然后单独一块板子进行测试,一切正常,但是将485的通讯线短路几次后,又出现上述情况。判断是总线冲突导致的,但是其它板子是别人设计的,不好修改,只好在自己设计的板子上下功夫。换了ST的单片机,发现正常了,确定了是HK单片机的问题。硬件没问题,只能通过修改软件来解决了,清除接收中断、溢出中断、错误中断等都无效,后面在仿真中又发现,出问题后只要将串口寄存器USART1->SR和USART1->DR添加到监视串口,程序就可以恢复了。是不是说明只要读取一下串口寄存器的值就恢复了呢。于是想了一个笨办法:

定义一个全局变量,在滴答定时中断中+1,在串口接收中断中清零。由于485总线上一直在通讯,所以串口应该会频繁的进中断,该变量的值不会很大。在主程序中判断该变量,如果超过1000,说明超过1秒没进串口中断,应该是出问题了,此时程序读取一次串口寄存器的值即可。

if(uart_dect_tick > 1000)
{
      uart_dect_tick = 0;
      uint8_t temp = USART1->SR;
      temp = USART1->DR;
}

经过测试,发现确实是这样,串口接收部分也会偶尔卡一下,但是会自动恢复。没有再出现上面的问题。

在网上也发现其他朋友也遇到了此问题,说明这个芯片确实存在BUG,上面的方法只是一个无奈的解决方案,并不适用于所有情况,要求高的用户还是要慎重选择。

抗干扰性能差

使用过程中还发现,相比ST的芯片,航顺的抗干扰能力还有待优化。相同的硬件,当外部的交流接触器动作时,会引起电源的瞬间波动,ST的芯片正常工作,但是航顺的芯片会死机或者复位,性能还是有差距。当然,这个问题也可以通过优化电源设计等方法来解决。

总的来说,这个芯片在价格上有其优势,但在性能上也有有待优化的空间。


使用特权

评论回复
评论
gyzhuzicheng 2022-6-8 10:17 回复TA
CKS不行,还是看下HK,随时联系13316438070 
LucasYe 2022-3-31 14:28 回复TA
HK的不行,看下CKS呀,随时联系19866620108 

相关帖子

沙发
james03| | 2022-3-28 17:45 | 只看该作者
说明导致串口进入到了ORE状态

使用特权

评论回复
板凳
SDLin| | 2022-3-31 16:47 | 只看该作者
看你的描述,应该是溢出错误,当MCU来不及处理当前接收到的数据,接着又有新数据来了,就会产生溢出错误,这种情况把对应的溢出中断打开,进入中断处理函数中处理即可。这不是bug哦。

1648716389(1).png (253.01 KB )

1648716389(1).png

使用特权

评论回复
地板
gyzhuzicheng| | 2022-6-8 10:16 | 只看该作者
CKS不行,还是看下HK,随时联系13316438070

使用特权

评论回复
5
吾要单片机| | 2022-6-8 12:59 | 只看该作者
没有FIFO吗?

使用特权

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

本版积分规则

60

主题

60

帖子

0

粉丝