STM32全部教程 :【STM32】標(biāo)準(zhǔn)庫與HAL庫對照學(xué)習(xí)系列教程大全
一、前言
本章內(nèi)容是使用庫函數(shù)開發(fā)STM32的前提,以STM32F103zet6為例,本章分標(biāo)準(zhǔn)庫配置和cubemx配置HAL庫兩部分,可以在目錄中選擇自己想要看的部分,點(diǎn)擊跳轉(zhuǎn)就行了。
二、標(biāo)準(zhǔn)庫函數(shù)模板創(chuàng)建
標(biāo)準(zhǔn)庫函數(shù)建立所需要的文件我放在了網(wǎng)盤鏈接里,可以自行下載。 網(wǎng)盤鏈接:https://pan.baidu.com/s/1bYdnK9j6b8ze4wAFs0FRd 密碼:6muu
1、新建模板文件
(1) 新建一個(gè)文件夾,命名為“標(biāo)準(zhǔn)庫函數(shù)模板文件” 。  (2)在新建文件夾下, 在新建三個(gè)文件夾,命名為:“Obj 文件夾”、“User 文 件 夾”、“Libraries 文件夾”。 
- Libraries 文件夾:用于存放CMSIS標(biāo)準(zhǔn)和STM32外設(shè)驅(qū)動(dòng)文件。
- Obj 文件夾:用于存放keil編譯產(chǎn)生的 c/匯編/鏈接的列表清單、調(diào)試信息、 hex 文件、預(yù)覽信息、封裝庫等文件。
- User 文 件 夾: 用 于 存 放用 戶 編 寫的 main.c 、stm32f10x.h 頭 文 件、 stm32f10x_conf.h配置文件、stm32f10x_it.c和stm32f10x_it.h中斷函數(shù)文件。
(3)在Libraries 文件夾下新建兩個(gè)文件命名為:CMSIS、STM32F10x_StdPeriph_Driver。 
- CMSIS文件夾:用于存放 一 些CMSIS標(biāo)準(zhǔn)文件和啟動(dòng)文件 。
- STM32F10x_StdPeriph_Driver文件夾:用于存放STM32 外設(shè)驅(qū)動(dòng)文件。
(4)在CMSIS文件夾下放置以下文件:

文件在我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Libraries\CMSIS\CM3\CoreSupport 路徑下

文件在我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm路徑下

文件在我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路徑下
匯總圖  (5)在STM32F10x_StdPeriph_Driver文件夾下放置以下文件:

兩文件直接從我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Libraries\STM32F10x_StdPeriph_Driver路徑下復(fù)制
inc文件夾里有:  src文件夾下有:  可以知道兩文件夾下放的是各類外設(shè)的驅(qū)動(dòng)文件。
(6)在User文件夾下放置以下文件:

文件在我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Project\STM32F10x_StdPeriph_Template路徑下

文件在我給的網(wǎng)盤鏈接文件:STM32最新固件庫v3.5\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x路徑下
匯總圖  到此文件建立完畢。
2、新建工程添加文件
(1)打開keil5軟件新建工程  (2)工程名根據(jù)喜好命名,但是要注意使用英文,如果使用中文名可能會(huì)出現(xiàn)一些奇怪的錯(cuò)誤,這里我們命名為 Template,文件點(diǎn)擊保存在最開始創(chuàng)建的 “標(biāo)準(zhǔn)庫函數(shù)模板文件”的文件夾下。  (3)選擇芯片類型,這里我們選擇STM32F103ZE,點(diǎn)擊OK。  (4)隨后點(diǎn)擊Cancel  (5)根據(jù)文件類型創(chuàng)建目錄,點(diǎn)擊OK 
- 這樣做為了工程目錄更加清晰及方便文件查找,新建User、Startup、StdPeriph_Driver和CMSIS工程組。
- User組用于存放User文件夾下的源文件,Startup組用于存放STM32的啟動(dòng)文件,StdPeriph_Driver組用于存放STM32外設(shè)的驅(qū)動(dòng)源文件,CMSIS組用于存放CMSIS標(biāo)準(zhǔn)文件。
(6)添加文件到目錄下

