你好!欢迎来到江南娱乐手机客户端 !
语言
当前位置:首页 >> HK32/航顺 >> 航顺单片机RS485应用的一个BUG

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

关键字:航顺单片机 RS485 BUG HK32F103C8T6 作者: 来源: 发布时间:2022-04-14  浏览:9

由于芯片缺货等各种原因引起的价格与交期原因,ST的芯片价格一直居高不下,迫于成本压力,最近尝试使用了航顺的单片机HK32F103C8T6,价格要比ST的便宜不少,硬件兼容,软件需做少许改动,上手容易。跟大家分享一下使用过程中发现的一些小问题。

串口不进接收中断

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




测试过程发现经常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的芯片,航顺的芯片会死机或者复位。当然,这个问题也可以通过优化电源设计等方法来解决。


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


编辑:zzy  最后修改时间:2022-04-14

联系方式

0755-82591179

传真:0755-82591176

邮箱:vicky@yingtexin.net

地址:深圳市龙华区民治街道民治大道973万众润丰创业园A栋2楼A08

Copyright © 2014-2023 江南app官方网站下载安卓 All Rights Reserved.  粤ICP备14043402号-4

Baidu
map