嵌入式入门实践——编写简单STM32程序
嵌入式入門——編寫簡單STM32程序
目錄
- 嵌入式入門——編寫簡單STM32程序
- 一、環境配置
- 1、安裝前準備
- 2、安裝流程
- 2.1安裝keil
- 2.2破解keil5
- 2.3安裝STM32pack
- 3、設置keil5
- 三、簡單STM32程序編寫
- 1、新建工程
- 2、添加源文件
- 3、設置仿真器模式
- 4、編譯調試
- 四、分析HEX文件
- 五、總結
- 六、參考鏈接
一、環境配置
什么是MDK:Keil MDK是德國知名軟件公司Keil開發的開發工具。開發者可以用MDK來編寫、編譯和生成基于STM32的可執行程序。本文章主要是學習如何安裝、熟悉MDK并編寫一個簡單的STM32程序。
1、安裝前準備
下載mdk5軟件和stm32包的鏈接:
鏈接:https://pan.baidu.com/s/1b3YMHGOwa2Rsj3tFIuI58g
提取碼:sey1
2、安裝流程
2.1安裝keil
下載壓縮包到隨便一個你自己創建的文件夾,然后解壓至當前文件夾并打開解壓后的文件夾:
安裝keil軟件:
(1)打開mdk_510.exe應用程序文件,點擊next
(2)勾選I agree to…然后點擊next
(3)選擇安裝路徑,然后點擊next
(4)輸入名稱和郵箱(隨便寫即可),點擊next
(5)然后在彈出來的窗口里點擊安裝
(6)點擊finish,確認圖中的Show Release Notes勾上了
(8)上一步點擊finish后會彈出來一個窗口,點擊OK即可,然后軟件會下載各種pack,鼠標會轉圈然后下載失敗。然后我們關閉窗口,接下來就開始手動安裝stm32pack。
2.2破解keil5
破解后可以擁有十年的使用期
(1)在桌面打開剛剛安裝好的keil5,點擊file,再點擊License Management
(2)復制里面CID
(3)再打開剛剛壓縮包里面的keygen復制CID到里面顯示CID的地方,target選擇ARM,然后點擊generate,復制生成的注冊碼
(4)然后打開keil5把生成的注冊碼再復制進第二步截圖里面的new license code然后點擊Add LIC,此時在上面的網格里就可以看到使用日期到了2032年,表明激活成功,在然后點擊CLOSE關閉即可。
2.3安裝STM32pack
(1)打開剛剛解壓縮的文件夾,點擊ARM.CMSIS3.20.4包
(2)然后一直點擊next,最后點擊finish即可
點擊finish
(3)再回到剛剛解壓縮后的文件里面,打開Keil.STM32F1xx_DFP.1.0.4pack
(4)然后點擊next
(5)然后安裝完成后點擊finish即可。到此安裝就完成了。
3、設置keil5
這里設置一下keil5是因為避免輸入中文的時候出現亂碼
(1)首先打開keil5點擊 Edit 找到最下面的configuration,點擊進去
(2)在顯示出來的頁面里面確保Encoding的設置以及Tab size的設置如圖所示:
三、簡單STM32程序編寫
接下來是編譯一個簡單的STM32程序
1、新建工程
(1)打開keil5,點擊project,再點擊new uVision project…創建工程
(2)然后就命名保存即可:
(3)然后可根據情況點擊下圖中的pack,這里我選的是STM32F103FRB包,然后點擊OK保存。
(4)接下來對Manage Run-Time Environment進行設置,設置完成后點擊OK,就可建立工程。
其實這兩個文件剛開始都是存放在KEIL的安裝目錄下,當我們配置Manage Run-Time Environment選項框之后, 軟件就會把選中好的文件從KEIL的安裝目錄復制到我們的工程目錄:ProjectRTEDeviceARMCM3下面。 其中startup_ARMCM3.s是匯編編寫的啟動文件,system_ARMCM3.c是C語言編寫的跟時鐘相關的文件。 更加具體的可直接閱讀這兩個文件的源碼。只要是Cortex-M3內核的單片機,這兩個文件都適用。
到此這個項目的運行環境就建立完成了。
2、添加源文件
(1)點擊OK后點擊Target打開,再右鍵點擊source group1,選擇Add New Item to Group,
(2)然后選擇Asm File (.s)文件,如下圖所示,名字就看你自己怎么命名了,再點擊add。
再把如下的程序粘貼進去:
AREA MYDATA, DATAAREA MYCODE, CODEENTRYEXPORT __main__mainMOV R0, #10MOV R1, #11MOV R2, #12MOV R3, #13;LDR R0, =func01BL func01;LDR R1, =func02BL func02BL func03LDR LR, =func01LDR PC, =func03B .func01MOV R5, #05BX LRfunc02MOV R6, #06BX LRfunc03MOV R7, #07MOV R8, #08 BX LR3、設置仿真器模式
(1)點擊圖中魔法棒,點擊Target選項,檢查芯片型號及晶振頻率與所需是否相投同。
(2)再點擊Debug打開下圖界面,左邊是進行軟件仿真時的設置,右邊是硬件調試時的設置。
設置軟件仿真時的設置:
打開Debug選項選擇操作類型,以及設置DialogDLL等參數,具體操作及作用如下:
(1)勾選Use Simulator設置使用軟件仿真(圖中沒勾記得勾上)。
(2)勾選Run to main()使調試時,程序自動運行到main函數。
(3)Restore Debug Session Setting一般默認即可,該部分為復位調試窗口的組件,勾選后,調試時對應的窗口或狀態恢復默認值。
(4)設置Dialog DLL為DARMSTM.DLL以及設置Parameter為-pSTM32F103ZE(芯片參數按使用的芯片相應修改即可,當然,部分芯片無法仿真),這部分為DLL文件及芯片參數設置區。
Dialog DLL和Parameter不修改的話,后面運行時可能會報錯。
設置硬件調試的設置:
1.打開Debug選項選擇操作調試器
2.設置Dialog DLL為TARMSTM.DLL以及設置Parameter為-pSTM32F103ZE,如上圖所示。
4、編譯調試
首先點擊圖中左邊箭頭處的符號,出現下邊這樣的提示則編譯成功。
再點擊途中右上角的放大鏡就會出現下圖的仿真界面
可以看見寄存器R5,R6,R7,R8的值和程序設置一樣。
四、分析HEX文件
點擊右上角魔法棒,再點擊output勾選create hex file再推出點擊調試就可以生成HEX文件了
然后再此目錄下找到生成的HEX文件(圖中的mk531是我自己的D盤下自己創建的目錄,后面應該都是一樣的):
打開HEX文件如下(可用記事本打開),開始分析:
記錄build生成的 hex文件各段的大小,了解Hex文件格式及其前8個字節內容含義。
:020000040800F2 :100000000006002031010008390100083B0100080A :100010003D0100083F010008410100080000000008 :100020000000000000000000000000004301000884 :1000300045010008000000004701000849010008D0 :100040004B0100084B0100084B0100084B01000860 :100050004B0100084B0100084B0100084B01000850 :100060004B0100084B0100084B0100084B01000840 :100070004B0100084B0100084B0100084B01000830 :100080004B0100084B0100084B0100084B01000820 :100090004B0100084B0100084B0100084B01000810 :1000A0004B0100084B0100084B0100084B01000800 :1000B0004B0100084B0100084B0100084B010008F0 :1000C0004B0100084B0100084B0100084B010008E0 :1000D0004B0100084B0100084B0100084B010008D0 :1000E0004B0100084B0100084B0100084B010008C0 :1000F0004B0100084B0100084B0100084B010008B0 :100100004B0100084B0100084B0100084B0100089F :100110004B0100084B0100084B0100084B0100088F :100120004B0100084B0100084B0100084B0100087F :100130000948804709480047FEE7FEE7FEE7FEE77B :10014000FEE7FEE7FEE7FEE7FEE7FEE704480549B7 :10015000054A064B7047000041020008990200085A :100160000000002000060020000200200002002005 :10017000704770477047000080B500F001F880BDFF :1001800082B041F204000021C4F20200019100910A :1001900050F8041C41F4803140F8041C50F8041C51 :1001A00001F400310091019901310191009919B9CF :1001B0000199B1F5A06FF1D150F8041C890354BF27 :1001C0000021012100910099012936D142F200015C :1001D000C4F202010A6842F010020A600A6822F0C2 :1001E00003020A600A6842F002020A6001680160C4 :1001F00001680160016841F480610160016821F4D7 :100200007C110160016841F4E811016050F8041CA0 :1002100041F0807140F8041C50F8041C8901FBD5A2 :10022000016821F003010160016841F002010160F1 :10023000016801F00C010829FAD102B070470000F2 :1002400080B541F20000C4F202000168002241F0D2 :10025000010101604168CFF6FF0211404160016871 :100260004FF6FF72CFF6F66211400160016821F48B :1002700080210160416821F4FE0141604FF41F01BB :100280008160FFF779FF4EF60850CEF200004FF084 :100290000061016080BD00004FF00A004FF00B01CB :1002A0004FF00C024FF00D0300F009F800F00AF8CF :1002B00000F00BF8DFF81CE0DFF81CF0FEE74FF071 :1002C000050570474FF0060670474FF007074FF0DF :0C02D00008087047BF020008CB020008BD :040000050800029954 :00000001FF分析:
該文件為16進制的一串字符。hex文件的第一排字符稱之為擴展線性地址記錄,也稱為32位地址記錄或HEX386記錄。
在第一行數據020000040800F2中,其實際表達為0x02 0x00 0x00 0x04 0x08 0x00 0xf2。具體含義為:
第一個字節 0x02表示本行數據的長度;
第二、三字節 0x00 0x00表示本行數據的起始地址;
第四字節 0x04表示數據類型,數據類型有:0x00、0x01、0x02、0x03、0x04、0x05
‘00’ Data Rrecord:用來記錄數據,HEX文件的大部分記錄都是數據記錄
‘01’ End of File Record: 用來標識文件結束,放在文件的最后,標識HEX文件的結尾
‘02’ Extended Segment Address Record: 用來標識擴展段地址的記錄
‘03’ Start Segment Address Record:開始段地址記錄
‘04’ Extended Linear Address Record: 用來標識擴展線性地址的記錄
‘05’ Start Linear Address Record:開始線性地址記錄
然后是數據,0x08 0x00
最后一個字節 0xf2為校驗和。
五、總結
本文的目的是為了練習keil的安裝與簡單的STM32程序的編寫,熟悉使用keil的方法、編寫流程、參數調整方法以及對編譯后生成的HEX文件進行簡單分析。
六、參考鏈接
搭建并配置Keil嵌入式開發環境,完成一個基于STM32匯編程序的編寫
HEX文件格式詳解
[野火]uCOS-III內核實現與應用開發實戰指南—基于STM32
總結
以上是生活随笔為你收集整理的嵌入式入门实践——编写简单STM32程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域渗透-委派攻击
- 下一篇: Matlab学习第二部分:矩阵