1.構(gòu)建STM32F10x Hal庫工程的開發(fā)環(huán)境詳解
1.1?認(rèn)識硬件環(huán)境
1.1.1?ARM簡介
·ARM既指ARM公司,也指ARM處理器內(nèi)核。
·ARM公司是全球領(lǐng)先的半導(dǎo)體知識產(chǎn)權(quán)(IP)提供商,全世界超過95%的智能手機(jī)和平板電腦都采用ARM架構(gòu)。
·ARM公司設(shè)計(jì)ARM內(nèi)核,半導(dǎo)體廠商完善內(nèi)核周邊電路并生產(chǎn)芯片。
1.1.2?STM32簡介
·STM32是ST公司基于ARM Cortex-M內(nèi)核開發(fā)的32位微控制器。
·STM32常應(yīng)用在嵌入式領(lǐng)域,如智能車、無人機(jī)、機(jī)器人、無線通信、物聯(lián)網(wǎng)、工業(yè)控制、娛樂電子產(chǎn)品等。
·STM32功能強(qiáng)大、性能優(yōu)異、片上資源豐富、功耗低,是一款經(jīng)典的嵌入式微控制器。
1.2?軟件開發(fā)環(huán)境準(zhǔn)備
基于HAL庫的開發(fā)需要在Keil MDK與STM32Cube MX上進(jìn)行。


