2、【STM32】新建工程模板、ISP串口程序下载、JLINK程序下载与调试(在线和软件)
目錄
前言
一、新建工程
?編輯
二、ISP串口程序下載
三、LINK程序下載與在線調(diào)試
3.1 JTAG/SWD調(diào)試原理簡(jiǎn)析
3.2 硬件連接
3.3 JTAG/SWD模式配置
3.4 程序下載
3.2 在線調(diào)試
前言
該文檔主要講解內(nèi)容有:
一、新建工程
- 建立存放工程的文件夾:包含三部分
- 打開keil軟件(MDK5),點(diǎn)擊新建工程:
- 保存新建工程
找到剛才建立的工程文件種的USER文件,選中并保存:
- 選擇芯片型號(hào)
這里本人使用的信號(hào)型號(hào)為:STM32F407ZGT6,找到點(diǎn)擊ok選擇即可。
如果沒有找到相應(yīng)的芯片請(qǐng)安裝支持包:安裝Keil.STM32F4xx_DFP.1.0.8.pack ?資源鏈接:
keil軟件STM32系列芯片支持包-嵌入式文檔類資源-CSDN下載請(qǐng)按如下順序安裝:1,安裝mdk_514.exe2,安裝Keil.STM32F4xx_DF更多下載資源、學(xué)習(xí)資料請(qǐng)?jiān)L問CSDN下載頻道.https://download.csdn.net/download/ARM_qiao/85498259
- ?添加功能組件
這里會(huì)提示你是否添加功能組件,由于這里是建立工程,先不需要添加直接關(guān)閉即可。
- 建立好的工程目錄
- 啟動(dòng)文件設(shè)置
關(guān)于啟動(dòng)文件詳細(xì)介紹推薦大家看一下鏈接里的介紹,非常細(xì)致極力推薦:
STM32啟動(dòng)文件詳解 | 技術(shù)部落
啟動(dòng)代碼是一段和硬件相關(guān)的匯編代碼,主要作用:1、堆棧(SP)初始化;2、初始化程序計(jì)數(shù)器(PC);3、設(shè)置向量表異常事件的入口地址;4、調(diào)用函數(shù)main函數(shù)。
ST公司對(duì)于STM32F40X和STM32F41X系列統(tǒng)一使用:startup_stm32f40_41xxx.s啟動(dòng)文件。
由于使用STM32F407ZGT6開發(fā)板因此上述啟動(dòng)文件正常使用,但是需要對(duì)啟動(dòng)文件做一下修改,這里將寄存器版本代碼用不到的代碼屏蔽掉,主要是Reset_Handler函數(shù)修改。
Reset_Handler PROCEXPORT Reset_Handler [WEAK];IMPORT SystemInit ;寄存器代碼,不需要在這里調(diào)用 SystemInit 函數(shù), ;故屏蔽掉,庫函數(shù)版本代碼,可以留下;不過需要在外部實(shí)現(xiàn) SystemInit 函數(shù),否則會(huì)報(bào)錯(cuò).IMPORT __mainLDR R0, =0xE000ED88 ;使能浮點(diǎn)運(yùn)算 CP10,CP11LDR R1,[R0]ORR R1,R1,#(0xF << 20)STR R1,[R0];LDR R0, =SystemInit ;寄存器代碼,未用到,屏蔽;BLX R0 ;寄存器代碼,未用到,屏蔽LDR R0, =__mainBX R0ENDP?上述代碼:
1、開啟了STM32F4硬件FPU的代碼,以使能浮點(diǎn)運(yùn)算單元。其中0xE000ED88就是協(xié)處理器控制寄存器(CPACR),該寄存器第20~23位用來控制是否支持浮點(diǎn)運(yùn)算,這里全部設(shè)置為1。
2、由于使用的是寄存器版本的代碼,這里屏蔽了SystemInit函數(shù)。
由于使能了FPU,在MDK里也需要對(duì)FPU進(jìn)行設(shè)置,否則代碼無法運(yùn)行,設(shè)置方式:打開Options for Target,如圖進(jìn)行設(shè)置
由于開發(fā)板上晶振為8MHz所以這里將其改為8?
- ?添加啟動(dòng)文件
將啟動(dòng)文件startup_stm32f40_41xxx.s啟動(dòng)文件拷貝到剛剛新建立的USER文件里面。
- 編譯啟動(dòng)代碼
1、目標(biāo)編譯,只編譯打開的文件;2、全部編譯,編譯整個(gè)工程文件(事件較長(zhǎng))?
?
- 添加系統(tǒng)代碼
?在USER文件種MDK5會(huì)自動(dòng)生成2個(gè)文件,用來存放MDK編譯過程中產(chǎn)生的文件,在正點(diǎn)原子中會(huì)建立OBJ 文件夾單獨(dú)存放,這里我們不對(duì)其進(jìn)行調(diào)整,僅給出調(diào)整方式。
?
將系統(tǒng)代碼(即 SYSTEM 文件夾,該文件夾由 ALIENTEK 提供,可以在光盤任何一個(gè)實(shí)例的工程目錄下找到,不過不要拷貝錯(cuò)了!不要把庫函數(shù)代碼的系統(tǒng)文件夾拷貝到寄存器代碼里面用,反之亦然!這些代碼在任何 STM32F40x/STM32F41x 的芯片上都是通用的,可以用于快速構(gòu)建自己的工程,后面會(huì)有詳細(xì)介紹)?
MDK中添加相關(guān)文件
還需要再USER目錄下添加main函數(shù)文件,test.c文件。
建立完成后雙擊1,可以添加建立的test.c文件。?
?再編寫test.c文件后會(huì)發(fā)現(xiàn)有錯(cuò)誤,這是由于還沒有添加.c的頭文件.h文件
- 添加.h文件
添加完成后重新進(jìn)行代碼編譯,如果代碼編譯出現(xiàn)錯(cuò)誤提示:..\SYSTEM\usart\usart.c(38): error: ?#260-D: explicit type is missing ("int" assumed)?
雙擊打開定位到38行,這里由于形參為int,且沒有返回值,所以添加一個(gè)void即可。
二、ISP串口程序下載
?再使用串口下載之前需要再電腦上安裝串口驅(qū)動(dòng):CH340G,鏈接后任務(wù)管理可進(jìn)行查看。
在安裝好USB串口驅(qū)動(dòng)后,打開串口下載軟件FlyMcu,該軟件是 mcuisp 的升級(jí)版本(flymcu 新增對(duì) STM32F4 的支持),由 ALIENTEK提供部分贊助,mcuisp 作者開發(fā),該軟件可以在 www.mcuisp.com 免費(fèi)下載。
- 串口的一建下載功能
在介紹一建下載之前首先介紹一下STM32的三種啟動(dòng)方式:
[Skill] STM32的啟動(dòng)方式、啟動(dòng)文件、程序下載方式和下載電路——深度解讀(全網(wǎng)最全最詳細(xì))_追逐者-橋的博客-CSDN博客深度解讀啟動(dòng)方式及啟動(dòng)文件https://blog.csdn.net/ARM_qiao/article/details/125049804由于使用傳統(tǒng)串口方式下載需要調(diào)整BOOT[1:0]的狀態(tài),比較繁瑣。所以采用了一鍵下載電路。
一鍵下載電路利用了串口的DTR和RTS信號(hào),分別控制STM32的復(fù)位和B0,配合串口上位機(jī)軟件FlyMcu,設(shè)置:DTR的低電平復(fù)位,RTS高電平進(jìn)入BootLoader,這樣,B0和STM32的復(fù)位,完全可以由下載軟件自動(dòng)控制,從而實(shí)現(xiàn)一鍵下載。
- 設(shè)置在編譯前設(shè)置輸出.hex文件
- 重新編譯后在Objects文件中就會(huì)生成機(jī)器二進(jìn)制代碼文件.hex
- ?在串口助手中添加工程的.hex文件,和設(shè)置窗口下載
- 點(diǎn)擊開始編程
- 打開串口助手發(fā)現(xiàn)移植接受到數(shù)據(jù)
說明程序已經(jīng)下載到板卡內(nèi),且正常運(yùn)行
三、LINK程序下載與在線調(diào)試
3.1 JTAG/SWD調(diào)試原理簡(jiǎn)析
?復(fù)位后JTAG對(duì)應(yīng)的IO引腳默認(rèn)為JTAG模式,有時(shí)候配置相應(yīng)的引腳無法使用GPIO功能,PB3/4
3.2 硬件連接
3.3 JTAG/SWD模式配置
當(dāng)用到PB3/4的GPIO功能是需要對(duì)其模式進(jìn)行重新設(shè)置,在文件stm32f4xx_gpio.c中,void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
默認(rèn)復(fù)位狀態(tài),這些引腳都是JTAG/SWD調(diào)試功能開啟。 如果需要關(guān)閉,只需要相應(yīng)的IO口設(shè)置為相應(yīng)模式。
3.4 程序下載
由于串口只能實(shí)現(xiàn)下載程序功能,而不能實(shí)現(xiàn)跟蹤調(diào)試,而調(diào)試工具,JLINK/ULINK/STLNK等實(shí)現(xiàn)程序的跟蹤。SWD下載調(diào)試僅需要占用兩條IO口
本人使用的是STLINK進(jìn)行在線調(diào)試。
- 調(diào)整Options for Target中的Debug選項(xiàng)卡
上圖中我們還勾選了 Run to main(),該選項(xiàng)選中后,只要點(diǎn)擊仿真就會(huì)直接運(yùn)行到 main 函數(shù),如果沒選擇這個(gè)選項(xiàng),則會(huì)先執(zhí)行 startup_stm32f40_41xxx.s 文件的 Reset_Handler,再跳到main 函數(shù)。
- ?點(diǎn)擊Setting設(shè)置
使用SWD接口方式,右邊已經(jīng)顯示檢查到SWDIO接口
- 下載設(shè)置
- ?代碼程序的下載
重新編譯后直接點(diǎn)擊下載按鈕就可以了
下載完成?
3.2 在線調(diào)試
MCU內(nèi)部已經(jīng)被下入程序,接下來可以點(diǎn)擊(開始/暫停仿真按鈕)進(jìn)行在線仿真。,點(diǎn)擊
后出現(xiàn)仿真界面,其中上面由調(diào)試的工具條:
- 復(fù)位:其功能等同于硬件上按復(fù)位按鈕。相當(dāng)于實(shí)現(xiàn)了一次硬復(fù)位。按下該按鈕之后,代碼會(huì)重新從頭開始執(zhí)行。
- 執(zhí)行到斷點(diǎn)處:該按鈕用來快速執(zhí)行到斷點(diǎn)處,有時(shí)候你并不需要觀看每步是怎么執(zhí)行的,而是想快速的執(zhí)行到程序的某個(gè)地方看結(jié)果,這個(gè)按鈕就可以實(shí)現(xiàn)這樣的功能,前提是你在查看的地方設(shè)置了斷點(diǎn)。
- 停止運(yùn)行:此按鈕在程序一直執(zhí)行的時(shí)候會(huì)變?yōu)橛行?#xff0c;通過按該按鈕,就可以使程序停止下來,進(jìn)入到單步調(diào)試狀態(tài)。
- 執(zhí)行進(jìn)去:該按鈕用來實(shí)現(xiàn)執(zhí)行到某個(gè)函數(shù)里面去的功能,在沒有函數(shù)的情況下,是等同于執(zhí)行過去按鈕的。
- 執(zhí)行過去:在碰到有函數(shù)的地方,通過該按鈕就可以單步執(zhí)行過這個(gè)函數(shù),而不進(jìn)入這個(gè)函數(shù)單步執(zhí)行。
- 執(zhí)行出去:該按鈕是在進(jìn)入了函數(shù)單步調(diào)試的時(shí)候,有時(shí)候你可能不必再執(zhí)行該函數(shù)的剩余部分了,通過該按鈕就直接一步執(zhí)行完函數(shù)余下的部分,并跳出函數(shù),回到函數(shù)被調(diào)用的位置。
- 執(zhí)行到光標(biāo)處:該按鈕可以迅速的使程序運(yùn)行到光標(biāo)處,其實(shí)是挺像執(zhí)行到斷點(diǎn)處按鈕功能,但是兩者是有區(qū)別的,斷點(diǎn)可以有多個(gè),但是光標(biāo)所在處只有一個(gè)。
- 匯編窗口:通過該按鈕,就可以查看匯編代碼,這對(duì)分析程序很有用。
- 堆棧局部變量窗口:通過該按鈕,顯示 Call Stack+Locals 窗口,顯示當(dāng)前函數(shù)的局部變量及其值,方便查看。
- 觀察窗口:MDK5 提供 2 個(gè)觀察窗口(下拉選擇),該按鈕按下,會(huì)彈出一個(gè)顯示變量的窗口,輸入你所想要觀察的變量/表達(dá)式,即可查看其值,是很常用的一個(gè)調(diào)試窗口。
- 內(nèi)存查看窗口:MDK5 提供 4 個(gè)內(nèi)存查看窗口(下拉選擇),該按鈕按下,會(huì)彈出一個(gè)內(nèi)存查看窗口,可以在里面輸入你要查看的內(nèi)存地址,然后觀察這一片內(nèi)存的變化情況。是很常用的一個(gè)調(diào)試窗口
- 串口打印窗口:MDK5 提供 4 個(gè)串口打印窗口(下拉選擇),該按鈕按下,會(huì)彈出一個(gè)類似串口調(diào)試助手界面的窗口,用來顯示從串口打印出來的內(nèi)容。
- 邏輯分析窗口:該圖標(biāo)下面有 3 個(gè)選項(xiàng)(下拉選擇),我們一般用第一個(gè),也就是邏輯分析窗口(Logic Analyzer),點(diǎn)擊即可調(diào)出該窗口,通過 SETUP 按鈕新建一些 IO 口,就可以觀察這些 IO 口的電平變化情況,以多種形式顯示出來,比較直觀。
- 系統(tǒng)查看窗口:該按鈕可以提供各種外設(shè)寄存器的查看窗口(通過下拉選擇),選擇對(duì)應(yīng)外設(shè),即可調(diào)出該外設(shè)的相關(guān)寄存器表,并顯示這些寄存器的值,方便查看設(shè)置的是否正確。
- ?這里先點(diǎn)擊復(fù)位按鈕,然后打一個(gè)斷點(diǎn),且點(diǎn)擊將程序執(zhí)行到該斷點(diǎn)處。就會(huì)發(fā)現(xiàn)相關(guān)的區(qū)域就會(huì)出現(xiàn)相應(yīng)的變化。
?該文檔到這里就結(jié)束了主要講了如何建立工程、下載程序和程序的在線調(diào)試
總結(jié)
以上是生活随笔為你收集整理的2、【STM32】新建工程模板、ISP串口程序下载、JLINK程序下载与调试(在线和软件)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [react] 受控组件和非受控组件有什
- 下一篇: [react] 在React中组件的pr