TI的MSP430系列是一款功耗低、市面流行的SOC結構的CPU,適合做智能儀表。IAR對其支持得很好,下面就以IAR調試為例來說說MSP430調試過程中一些問題。
1、接上仿真器,發現不能下載,IAR提示找不到目標。
(1)并口驅動能力不足,在電腦的BIOS界面下設置成ECP或者ECP+EPP模式;(2)JTAG線太長,一般超過20CM不推薦,而且這個線最好不要交叉纏繞,會影響實時在線調試;
(3)負載太大,一般功耗相對比較大,電流超過20MA以上的板子,建議用外接電源,光靠并口的電源,MCU的電壓被拉低到不能寫FLASH。
2、程序下載到一半,突然告警并報錯,說某某地址寫不進去。
(1)芯片的復位電路引起的,在寫FLASH的時候,會造成系統電壓的一些波動,可能導致芯片復位,而為什么都是寫到這個地址才錯,那是IAR的問題,改用BSL再燒一邊,就可以克服了。
(2)芯片有可能死機了,斷電,拔掉JTAG,稍后再試,一般沒有問題
(3)如果都不是上述的方法能解決的,可以給芯片上電,電壓=3。6V,重新寫一次,一般就OK了。為什么,寫不進FLASH主要是F1XX系列的寫FLASH電壓不能低于2.7V,一般2.5V以下就不工作了,因此用3.6V電壓,什么樣的片子都能寫回來。
3、F1611大數組定義,不能正常運行的問題
相信有不少朋友已經用上了F1611,這個RAM相對大的MSP430,可能會遇到RAM中定義的變量/數組在超過一個極限的時候,MSP程序不能正常運行的現象。一般初步判斷,可以用I/O輸出電平來確定程序進程,這樣可以非常方便的知道該問題是由于WDT造成的,因為F1611等較大的RAM的初始化時間大于WDT默認的32MS時間,導致MSP復位。
(1)對數組用__noinit_定義,上電,編譯器不產生特殊的附加函數去初始化RAM。(2)修改IAR中Cstartup.S43文件中__program_start子程序,增加一個關閉WDT的操作或者設置WDT時間長度超過32MS。
(3)在Project--Options--Linker--Config中選擇Overridedefault
programe,并將Entrylib設置成__program_start
上述是已知解決1611RAM初始化時間超WDT默認而復位的解決方法,如果用匯編,則沒有這個問題。
4、SVS導致MSP“壞死”問題
SVS在F42X里可是個不錯的模塊,外部設計可以節約一個VD,成本和空間。在使用
時,如果SVS的電壓設置在3.3V,結果一次JTAG寫入后,板子便沒有再起來工作,很多人認為寫廢了這個MSP。此時,可以判斷MCU是否還能工作的方法:接上電源和電流表,如果發現電流有周期性跳躍,確定MCU正在被SVS復位。
解決方法:重新加電壓,超過3.3V,修改設置,重寫FLASH
MSP430單片機的程序有時候容易出現跑飛的情況,導致運行不正常。常見原因總結如下:
沒有設置停止看門狗,也沒有及時喂狗
沒有定義中斷函數,但又開啟了對應的中斷,發生中斷時,找不到中斷函數入口
供電電壓不穩,或IO管腳輸入過大電壓,導致內部數據受到干擾
內存溢出,比如使用sprintf之類的函數很容易出現這種問題
msp430程序跑飛之解決方法
1.中斷或主函數中有死循環,現象是程序停在某處。
2.堆棧溢出。現象是程序跑飛。
解決辦法:
A.看中斷有沒有用 _EINT(),引起中斷嵌套。
B.Project--Options--General Options---Stack/Heap 將Stack size設置大一些。
3.中斷耗時太長,剛出中斷又進去了。這時的現象是程序一直在中斷中執行,回不到主函數。
4.檢查CPU的電源是不是穩定,msp430在要保證程序正常運行,需保證Vcc大于1.8V。當電壓低至0.8V時,程序仍有可能執行。這時的現象是PC指針亂飛,有復位,死機,停在中斷,時鐘頻率發生變化等現象。
5.程序編譯沒問題,下載程序后上電不斷復位,該問題是由于WDT造成的(RAM的初始化時間大于WDT默認的32MS時間,因此MSP復位)根本原因是初始化的時間過長,超過了看門狗的時間,初始化完成以后才能進入main函數,這時關狗已經來不及了。
解決的辦法:
A 對你的數組用 __no init_定義,上電編譯器不產生特殊的附加函數去初始化RAM.
B 在Project--Options--Linker--Config中選擇 Override default programe,并將Entry lib 設置成 __program_start這時要修改Cstartup.S43(記得把它加入復制到工程而不是修改系統的),在第一條指令前加入關狗的指令,在main函數里再開(如果需要的話)。
如果用匯編,則沒有這個問題
評論
查看更多