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