芯片缺貨的情況依然沒有緩解,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的芯片正常作業,但是航順的芯片會死機或者復位,性能還是有差距,當然,這個問題也可以通過優化電源設計等方法來解決,
總的來說,這個芯片在價格上有其優勢,但在性能上也有有待優化的空間,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/292427.html
標籤:其他
上一篇:第1期Ubuntu入門篇:【9】Ubuntu下的磁盤管理
下一篇:智慧農業土壤墑情實時監測