?
1.2.1?Keil?MDK安裝
第一步:下載Keil?MDK。
打開Keil?MDK官方網(wǎng)站(https://www2.keil.com/mdk5)根據(jù)網(wǎng)站上的指引下載MDK安裝的exe文件,在正式下載之前需要根據(jù)網(wǎng)站提示注冊用戶并填寫必要的信息。
第二步:安裝Keil?MDK?5。
以管理員身份運(yùn)行上一步下載的MDK安裝程序,勾選同意用戶協(xié)議(如下圖)。

?
然后,選擇Keil5的安裝路徑并填寫用戶信息。

?

?
隨后進(jìn)入Keil5安裝進(jìn)度條顯示界面,等待安裝完成點(diǎn)擊“Finish”按鈕,此后會自動彈出在線安裝支持包的界面,因?yàn)槲覀儠罄m(xù)手動配置,所以直接關(guān)閉即可。
1.2.2?安裝STM32Cube MX
安裝STM32CubeMX必須具備的條件
(1)JRE(Java Runtime Environment):JAVA運(yùn)行環(huán)境。
(2)STM32CubeMX軟件:生成初始化代碼的地方。
(3)HAL庫 PACK包:F0、F1、F3、H7等Cortex內(nèi)核,都需要對應(yīng)的PACK包安裝。
第一步:安裝JAVA JRE
64位JRE官網(wǎng)下載鏈接: (https://www.java.com/en/download/manual.jsp)
(1)勾選“更改目標(biāo)文件夾”,點(diǎn)擊“安裝”。

?
(2)點(diǎn)擊“更改(C)...”修改目標(biāo)路徑地址(也可以不用修改)。
?

?(3)等待安裝完成(20s左右的時間),關(guān)閉界面。

?
?
第二步:安裝STM32CubeMX
(1)官網(wǎng)下載安裝包:www.st.com/stm32cubemx,選擇“Get Software”。

?
?(2)選擇對應(yīng)的STM32CubeMX版本信息,本用例使用STM32CubeMX-5.3.0版本實(shí)測。
備注:不想在官網(wǎng)下可以在百度云盤下載如下提供STM32CubeMX(V6.1.1)云盤下載地址:
百度網(wǎng)盤鏈接:?https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj?
提取碼:jauj
(3)打開STM32CubeMX-5.3.0安裝包,點(diǎn)擊“Next”。

?
?(4)同意協(xié)議“I accept the terms of this license agreement.”,點(diǎn)擊“Next”。

?
?(5) 勾選第一個即可,第二個選項(xiàng)是是否同意ST公司收集你的個人使用信息等。

?
(6)選擇要安裝的目錄,點(diǎn)擊“Next”。

?
(7)彈窗 Warning,點(diǎn)Yes即可。
備注:這句話意思是安裝本軟件可能會與文件夾之前文件沖突,導(dǎo)致文件夾之前文件丟失是否繼續(xù) ?點(diǎn)Yes繼續(xù)即可。

?
(8) 默認(rèn)設(shè)置,點(diǎn)擊“Next”即可。

?
?(9)等待安裝完成,點(diǎn)擊“Next”。

?
(10)安裝完成后,點(diǎn)擊Done,即可完成安裝。

?
1.2.3?安裝STM32 HAL庫
STM32 HAL固件庫是Hardware Abstraction Layer的縮寫,中文名稱是:硬件抽象層。HAL庫是ST公司為STM32的MCU最新推出的抽象層嵌入式軟件,為更方便的實(shí)現(xiàn)跨STM32產(chǎn)品的最大可移植性。HAL庫的推出,可以說ST也慢慢的拋棄了原來的標(biāo)準(zhǔn)固件庫,這也使得很多老用戶不滿。但是HAL庫推出的同時,也加入了很多第三方的中間件,有RTOS,USB,TCP / IP和圖形等等。
和標(biāo)準(zhǔn)庫對比起來,STM32的HAL庫更加的抽象,ST最終的目的是要實(shí)現(xiàn)在STM32系列MCU之間無縫移植,甚至在其他MCU也能實(shí)現(xiàn)快速移植。
并且從16年開始,ST公司就逐漸停止了對標(biāo)準(zhǔn)固件庫的更新,轉(zhuǎn)而傾向于HAL固件庫和 Low-layer底層庫的更新,停止標(biāo)準(zhǔn)庫更新,也就表示了以后使用STM32CubeMX配置HAL/LL庫是主流配置環(huán)境;
HAL庫,有在線安裝、離線安裝兩種方式。這里實(shí)測在線安裝方式(離線安裝方式請自行l(wèi)ookup)。
(1)打開STM32CubeMX 軟件,點(diǎn)擊右上角“Help”,選擇“Manage ?embedded ?saftware packages”

?
(2)如下所示的選擇型界面,勾選所需的HAL庫,本教程開發(fā)的STM32F103C8t開發(fā)板作為演示,選擇的則為STM32F1 —>STM32Cube MCU Package for STM32F1 Series 1.8.5版本。

?
?(3)安裝完畢后,點(diǎn)擊右下角的Close即可。
1.2.4?St-Link?V2使用
使用St-Link?V2之前需要安裝驅(qū)動,不然電腦無法操作單片機(jī)。驅(qū)動安裝方法參考文章:http://t.csdn.cn/HnLK8
安裝好驅(qū)動后需要用杜邦線按照以下規(guī)定來連接。
st-link與stm32板相連,需要遵照:
1)?SWDIO與TMS引腳相連
2)?GND與GND腳相連
3)?SWCLK與TCK引腳相連
4)?3.3V VCC與板子上的3.3V引腳相連

?
1.3?構(gòu)建模板工程的詳細(xì)步驟
本小節(jié)以一個簡單的工程(以點(diǎn)亮一個LED燈為例)介紹Stm32F103C8T6的Hal庫工程開發(fā)模板。
1.3.1?STM32CubeMX新建工程
在STM32CubeMX中工程初步建立(新建工程選擇芯片型號)。
?


?
1.3.2?時鐘模塊配置
(設(shè)置HSE,LSE,MCO)。
HSE與LSE勾選晶振。
?

1.3.3?時鐘系統(tǒng)配置
(PLL,SYSCLK,AHB,APB1,APB2)。
由于STM32F10的外部晶振是8Mhz所以這里寫8。
?

進(jìn)入鎖相環(huán)時候選擇器選擇外部晶振并且由于該芯片的時鐘主頻是72Mhz要給PLLMul乘9。
?

系統(tǒng)時鐘選擇的時候選擇來自外部晶振的時鐘。
?

由于此刻時鐘頻率超過官方限制所以這里會爆紅。
?

