目錄
- 1、獲取 KEIL5 安裝包
- 2、開始安裝 KEIL5
- 2.1、 激活
- 2.2、安裝`DFP`庫
- 3、工程創建
- 4、搭建框架
- 5、開始編寫代碼
1、獲取 KEIL5 安裝包
要想獲得 KEIL5 的安裝包,在百度里面搜索“KEIL5 下載”即可找到很多網友提供的下載文件,或者到 KEIL 的官網下載:下載官網,一大堆注冊非常麻煩。建議使用最新或者靠近最新版本都可以。
2、開始安裝 KEIL5
選擇安裝路徑,路徑不能帶中文,next
提示
: Pack 目錄下后續可能會安裝以后會用到的各種芯片的芯片包容易占空間,建議 C 盤剩余空間不多的用戶可以直接在框中編輯改路徑,把 C 改為 D(或其他盤,直接改第一個字符就行,注意不要刪錯后面符號)
安裝ok即可
無需等待, 直接關閉整個軟件
2.1、 激活
-
右鍵已經安裝好的
Keil MDK
圖標, 選擇以管理員方式打開
-
點開
File
菜單欄, 選擇License Management
, 在打開的窗口中復制右上角的Computer ID
值, 比如CA2RX-GUTUC
-
右鍵
安裝軟件\Keil_MDK_ARM_5.35\keygen\keygen.exe
, 選擇以管理員方式打開, 這是Keil MDK
的盜版激活器 -
將之前復制的CID值拷貝到激活器
CID
輸入框,Target
選擇ARM
, 點擊Generate
按鈕, 會生成一長串激活碼 -
復制激活碼, 填回到
Keil MDK
界面的New License ID Code(LIC)
中, 隨后點擊Add Lic
-
顯示如下
LIC Added Sucessfully
說明激活成功
2.2、安裝DFP
庫
- 安裝
安裝軟件\Keil.STM32F1xx_DFP.2.4.1.pack
- 官網鏈接
3、工程創建
-
在
D:\workspace-stm32
某個硬盤路徑中創建第一個工程的文件結構, 只需要創建前四個文件夾, 其他工程相關文件和文件夾稍后由Keil創建└─prj1_demo├─app(我們的應用層代碼)├─driver(我們自行編寫或其他人編寫的第三方驅動)├─library(ARM和ST提供的官方庫)├─doc(文檔類)└─keil(存放keil工程文件)
-
拷貝標準庫的文件到我們的工程文件中
- 拷貝標準庫
Libraries
下的CMSIS
和STM32F10x_StdPeriph_Driver
兩個文件夾到工程的library
中 - 拷貝標準庫
Project\STM32F10x_StdPeriph_Examples\GPIO\IOToggle
下的main.c
stm32f10x_conf.h
stm32f10x_it.c
stm32f10x_it.h
四個文件到工程的app
中(不要拷貝system_stm32f10x.c
)
對比c語言階段的學習:
app相當于我們編寫的代碼, 通常統一以
main.c
的文件作為入口lib相當于標準庫或者qt庫, 早期嵌入式習慣將一個工程相關的庫都放在工程內, 之后的則使用共享庫(不要改), 其中
cmsis
是內核相關的操作庫, 其他則是廠家的庫prj相當于
makefile
,xxx.pro
等項目相關文件, keil/iar等都有自己對應的工程文件, keil的名叫<項目名>.uvprjx
drivers相當于
libmsc.so
等放置的位置doc一般放置自述文件
readme.txt/readme.md
和項目標準庫的開發方式更像是移植, 而不是創建
- 拷貝標準庫
4、搭建框架
-
Keil
創建新工程, 工程文件保存在keil
文件夾路徑下, 命名stm32prj
通常情況下, 工程名應該與整個工程文件夾的名字一樣, 也就是
prj1_demo
考慮到之后的工程都是從這個工程直接復制, 因此使用一個更通用的工程名
-
選擇設備型號
f103ve
-
不添加任何庫(不勾選任何選項, 并確定)
我們使用keil僅僅為了幫我們管理工程, 以及使用keil的工具鏈來編譯/下載/調試
-
project
-manage
-project items
中,Groups
按如下分組和添加文件(工程中的group
不能有二級組, 所以lib
部分需要拆分成三部分)Groups組名 說明 添加的文件 app
用戶代碼 apps/main.c
apps/stm32f10x_it.c
driver
第三方驅動 [留空] cmsis
內核庫 libraries/CMSIS/CM3/DeviceSupport/STM32F10x/system_stm32f10x.c
stdLib
標準庫 libraries/STM32F10x_StdPeriph_Driver/src/xxx.c
startup
啟動文件 libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/arm/startup_stm32f10x_hd.s
-
main()
函數是C語言部分代碼的入庫
, 在進入c代碼之前, 芯片需要先執行startup
啟動文件才能啟動, 隨后才進入c語言部分, 并且這個啟動文件使用的是匯編語言 -
選擇
startup_stm32f10x_hd.s
這個文件,因為hd
代表 High Density(高密度),用于區分 STM32F10x 系列不同的 Flash 和 RAM 規格。
分類 后綴 Flash 容量 典型芯片 低密度(Low Density) ld
16KB ~ 32KB STM32F101C4, STM32F103C6 中密度(Medium Density) md
64KB ~ 128KB STM32F103RB, STM32F101R8 高密度(High Density) hd
256KB ~ 512KB STM32F103RE, STM32F103ZC 超高密度(XL Density) xl
512KB ~ 1MB STM32F103ZG, STM32F103VH - 標準庫選擇了全部文件, 實際上如果使用了什么外設, 就只需要包含對應文件即可, 提高編譯速度
-
-
打開
Options for Target
, 對這個項目進行一些額外配置-
Target
中設置ARM Compiler
為Use default compiler version 5
此處為設置
編譯器
, 可選GCC
或ARMCC
, 新版keil
默認為ARMCC v6
, 標準庫是按照ARMCC v5
編寫的
-
Output
中勾選Create HEX File
keil默認生成
axf
文件, 而大多數編程器都使用hex
格式的文件進行燒錄這些文件其實就是最終生成的二進制文件
-
C/C++
中設置Define
-
STM32F10X_HD USE_STDPERIPH_DRIVER
注意這里是兩個詞, 中間用空格隔開, 相當于全局增加了兩句話:
#define STM32F10X_HD #define USE_STDPERIPH_DRIVER
-
-
C/C++
中設置Include Paths
(使用右邊的...
按鈕, 選擇文件夾, keil會自動識別為相對路徑)..\app
..\driver
..\library\CMSIS\CM3\CoreSupport
..\library\CMSIS\CM3\DeviceSupport\ST\STM32F10x
..\library\STM32F10x_StdPeriph_Driver\inc
-
Debug
中選擇右邊的Use
為CMSIS-DAP Debugger
教程使用的開發板是
野火F103
, 配套仿真器為CMSIS-DAP
標準的仿真器, 所以選擇此項 -
再點開
Settings
-
Debug
標簽頁的Max Clock
設置為5MHz
-
Flash Download
標簽頁勾選Reset and Run
- 調低燒錄速度更穩定
- keil默認燒錄完畢后系統不會自動開始運行, 需要手動按一下開發板上的
reset
按鍵, 而勾選此Reset and Run
選項, 燒錄完立刻運行, 不用手動重啟
-
-
-
edit-configuration-Editor
中設置Encoding
為第二個選項(utf-8)Keil默認使用ANSI編碼 不支持中文
改為更通用的UTF-8編碼
5、開始編寫代碼
注意代碼需要以空行結尾
-
編譯, 使用到的編譯選項為:
Traslate(ctrl+F7)
, 相當于gcc -c xxx.c
, 編譯當前打開的一個文件為xxx.o
文件Build(F7)
, 相當于make
, 編譯整個工程, 只會編譯有變動的文件Rebuild
, 相當于make clean && make
, 完全重新編譯整個工程