- 我們發(fā)現(xiàn)這里我們只創(chuàng)建了User、Obj、Libraries文件夾,卻多出了另外2個(gè)文件夾Objects和Listings,這是因?yàn)槭褂肒EIL5創(chuàng)建工程時(shí)默認(rèn)會(huì)產(chǎn)生這兩個(gè)文件夾用于存放程序編譯后的列表文件及HEX等文件,這里我們將這兩個(gè)文件夾刪除。
- 文件類型我們需要選擇為“All files(.)”,這樣我們才看到所有類型的文件
所有文件添加到對應(yīng)目錄下后,如圖所示:  (7)雙擊main.c文件,刪除里面所有內(nèi)容后,修改為: 
3、配置魔術(shù)棒
(1)打開魔術(shù)棒,點(diǎn)擊Target,勾選微庫“UseMicroLib”。主要是為了后面printf重定向輸出使用,不然會(huì)出現(xiàn)各種奇怪的現(xiàn)象。配置如下:  (2)點(diǎn)擊Output,點(diǎn)擊Select Folder for Objects 把輸出文件夾定位到我們工程目錄下的Obj文件夾下,勾選CreateHEXFile,使編譯的過程中生成hex文件配置如下:  (3)點(diǎn)擊Listing,點(diǎn)擊Select Folder for Objects ,把輸出文件夾定位到我們工程目錄下的Obj文件夾下,配置如圖:  (4)C/C++配置(重點(diǎn))
- 點(diǎn)擊C/C++因?yàn)閯?chuàng)建的是標(biāo)準(zhǔn)庫函數(shù)模板,所以需要在對處理器類型和庫進(jìn)行宏定義,在Define這里復(fù)制這兩個(gè)宏:USE_STDPERIPH_DRIVER,STM32F10X_HD,如圖所示:

- 點(diǎn)擊Include Paths設(shè)置文件路徑

配置好的路徑如下  (5)配置Debug,我用的是普中官方給的串口下載軟件,不用配置Debug,但還是給大家講一下。
- 當(dāng)你的仿真器安裝好驅(qū)動(dòng)并且連接了電腦和板子,那么就可以開始配置了。具體的配置如下:

- 點(diǎn)擊Settings,選擇Port,選擇“SW”。配置如下:
 SW與JTAG是仿真方式,建議大家使用SW模式,如果使用JTAG模式的話,后面有些例程是占用了一部分管腳的,這個(gè)在cubemx中有配置如: 
- 點(diǎn)擊Flash Download,勾選Reset and Run。配置如圖:
 Reset and Run選項(xiàng)中,如果勾上的話,當(dāng)程序下載進(jìn)去后自動(dòng)復(fù)位運(yùn)行,如果不勾上,程序下載進(jìn)去后需按下開發(fā)板上復(fù)位鍵才能運(yùn)行。通常我們選擇勾上。
4、編譯運(yùn)行
點(diǎn)擊編譯 
可以從左下角看出,是0錯(cuò)誤,0警告。
圖標(biāo)1中
- 第一個(gè)編譯是對單個(gè)文件編譯。
- 第二個(gè)編譯是對工程中修改過的文件進(jìn)行編譯。
- 第三個(gè)編譯是對工程中所有文件進(jìn)行編譯。
通常我們使用的是中間那個(gè)編譯,效率比較高。
到這里整個(gè)標(biāo)準(zhǔn)庫模板創(chuàng)建結(jié)束。
三、使用cubemx創(chuàng)建HAL庫函數(shù)模板
1、cubemx功能介紹
cubemx主界面  (1)已建立的工程 Open Existing Projects:打開項(xiàng)目工程。 (2)新建工程
- Start My project from MCU:從MCU開始新建項(xiàng)目。(經(jīng)常用)
- Start My project from STBoard:從ST開發(fā)板開始新建項(xiàng)目。
- project from Cross Selector:從交叉選擇器啟動(dòng)我的項(xiàng)目。
(3)軟件包管理 - CHECK FOR UPDATE:檢查更新軟件和軟件包。
- INSTALL/REMOVE:安裝或移除軟件包。
(4)關(guān)于STM32和外部工具 - About STM32:STM32芯片與以及相關(guān)圖標(biāo)。
- External Tools:相關(guān)ST公司推出的工具。
(5)相關(guān)網(wǎng)站 包括ST官網(wǎng)、YOUTube網(wǎng)等。 (6)菜單欄
File 
- New Project:新建工程(Ctrl + N)
- Load Project:導(dǎo)入工程(Ctrl + L)
- Import Project:引入項(xiàng)目(Ctrl + I)
- Save Project:保存工程(Ctrl + S)
- Save Project As:另存工程(Ctrl + A)
- Close Project:關(guān)閉工程(Ctrl + C)
- Generate Report:生成報(bào)告(Ctrl + R)
- Recent Projects:最近工程
- Exit:退出軟件(Ctrl + X)