所以要在APB1 Prescaler這里分頻,即可得到完整的系統(tǒng)時鐘配置。
?

1.3.4?GPIO引腳配置
(以連接LED燈的IO為例介紹如何配置)
本次 工程設(shè)計(jì)是要讓引腳為PC13的LED亮起來所以需要在芯片上找到引腳PC13然后控制GPIO口PC13為輸出(設(shè)置完成后PC13應(yīng)該變?yōu)榫G色)。
?

在GPIO口這里設(shè)置LED的初始電平,輸出速度和該LED的宏定義。
?

1.3.5?Cortex內(nèi)核配置(SYS(Debug)配置,NVIC(優(yōu)先級分組))。
SYS由于是通過STlink仿真所以SYS設(shè)置為
?


?
1.3.6?生成工程代碼(設(shè)置工程,MDK等,最后生成代碼工程)。
生成過程如下:
Application Structure可以根據(jù)個人喜好來選擇,選項(xiàng)中Advanced與Basic的區(qū)別如下:
?

?
其中Project name是自己取的工程名(不能取漢字),Project Location最好是在桌面建一個文檔來存儲。
Toolchain 選擇MDK進(jìn)行編譯。
?

對于HAL庫的支持包由于此工程很簡單所以只需要copy需要的庫函數(shù)即可。
而Generated files勾選第一個是為了分開.c與.h文件方便進(jìn)行管理。

?
對工程進(jìn)行保存,然后點(diǎn)擊Generate Code進(jìn)行代碼生成

?

?
1.3.7?編寫用戶程序(main.c文件預(yù)留的位置編寫代碼)。?
點(diǎn)擊Open Project 打開生成的代碼會直接跳轉(zhuǎn)到Keil MDK不用像庫函數(shù)開發(fā)那樣手動新建工程(如下圖所示)。

?
?
嘗試進(jìn)行一次編譯如果沒有Warning和ERROR則自動生成代碼沒有問題。

?
然后點(diǎn)擊魔術(shù)棒點(diǎn)Debug,仿真器選擇STlink然后點(diǎn)Settings在flash Download中勾選Reset and Run。

?

?
然后對main.c進(jìn)行編程點(diǎn)亮一個LED,對于用STM32CubeMX生成的初始代碼,我們手寫的代碼有固定區(qū)域:STM32CubeMX生成的main.c代碼中USER CODE BEGIN與USER CODE END 之間的區(qū)域就是手寫代碼的區(qū)域。(如下圖標(biāo)紅框出的區(qū)域就是我們可以手寫代碼的區(qū)域。)

?
由于引腳初始設(shè)置為高電位,只需要將電平拉低即可點(diǎn)亮LED。代碼如下。
// 代碼樣式示例
/* USER?CODE BEGIN WHILE */
while(1)
{
????/* USER CODE END WHILE */
?
????/* USER CODE BEGIN?3 */
????HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
}
/* USER CODE END 3 */
未編譯下載之前面包板如圖所示:

?
編譯下載如下圖所示:

?
每次代碼修改之后都要先編譯然后下載。
點(diǎn)亮LED如下圖所示:

?
????如果我們想重新點(diǎn)亮另外的燈,就需要在STM32CubeMX上重新設(shè)置IO口而重新設(shè)置之后我們手動添加的代碼會保留下來,這個時候?qū)O口的宏定義非常重要。例如:我們用PA0端口來點(diǎn)亮一個LED只需要把PA0給設(shè)置為輸出,然后將PC13的宏定義給PA0,這樣就能將點(diǎn)的燈替換掉。(如下圖所示)
?

?
????而對于一個工程,如果不是替換IO口那么對于IO口的宏定義要保證不同,不能出現(xiàn)一個宏定義對應(yīng)多個IO口,這樣的話重新生成代碼,會對我們之前自己寫的代碼產(chǎn)生影響。
1.構(gòu)建STM32F10x Hal庫工程的開發(fā)環(huán)境詳解的評論 (共 條)
