三分鐘學會國產(chǎn)低功耗華大單片機四(多種調(diào)試方法及printf輸出)
工程師做單片機軟件開發(fā)的時候必然要對所寫的軟件進行驗證。其實就是我們讓寫的程序跑起來通過一定的手段來觀察MCU的CPU與寄存器是否與我們的理論值相同的操作。通常采用的手段有如下幾種:
- 仿真器(如J-link等)仿真;
- IO口指示;
- 液晶屏信息輸出;
- 串口輸出。
以上幾種方法中方法1仿真器仿真最直接,在仿真環(huán)境中可以清楚明確的看到自己想要的信息。但也有其局限性,如產(chǎn)品把芯片的引腳全部占滿在調(diào)試最后的功能時正好用到了仿真的引腳;有些芯片進入低功耗模式為了降低功耗會關掉仿真接口等等。方法2最容易實現(xiàn),只需在調(diào)試的時候使用MCU某一引腳為輸出,程序中讀取想要的內(nèi)容做判斷后在這個引腳輸出即可。我們可以用示波器量這個引腳的電平,或直接接個指示燈來觀察就可以。方法3的使用比較受限,比較適合有LCD顯示的產(chǎn)品。方法4串口輸出的方法是我們今天的重點。
就像前面所說的當仿真接口不方便的時候可以用串口來調(diào)試,那有沒有什么情況下串口調(diào)試效率會比仿真器高呢?答案是肯定的。舉個例子,做平衡系統(tǒng)時調(diào)節(jié)PID參數(shù),我們是會選擇 修改參數(shù)–>編譯–>燒錄–>運行–>修改…,還是做一個功能可以一邊運行一邊修改參數(shù)呢?顯然一邊運行一邊修改效率會高很多,而通常的仿真器仿真時都要設置斷點來觀察值,如果要修改參數(shù),則要重新編譯–>燒錄–>運行,想要邊運行邊修改很難,F(xiàn)在的應用開發(fā)都講究交互試設計,我們在調(diào)試程序的時候是否也可以呢?還用上面的例子,我們可以加下兩個按鍵分別定義為“加”和“減”用來修改參數(shù),當然不要這兩個按鍵也是可以的,只要把參數(shù)按一定的規(guī)律做變化就可以,參數(shù)和運行的結果都通過串口輸出,這樣我們就可以很直觀的看到哪組參數(shù)是合適的。
用串口輸出就要編寫串口代碼,大家知道如果用串口輸出的數(shù)據(jù)比較容易,但是不是很直觀,有沒有什么方法可以像我們學C語言時候直接用printf()。來輸出我們想要的內(nèi)容呢?這是個非常好的問題,華大單片機實現(xiàn)起來十分簡單。現(xiàn)在就以國產(chǎn)超低功耗華大單片機HC32F003為例向大家介紹如何來實現(xiàn)printf()的輸出。
還是用之前建立好的空工程,閑話少說直接上代碼。
#define DEBUG #include "gpio.h"int main(){ Clk_SetPeripheralGate(ClkPeripheralUart0, TRUE); //開UART0外設時鐘 Clk_SetPeripheralGate(ClkPeripheralBt, TRUE); //開定時器外設時鐘 Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE); //開GPIO外設時鐘#ifdef DEBUG Debug_UartInit(); //調(diào)試串口初始化#endif #ifdef DEBUG printf("This is a UART Test!"); //輸出調(diào)試內(nèi)容#endif while(1) { ; }}
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
本文旨在拋磚引玉,其余具體使用歡迎加群164973950交流。
?國產(chǎn)低功耗華大單片機主力型號如下:
HC32F003 HC32F005 HC32L110 HC32F030 HC32L136 HC32M140 HC32F146 HC32L150 HC32L156
芯片相關資料下載鏈接:https://blog.csdn.net/lvk/article/details/85260690
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
代碼很簡單先打開UART0,定時器,GPIO的外設時鐘,因為我們使用串口這三個外設是必須用到的。
第二部分如果定義了DEBUG則對調(diào)試串口進行初始化。初始化在ddl.c文件中完成。
可以看到串口用到了芯片的P35為TX引腳,特率為19200bps。
如果定義了DEBUG則輸出This is a UART Test!(這里的內(nèi)容根據(jù)實際需要自己來定義。)
通過USB轉TTL我們可以把數(shù)據(jù)傳到電腦上,在電腦中我們打開串口調(diào)試工具可以看到程序跑起來后我們收到的數(shù)據(jù)與理論值相同。如下圖所示:
我們在開發(fā)的時候只要在我們想要觀察結果的位置加上以下語句就可以
#ifdef DEBUG printf(); ????????????????????????????//輸出調(diào)試內(nèi)容#endif
當程序全部OK以后這部分語句也可以不進行刪除,只要把程序最開始的
#define DEBUG 語句注釋掉,程序中所有的調(diào)試語句都不參考最終程序的編譯,減小程序空間并提高程序運行效率。
其實在程序的開發(fā)過程中各種調(diào)試方法都有自己各自己的優(yōu)缺點,要根據(jù)實際的情況綜合運用最合適的調(diào)試方法,才能讓保證開發(fā)最高效的進行。 ???
編輯:admin 最后修改時間:2020-06-08