- Outputs:輸出信息
- Font size :設(shè)置字體大小,設(shè)置完成之后需要重新啟動(dòng)
- Help
 - Help:幫助(F1)STM32CubeMX的用戶手冊。
- About:關(guān)于(Alt + A)STM32CubeMX的版本信息。
- Docs & Resources:文檔和資源(Alt + D)。
- Refresh Data:更新數(shù)據(jù)(Alt + R) 更新MCU/BOARD數(shù)據(jù),HAL庫版本信息。
- User Preferences:用戶設(shè)定,是否允許ST公司獲取你的使用數(shù)據(jù)。
- Check for Updates:檢測更新(Alt + C)。
- Manage embedded…:軟件包管理(Alt + U)。
- Updater Settings:更新設(shè)置(Alt + S)。
 
2、cubemx配置生成文件
(1)點(diǎn)擊ACCESS TO MCU SELECYOR,搜索要配置的芯片,雙擊確認(rèn)。


頁面功能如下: 
(2)點(diǎn)擊System Core,點(diǎn)擊RCC,選擇外部高速時(shí)鐘HSE。  (3)點(diǎn)擊SYS,點(diǎn)擊Debug選項(xiàng),選擇SW調(diào)試(用到引腳要少一些,上面講過)。  (4)點(diǎn)擊Clock Configuration進(jìn)行時(shí)鐘樹配置。  有關(guān)時(shí)鐘樹不懂的,可以看:【STM32】STM32標(biāo)準(zhǔn)庫與HAL庫對照學(xué)習(xí)教程特別篇–系統(tǒng)時(shí)鐘RCC詳講 (5)點(diǎn)擊Project Manager,選擇配置。

這里有問題,文件路徑不要有中文,要不然要報(bào)錯(cuò)。
點(diǎn)擊Code Generator,選擇配置 
(6)點(diǎn)擊GENERATE CODE,生成工程,點(diǎn)擊close。

3、寫程序的要求
(1)找到生成的文件,點(diǎn)擊MDK-ARM文件,打開工程。



(2)打開main.c  (2)書寫代碼區(qū)。  對于沒有強(qiáng)迫癥的盆友,其實(shí)不用按什么區(qū)來寫代碼,只要代碼寫在BNEGIN與END之間,使用cubemx重新生成工程時(shí),自己寫的代碼都不會(huì)被刪除,分區(qū)只是為了方便自己找到對應(yīng)代碼區(qū)。 到這里使用cubemx生成HAL庫模板工程就完成啦。
四、兩文件對比
(1)文件結(jié)構(gòu)對比。
標(biāo)準(zhǔn)庫 
HAL庫 
- 外設(shè)與核心驅(qū)動(dòng)文件,標(biāo)準(zhǔn)庫是在Libraries文件內(nèi),HAL庫是在Drivers文件內(nèi)。
- 用戶使用文件,標(biāo)準(zhǔn)庫是在User文件內(nèi),HAL庫是在Core文件內(nèi)。
- hex生成位置,標(biāo)準(zhǔn)庫是在Obj文件內(nèi),HAL庫是在MDK-ARM內(nèi)的命名文件內(nèi)。
(2)程序書寫規(guī)則對比 - 標(biāo)準(zhǔn)庫模板工程·中,可以在C語法使用正確的情況下,按自己的風(fēng)格寫。
- cubemx生成的工程中,需要在對應(yīng)區(qū)域內(nèi)寫代碼,否則重新使用cubemx生成工程時(shí),會(huì)將自己寫的程序刪除。
(3)編譯速度 - 標(biāo)準(zhǔn)庫模板工程編譯速度較快,可以根據(jù)需要添加對應(yīng)的外設(shè)驅(qū)動(dòng)文件。
- cubemx生成的工程編譯較慢,因?yàn)槠浒怂械耐庠O(shè)驅(qū)動(dòng)文件,程序編譯時(shí)要將這些文件都編譯一下。
到這里庫函數(shù)模板創(chuàng)建就介紹完了,重要的還是自己要多多練習(xí),自己去發(fā)現(xiàn)問題,解決問題才行。 
|