最新教程下載:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255
第5章 STM32F407下載和調試方法(MDK5)
本章教程為大家介紹如何通過MDK5下載程序到芯片里面以及MDK5的調試和配置方法。
5.1 初學者重要提示
5.2 使用MDK調試和下載程序設置(JLINK)
5.3 使用MDK調試和下載程序設置(STLINK)
5.4 MDK調試容易崩潰的解決辦法
5.5 MDK程序調試
5.6 總結
5.1 初學者重要提示
- 如果使用JLINK調試下載STM32F407,可以使用JLINK V8,V9和V10。
- 如果使用STLINK調試下載STM32F407,推薦使用最新的電腦端驅動和對應的固件,詳情見第2章的2.6小節。
- MDK曾發布的STM32F1,F407,F429和F7的所有調試方法的設置細節及其注意事項,同樣適用於STM32H7:http://www.armbbs.cn/forum.php?mod=viewthread&tid=14896 。
- MDK5調試過程中容易崩潰的問題,請看本章5.4小節,比較重要。
- JLINK無法下載解決思路以及常見問題整理,適用於其它LINK:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21708 。
5.2 使用MDK調試和下載程序設置(JLINK)
調試下載STM32F407,可以使用JLINK V8,V9和V10,JLINK的驅動安裝等相關文件已經在本教程第2章的2.5章節有說明。
在上個章節里面,我們已經將Options對話框里面大部分設置選項都做了說明,本章節主要是調試下載的設置。
5.2.1 開發板和JLINK的接線圖
開發板接上JLINK的效果圖如下,JLINK端需要插入開發板贈送的JTAG轉SWD轉接板:
注意轉接板不要插反了:
5.2.2 設置Options里面的Debug選項
Debug選項主要用於調試設置。
打開Settings設置選項,設置完畢后別忘了點擊確定。
5.2.3 設置Options里面的Utilities選項
Utilities選項主要用於程序下載設置。
5.2.4 程序下載
前兩步設置好之后,JLINK插到電腦端並跟開發板連接好,將板子上電,就可以下載了。點擊這里就可以下載了:
下載成功后可以看到開發板上的LED開始閃爍,MDK的也有信息展示:
5.3 使用MDK調試和下載程序設置(STLINK)
調試下載STM32F407,請將STLINK固件升級到最新版,關於固件升級和驅動安裝等相關文件已經在本教程第2章的2.6章節有說明。
在上個章節里面,我們已經將Options對話框里面大部分設置選項都做了說明,本章節主要是調試下載的設置。
5.3.1 開發板和STLINK的接線圖
開發板接上STLINK的效果圖如下:
如果是下面這種STLINK,需要接上轉接板:
5.3.2 設置Options里面的Debug選項
Debug選項主要用於調試設置:
打開Settings設置選項,設置完畢后別忘了點擊確定。
5.3.3 設置Options里面的Utilities選項
Utilities選項主要用於程序下載設置。
5.3.4 程序下載
前兩步設置好之后,STLINK插到電腦端並跟開發板連接好,將板子上電就可以下載了。點擊這里即可:
下載成功后可以看到開發板上的LED開始閃爍,MDK的也有信息展示:
5.4 MDK調試容易崩潰的解決辦法
進入到MDK5.2X后,MDK調試的時候很容易崩潰,出現下面這個錯誤
出現這個錯誤的話,要注意下面兩個問題:
- 如果出現這種情況的話,將工程放在桌面路徑下,工程名不要有中文會好很多。路徑深或者有中文,都會造成這種情況。
- 退出調試的時候,如果使用斷點了,務必清除所有斷點,再退出,否則也會造成這種情況。
針對這個問題,KEIL官方也有說明:http://www.keil.com/support/docs/4036.htm 。
5.5 MDK程序調試
JLINK或者STLINK設置完畢后,調試是一樣的。
5.5.1 全速運行和單步調試
點擊如下按鈕可以進入調試狀態:
進入調試狀態后的效果如下:
首先要認識下這7個圖標的含義:
- 第1個圖標是復位調試。
- 第2個圖標是全速運行。
- 第3個圖標是進入全速運行狀態后,通過這個圖標可以停止全速運行。
- 第4個圖標是Step(Step one line),單步調試,每次點擊運行一行代碼,所以只要有子函數就會進入。
- 第5個圖標是Step Over(Step over the current line),每次點擊以函數為單位運行,不會進入函數內部。
- 第6個圖標是Step out(Step out of the current line),點擊后退出當前運行的函數,執行下一個函數。
- 第7個圖標是Run to Cursor Line(Run to the current cursor line),直接運行到用戶設置的行,設置方法比較簡單,用戶僅需在那行使用鼠標左鍵點擊一下,可以看到前面有個箭頭
然后點擊此圖標即可,可以看到前面多了一個黃色的小箭頭,說明已經運行到此行
前面幾個圖標的功能,大家多測試幾次就熟練了。
5.5.2 外設寄存器的查看
要查看的外設寄存器內容在這個菜單里面:
如果要查看內核外設寄存器,在這里:
5.5.3 全局變量的查看
針對全局變量,MDK專門提供了Watch1和Watch2兩個窗口,每個窗口可以添加很多變量。調試過程中,這些窗口里面添加的變量是會更新的。
也可以從菜單View ->Watch Windows進行添加。比如下面添加一個簡單的全局計數變量。
5.5.4 局部變量的查看
針對局部變量,MDK專門提供了一個棧窗口,用於查看函數中各種局部變量,這個不需要用戶添加,MDK會自動添加。
也可以從菜單View ->Call Stack Window進行添加。局部變量需要進入到那個函數里面才可以查看,這點要特別注意,因為局部變量是來自棧空間的,進入函數申請占空間,退出函數后,棧空間就會被釋放掉。比如main函數里面一個num局部變量:
5.5.5 Flash區或者RAM區的查看
如果要查看Flash區或者RAM區的內容,MDK提供了4個Memory窗口。
也可以從菜單View ->Memory Windows進行添加。比如要查看0x0800 0000地址開始的內容,直接輸入即可,這個地址是STM32F4的Flash首地址:
5.5.6 斷點調試
斷點調試比較重要,進入調整狀態后,如果大家想讓程序在指定的位置停止運行,可以添加斷點,通過這個小紅點來添加。
比如想在84行添加斷點。
用戶僅需在那行使用鼠標左鍵點擊一下,可以看到前面有個箭頭:
然后點擊那個小紅點,可以看到已經添加上:
然后點擊全速運行,如果程序有執行到這個地方,就會停在這里。可以看到黃色小箭頭也顯示在左側了,說明程序執行這個地方了:
正常情況下,斷點可以加到任何程序代碼可以執行到的地方。另外注意,退出調試前,點擊這個按鈕取消所有斷點,防止MDK調試期間崩潰:
5.5.7 寄存器,全局變量和局部變量的動態更新
MDK有個周期性更新選項,如果大家要周期性的觀察一些寄存器、全局變量的更新、需要把菜單View -> Periodic Window Update選上。
這個周期不能設置,大概0.5s左右更新一次。
5.6 總結
對於初學者來說,務必要實際動手操作一遍。特別是調試方法,要熟練掌握,因為以后工程代碼調試時,用到的最多。