Table of Contents
前言
這一篇博客主要講解STM32F1開發板如何進行調試,分別是硬件調試(STLINK)調試和軟件調試。
調試原理
STM32的調試原理核心是比較複雜的,但是我們瞭解的東西可以簡單一些。首先STM32支持JTAG和SWJ調試,其中JTAG需要五個接口,SWJ僅需要兩個接口,所以在之後的大部分調試我們優先選擇SWJ進行調試,如下圖是STM32中文參考手冊的M3調試框圖。藍框爲JTAG調試,紅框爲SWJ調試端口。
如下圖所示,SWJ調試只需要PA13和PA14兩個引腳即可實現調試功能。
所以在一般情況下使JTAG-DP接口禁止,SW-DP接口允許
而如何實現使JTAG-DP接口禁止,SW-DP接口允許,需要用上一個GPIO的函數
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
FunctionalState NewState設置爲ENABLE,由下面代碼可知GPIO_Remap設置爲 GPIO_Remap_SWJ_JTAGDisable。
#define GPIO_Remap_SWJ_JTAGDisable ((uint32_t)0x00300200) /*!< JTAG-DP Disabled and SW-DP Enabled */
軟件調試
首先按如圖設置Debug選項卡。
接下來,我們點擊開始/停止仿真按鈕,開始仿真,出現如圖所示的界面。
對於Debug工具條無論網上還是書上都有很很詳細的講解,這個地方我就只貼一張圖。比較重要的是邏輯分析窗口(電平高低),觀察窗口(觀察變量的值和C語言的觀察窗口一樣)和串口打印窗口。
調試的功能鍵和C語言調試基本相同。如果要查看某個變量的值只需選中加入到watch窗口即可
串口邏輯同理,串口輸出信息如下圖所示:
對跑馬燈可以進行邏輯分析,邏輯分析是隻有軟件調試纔有的功能,首先打開邏輯分析儀,打開之後如下圖所示。
接下來添加要分析的端口,比如我們要分析PE5和PB5,只需在右上角點擊添加輸入PORTB.5和PORTE.5即可,Type調整爲Bit,顏色自定。
然後設置一個斷點,即可開始分析,Zoom用來設置座標軸的單位,將鼠標移至圖中還可以得到分析的相應信息。
除此之外,在工具欄中的Peripherals中還可以看到更多的關於寄存器的信息,比如ODR寄存器用來設置高低電平的,就可以看到ODR寄存器每一位的狀態。
硬件調試
首先是要進行設置,我這裏可能說的不全面,詳細的設置方法參考《STM32F1開發指南-庫函數版本》3.4小節和6.4小節。
首先在Debug板塊中進行如下設置,然後再進入Utilities將紅框勾選。
之後回到Debug,再ST-LINK旁邊點擊Setting,進入Flash Download,注意藍框中的芯片要對應是連接的芯片,紅框如圖設置。
之後要用ST-LINK連接開發板和電腦進行下一步設置。PORK選擇SW,其他的根據需要修改,然後開始連接開發板開始調試即可,點擊。
先編譯下載,再調試。
之後可以打開串口調試助手,一直讓程序run下去,然後串口調試助手就可以看到一直在打印t的值,調試程序見後文。
值得注意的是,串口的選擇不要選錯COM口了,否則會看不到結果,還要要記得點開啓串口。
調試程序
main.c
#include "sys.h"
#include "delay.h"
#include "usart.h"
int main(void)
{
u8 t=0;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組爲組2:2位搶佔優先級,2位響應優先級
delay_init(); //延時函數初始化
uart_init(115200); //串口初始化爲115200
while(1)
{
printf("t:%d\r\n",t);
delay_ms(500);
t++;
}
}
參考資料
《STM32F1開發指南-庫函數版本》3.4小節和6.4小節
《STM32中文參考手冊V10》29章