国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【正點原子STM32連載】 第十章 STM32CubeMX簡介 摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2

這篇具有很好參考價值的文章主要介紹了【正點原子STM32連載】 第十章 STM32CubeMX簡介 摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1)實驗平臺:正點原子stm32f103戰(zhàn)艦開發(fā)板V4
2)平臺購買地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套實驗源碼+手冊+視頻下載地址: http://www.openedv.com/thread-340252-1-1.html

第十章 STM32CubeMX簡介

STM32CubeMX是由ST公司開發(fā)的圖形化代碼自動生成工具,能夠快速生成初始化代碼,如配置GPIO,時鐘樹,中間件等,使用戶專注于業(yè)務(wù)代碼的開發(fā)?,F(xiàn)在ST主推HAL庫代碼,經(jīng)典的標(biāo)準(zhǔn)外設(shè)庫已經(jīng)停止維護了,新產(chǎn)品也只提供HAL庫的代碼,因此,我們學(xué)習(xí)HAL庫是更加有優(yōu)勢的,由于HAL庫具有低耦合、通用、抽象了硬件層,使得開發(fā)者無需太過關(guān)注硬件驅(qū)動的實現(xiàn),使得開發(fā)更加的簡單快速,更容易維護,因此被越來越多的產(chǎn)品所使用。
本章將分為如下幾個小節(jié):
10.1 STM32CubeMX的作用
10.2 安裝STM32CubeMX
10.3 使用STM32CubeMX新建工程
10.4 STM32CubeMX新建工程使用建議

10.1 STM32CubeMX的作用

STM32CubeMX具有如下特性:
①直觀的選擇MCU型號,可指定系列、封裝、外設(shè)數(shù)量等條件;
②微控制器圖形化配置;
③自動處理引腳沖突;
④動態(tài)設(shè)置時鐘樹,生成系統(tǒng)時鐘配置代碼;
⑤可以動態(tài)設(shè)置外圍和中間件模式和初始化;
⑥功耗預(yù)測;
⑦C代碼工程生成器覆蓋了STM32微控制器初始化編譯軟件,如IAR,KEIL,GCC;
⑧可以獨立使用或者作為Eclipse插件使用;
⑨可作為ST的固件包、芯片手冊等的下載引擎;
對于STM32CubeMX和STM32Cube的關(guān)系這里我們還需要特別說明一下,STM32Cube包含STM32CubeMX圖形工具和STM32Cube庫兩個部分,使用STM32CubeMX配置生成的代碼,是基于STM32Cube庫的。也就是說,我們使用STM32CubeMX配置出來的初始化代碼,和STM32Cube庫兼容,例如硬件抽象層代碼就是使用的STM32的HAL庫。不同的STM32系列芯片,會有不同的STM32Cube庫支持,而STM32CubeMX圖形工具只有一種。所以我們配置不同的STM32系列芯片,選擇不同的STM32Cube庫即可。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.1.1 STM32CubeMX和STM32Cube庫的關(guān)系
當(dāng)然,自動生成的驅(qū)動代碼我們不去仔細(xì)專研其原理的話,對學(xué)習(xí)的提升很有限,而且在出現(xiàn)BUG的時候難以快速定位解決,因此我們也要了解其背后的原理。
10.2 安裝STM32CubeMX
STM32CubeMX運行環(huán)境搭建包含兩個部分。首先是Java運行環(huán)境安裝,其次是STM32CubeMX軟件安裝。
10.2.1 安裝JAVA環(huán)境
對于Java運行環(huán)境,大家可以到Java官網(wǎng)www.java.com下載最新的Java軟件,也可以直接從我們光盤復(fù)制安裝包,目錄為:A盤6,軟件資料1,軟件3、STM32CubeMXJava安裝包,Java安裝包文件下有x64和x86兩個文件夾,分別是64位和32位的電腦的安裝包,大家根據(jù)自己電腦的位數(shù)選擇即可。比如64位電腦選擇x64文件夾的jre-8u301-windows-x64.exe安裝包,并根據(jù)提示安裝即可。安裝完成之后提示界面如下圖10.2.1.1所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.1.1 Java安裝成功提示界面
安裝完Java運行環(huán)境之后,為了檢測是否正常安裝,我們可以打開Windows的命令輸入框,輸入:java –version 命令,如果顯示Java版本信息,則安裝成功。提示信息如下圖10.2.1.2:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.1.2 查看Java版本
10.2.2 安裝STM32CubeMX
在安裝了Java運行環(huán)境之后,接下來我們安裝STM32CubeMX圖形化工具。該軟件可以直接從光盤復(fù)制,目錄為:A盤6,軟件資料1,軟件STM32CubeMX,也可以直接從ST官方下載,下載地址為:https://www.st.com/en/development-tools/stm32cubemx.html。
接下來我們直接雙擊SetupSTM32CubeMX-6.3.0.exe,安裝步驟如下。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.1 啟動安裝
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.2 接受本許可協(xié)議
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.3 勾選第一項即可
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.4 指定安裝路徑
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.5 創(chuàng)建快捷方式
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.5 安裝進度提示
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.2.2.6 完成安裝
10.3 使用STM32CubeMX新建工程
CubeMX建立的工程結(jié)構(gòu)和本書介紹的代碼風(fēng)格有所差異,限于篇幅,本部分只介紹如何使用CubeMX生成MDK工程的方法。
10.3.1 打開STM32CubeMX
雙擊如圖10.3.1.1所示的STM32CubeMX桌面快捷方式圖標(biāo),打開后CubeMX主界面如圖10.3.1.2所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.1.1 CubeMX快捷方式
圖10.3.1.2 CubeMX主界面
10.3.2 下載和關(guān)聯(lián)的STM32Cube固件包
新建工程前,我們需要先安裝關(guān)聯(lián)與STM32主芯片對應(yīng)的STM32Cube固件包,點擊Help->Manage embedded software packages,如圖10.3.2.1所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.1 管理固件包
在彈出的軟件包管理界面中,我們可以選擇安裝驅(qū)動包的方式,有以下兩種方法:
方式一:從網(wǎng)絡(luò)下載安裝,按照圖10.3.2.2的步驟,在該窗口找到STM32F1列表選項,因為我們的教程源碼使用的固件包是1.8.3版本的,所以我們勾選1.8.3版本,等待安裝完成即可。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.2 下載和關(guān)聯(lián)STM32Cube固件包
方法二:不通過網(wǎng)絡(luò),直接點擊從本地導(dǎo)入。由于直接使用上面的安裝包管理器的“From Local”選項導(dǎo)入壓縮包有時候會直接報錯,比如可以直接導(dǎo)入“stm32cube_fw_f1_v180.zip”固件包,但直接導(dǎo)入“stm32cube_fw_f1_v183.zip”的安裝包時CubeMX軟件會報錯,所以我們采用以下方法來處理:
①選擇CubeMX的菜單,Help->Updater Settings,或者在CubeMX的活動窗口處于前臺運行狀態(tài)時使用它推薦的快捷鍵“Alt+S”,可以在彈出“更新設(shè)置”界面下,找到“Repository Folder”,即CubeMX的資源倉庫,默認(rèn)是安裝在C盤的一個文件夾下,但由于CubeMX會把固件庫解壓到這個文件夾下,在我們使用的STM32型號多了或者經(jīng)過一段時間的更新使用后,這個文件夾常常會變得非常大(數(shù)十Gb)。所以我們這里把默認(rèn)的路徑設(shè)置為“D:\STM32Cube\Repository”,但使用自定義路徑時CubeMX關(guān)聯(lián)的路徑一定不能有中文出現(xiàn),大家根據(jù)自己的需要決定是否設(shè)置。操作方法如圖10.3.2.3和圖10.3.2.4所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.3 設(shè)置更新選項
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.4 修改CubeMX的固件庫路徑(非必須)
②我們復(fù)制光盤提供的固件包,把它放到上一步我們設(shè)置或者找到的CubeMX的倉庫文件夾。光盤資料路徑為:A盤 8,STM32參考資料 1,STM32CubeF1固件包,我們這里要使用的是CubeF1固件的1.8.3版本。由于CubeF1的1.8.3版本是1.8.0版本的補充包,所以需要把“stm32cube_fw_f1_v180.zip”和“stm32cube_fw_f1_v183.zip”兩個固件包都復(fù)制到對應(yīng)的路徑下。復(fù)制后目錄CubeMX的倉庫目錄的狀況如圖10.3.2.4所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.4 復(fù)制固件包到CubeMX對應(yīng)的倉庫路徑
③先解壓“stm32cube_fw_f1_v180.zip”到當(dāng)前倉庫路徑的根路徑,注意這里解壓縮后的第一級目錄就是壓縮包下的目錄,如圖10.3.2.5所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.5 先解壓“stm32cube_fw_f1_v180.zip”
④接著解壓“stm32cube_fw_f1_v183.zip”到當(dāng)前倉庫路徑的根路徑,這里打開壓縮包可以發(fā)現(xiàn)CubeF1的1.8.3版本固件壓縮包下的文件夾與1.8.0的完全相同,我們解壓縮并替換文件為1.8.3中的文件。解壓后路徑下仍只有一個“STM32Cube_FW_F1_V1.8.0”文件夾。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.6 解壓“stm32cube_fw_f1_v183.zip”,并替換原有文件
⑤關(guān)閉CubeMX軟件并重啟。重啟后通過CubeMX的安裝包管理器,可以發(fā)現(xiàn)CubeMX已經(jīng)檢測到安裝好了對應(yīng)的驅(qū)動庫。至此離線安裝步驟結(jié)束。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.2.7 成功離線安裝CubeF1的1.8.3版本固件庫
10.3.3 新建工程
通過上一步安裝固件庫后,我們就可以使用STM32CubeMX配置工程,步驟如下:

  1. 工程初步建立
  2. HSE和LSE時鐘源設(shè)置
  3. 時鐘系統(tǒng)(時鐘樹)配置
  4. GPIO功能引腳配置
  5. 配置Debug選項
  6. 生成工程源碼
  7. 用戶程序
    接下來我們將按照上述步驟,和大家一起使用STM32CubeMX工具生成一個MDK工程,如果之前還沒有安裝過MDK的,請先按教程關(guān)于MDK安裝和介紹部分的內(nèi)容先安裝好軟件。
    1 工程初步建立
    方法一:依次點擊“File->New Project”即可建新工程。如果之前打開過的話,左側(cè)最近打開的過程一列會有打開的工程列表,直接點擊這些工程也可以打開。
    方法二:直接點擊ACCESS TO MCU SELECTOR。
    具體操作如圖10.3.3.1所示。
    stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.1 新建工程
點擊新建工程后,可能會彈出如圖10.3.3.2的窗口,提示需要聯(lián)網(wǎng)下載一些文件,可能等待時間比較長,可以直接選擇取消即可。我們可以通過關(guān)閉自動更新設(shè)置來禁止彈出這個窗口。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.2 啟動時聯(lián)網(wǎng)更新檢測
之后都可以進入芯片選型界面,如圖10.3.3.3所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.3 芯片選型界面
選擇具體的芯片型號,如圖10.3.3.4所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.4 選擇具體的芯片型號
鼠標(biāo)雙擊選擇的芯片型號后,彈出主設(shè)計界面,如圖10.3.3.5所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.5 主設(shè)計界面
2 HSE和LSE時鐘源設(shè)置
進入工程主設(shè)計界面后,首先設(shè)置時鐘源HSE和LSE。如圖10.3.3.6所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.6 設(shè)置時鐘源HSE和LSE
圖10.3.3.6中的標(biāo)號④和⑤,我們都選擇了Crystal/Ceramic Resonator,表示外部晶振作為它們的時鐘源。我們開發(fā)板的外部高速晶振和外部低速晶振分別是:8MHZ和32.768KHZ,所以HSE時鐘頻率就是8MHZ,LSE時鐘頻率就是32.768KHZ。
選項Master Clock Output 1 用來選擇是否使能MCO1引腳時鐘輸出。
3 時鐘系統(tǒng)(時鐘樹)配置
點擊Clock Configuration選項卡即可進入時鐘系統(tǒng)配置欄,如下圖10.3.3.7所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.7 時鐘系統(tǒng)配置欄
進入Clock Configuration配置欄之后可以看到,界面展現(xiàn)一個完整的STM32F1時鐘系統(tǒng)框圖。從這個時鐘樹配置圖可以看出,配置的主要是外部晶振大小,分頻系數(shù),倍頻系數(shù)以及選擇器。在我們配置的工程中,時鐘值會動態(tài)更新,如果某個時鐘值在配置過程中超過允許值,那么相應(yīng)的選項框會紅色提示。
這里,我們將配置一個以HSE為時鐘源,配置PLL相關(guān)參數(shù),然后系統(tǒng)時鐘選擇PLLCLK為時鐘源,最終配置系統(tǒng)時鐘為72MHz的過程。同時,還配置了AHB,APB1,APB和Systick的相關(guān)分頻系數(shù)。由于圖片比較大,我們把主要的配置部分分兩部分來講解,第一部分是配置系統(tǒng)時鐘,第二部分是配置SYSTICK、AHB、APB1和APB2的分頻系數(shù)。首先我們來看看第一部分配置如下圖10.3.3.8所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.8 系統(tǒng)時鐘配置圖
我們把系統(tǒng)時鐘配置分為七個步驟,分別用標(biāo)號1~5表示,詳細(xì)過程為:
① 時鐘源參數(shù)設(shè)置:我們選擇HSE為時鐘源,所以我們要根據(jù)硬件實際的高速晶振頻率(這里我們是8MHZ)填寫。
② 時鐘源選擇:我們配置選擇器選擇HSE即可。
③ PLL倍頻系數(shù)PLLMUL配置。倍頻系數(shù)PLLMUL我們設(shè)置為9。
④ 系統(tǒng)時鐘時鐘源選擇:PLL,HSI還是HSE。我們選擇PLL,選擇器選擇PLLCLK即可。
⑤ 經(jīng)過上面配置以后此時SYSCLK=72MHz。
經(jīng)過上面的5個步驟,就配置好STM32F1的系統(tǒng)時鐘為72MHz。接下來我們還需要配置AHB、APB1、APB2和Systick的分頻系數(shù),為STM32的片上外設(shè)或M3內(nèi)核設(shè)置對應(yīng)的工作時鐘,為后續(xù)使用這些硬件功能做好準(zhǔn)備。配置如下圖10.3.3.9所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.9 AHB、APB1、APB2、APB3和APB4總線時鐘配置
AHB、APB1和APB2總線時鐘以及Systick時鐘的來源于系統(tǒng)時鐘SYSCLK。其中AHB總線時鐘HCLK由SYSCLK經(jīng)過AHB預(yù)分頻器之后得到,如果我們要設(shè)置HCLK為72MHz(最大為72Mhz),那么我們只需要配置圖中標(biāo)號⑥的地方為1即可。得到HCLK之后,接下來我們將在圖標(biāo)號⑦~⑨處同樣的方法依次配置Systick、APB1和APB分頻系數(shù)分別為1、2和1。注意!systick固定為72MHz,配置完成之后,那么HCLK=72MHZ,Systic=72MHz,PCLK1=36MHz,PCLK2=72MHz,這和之前例程配置的時鐘是主頻一樣的。
以上方法是手動計算的方法,是為了幫助我們更好地去認(rèn)識STM32時鐘的配置方法,當(dāng)然CubeMX也提供了更簡單的方法:在圖10.3.3.9的“HCLK(MHz)”位置,實際上是可以編輯的。我們直接輸入我們要的主頻,這里是72Mzh,按回車鍵,CubeMX會幫我們提供一種設(shè)置主頻和其它時鐘的建議,選擇是后會由軟件自動配置好,當(dāng)然只有啟用外部的晶振后才能配置到72Mhz的時鐘,這里大家自己嘗試一下就清楚了,我們不展開講述了。
4 GPIO功能引腳配置
本小節(jié),我們講解怎么使用STM32CubeMX工具配置STM32F1的GPIO口。STM32F103 戰(zhàn)艦開發(fā)板的PB5和PE5引腳各連接一個LED燈,我們來學(xué)習(xí)配置這兩個IO口的相關(guān)參數(shù)。這里我們回到STM32CubeMX的Pinout&Configuration選項,在搜索欄輸入PB5后回車,可以在引腳圖中顯示位置,如下圖10.3.3.10所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.10 搜索引腳位置
接下來,我們在圖10.3.3.11引腳圖中點擊PB5,在彈出的下拉菜單中,選擇IO口的功能為GPIO_Output。操作方法如下圖10.3.3.11所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.11 配置GPIO模式
同樣的方法,我們配置PE5選擇功能為GPIO_Oput即可。設(shè)置好即可看到引腳從灰色變成綠色,標(biāo)識該管腳已經(jīng)啟用。這里我們需要說明一下,如果我們要配置IO口為外部中斷引腳或者其他復(fù)用功能,我們選擇相應(yīng)的選項即可。配置完IO口功能之后,還要配置IO口的速度,上下拉等參數(shù)。這些參數(shù)我們通過System Core下的GPIO選項進行配置,如圖10.3.3.12所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.12 GPIO選項
我們先配置PB5,PE5和PB5配置方法一樣的。點擊圖10.3.3.12的④號框里面的PB5,配置如圖10.3.3.13所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.13 配置GPIO口詳細(xì)參數(shù)
GPIO output level是IO的初始值,由于LED一端接VCC,另一端接GPIO,故要點亮LED燈時,使GPIO輸出低電平即可。為了一開始讓LED燈熄滅,我們設(shè)置初始值輸出高電平。
GPIO mode我們已經(jīng)在視圖中配置為推挽輸出了,這里不需要修改。
GPIO Pull-up/Pull-down默認(rèn)是無上下拉,我們這里用默認(rèn)配置。
Maximum output speed輸出速度配置,默認(rèn)是低速,我們設(shè)置為高速。
User Label用戶符號,我們可以給PB5起一個別的名字LED0。
PE5也是按照這樣的方法配置即可。
5 配置Debug選項
由于CubeMX默認(rèn)把Debug選項關(guān)閉了,這樣會給我們帶來麻煩:用CubeMX生成的工程編譯下載一次后,后續(xù)再次下載就會提示錯誤,因此我們要把Debug選項打開。這里有多種選擇,我們設(shè)置成圖10.3.3.14所示的情況即可。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.14 打開Debug選項
如果已經(jīng)不小心關(guān)閉了Debug選項,那么下次下載的時候按住復(fù)位鍵,等到工程提示的時候松開復(fù)位鍵即可,因為STM32的芯片默認(rèn)復(fù)位上電時的Debug引腳功能是開啟的。
6 生成工程源碼
接下來我們學(xué)習(xí)怎么設(shè)置生成一個工程,如圖10.3.3.15所示。選擇Project Manager-> Project選項用來配置工程的選項,我們了解一下里面的信息。
Project Name:工程名稱,填入工程名稱(半角,不能有中文字符)
Project Location:工程保存路徑,點擊Browse選擇保存的位置(半角,不能有中文字符)
Toolchain Folder Location:工具鏈文件夾位置,默認(rèn)即可。
Application Structure:應(yīng)用的結(jié)構(gòu),選擇Basic(基礎(chǔ)),不勾選Do not generate the main(),因為我們要其生成main函數(shù)。
Toolchain/IDE:工具鏈/集成開發(fā)環(huán)境,我們使用Keil,因此選擇MDK-ARM,Min Version選擇V5.27,這里根據(jù)CubeMX的版本可能會有差異,我們默認(rèn)使用V5以上的版本即可。
Linker Settings 鏈接器設(shè)置:
Minimum Heap Size 最小堆大小,默認(rèn)(大工程需按需調(diào)整)。
Minimum Stack Size 最小棧大小,默認(rèn)(大工程需按需調(diào)整)。
MCU and Firmware Package是MCU及固件包設(shè)置:
MCU Reference:目標(biāo)MCU系列名稱。
Firmware Package Name and Version:固件包名稱及版本。
勾選Use Default Firmware Location,文本框里面的路徑就是固件包的存儲地址,我們使用默認(rèn)地址即可。(這里因為我有兩個版本的固件包,所以它默認(rèn)使用最新的,這個關(guān)系不大,就用新的)。這樣工程生成的設(shè)置就設(shè)置好了,如圖10.3.3.15所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.15 工程配置
打開Project Manager-> Code Generator選項,Generated files 生成文件選項,勾選Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾選這個選項的話將會將每個外設(shè)單獨分開成一組.c、.h文件,使得代碼結(jié)構(gòu)更加的清晰,如圖10.3.3.16所示。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.16 代碼生成器設(shè)置
由于CubeMX默認(rèn)勾選了復(fù)制所有的庫,即工程中不使用到的代碼也會復(fù)制進來,為了節(jié)省CubeMX生成工程的空間,我們勾選生成工程時只復(fù)制用到的庫(這一步是可選操作,大家根據(jù)自己的實際選擇),如圖圖10.3.3.17所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.17 設(shè)置只復(fù)制與工程相關(guān)的庫驅(qū)動以減小工程大小
至此工程最基礎(chǔ)配置就已經(jīng)完成,點擊藍色按鈕(SENERATE CODE)就可以生成工程。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.18 生成工程
如果我們的CubeMX工程放置配置路徑中沒有中文。生成代碼后會彈出類似圖10.3.3.19的提示窗口,點擊Open Project就打開MDK工程(如果是中文路徑則會報錯,這里暫時不用管,我們先往下繼續(xù)操作)。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.19 打開工程
完整的STM32F1工程就已經(jīng)生成完成。生成后的工程目錄結(jié)構(gòu)如下圖10.3.3.20所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.20 STM32CubeMX生成的工程目錄結(jié)構(gòu)
Drivers文件夾存放的是HAL庫文件和CMSIS相關(guān)文件。
Inc文件夾存放的是工程必須的部分頭文件。
MDK-ARM下面存放的是MDK工程文件。
Src文件夾下面存放的是工程必須的部分源文件。
Template.ioc是STM32CubeMX工程文件,雙擊該文件就會在STM32CubeMX中打開。
7 用戶程序
在編寫用戶程序之前,首先我們打開生成的工程模板進行編譯,因為我們在之前步驟生成的CubeMX工程為LED_TEST.ioc,故生成的MDK工程位置是.\MDK-ARM\LED_TEST.uvprojx,如果大家配置的CubeMX的工程名和路徑名不含中文或中文字符,按上述步驟生成的工程就可以直接編譯通過了。
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.3.3.21 STM32CubeMX生成的MDK工程編譯通過
接下來我們中生成的工程模板的main.c文件中找到main函數(shù),這里我們刪掉了源碼注釋,關(guān)鍵源碼如下:

int main(void)
{
HAL_Init();
  SystemClock_config();
  MX_GPIO_Init();
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
  }
}

大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X /”和“/ USER CODE END X */”格式的注釋,我們在這些注釋的BEGIN和END之間編寫代碼,那么重新生成工程之后,這些代碼會保留而不會被覆蓋。
我們編寫一個跑馬燈的用戶程序,程序具體如下:

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_SET); 
    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET); 
    HAL_Delay(500);
    HAL_GPIO_WritePin(LED0_GPIO_Port, LED0_Pin, GPIO_PIN_RESET);
    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); 
    HAL_Delay(500);
    /* USER CODE END WHILE */
  }
}

編寫好程序后,編譯沒有任何警告和錯誤??梢灾苯酉螺d程序到開發(fā)板中,使用DAP下載,請注意設(shè)置MDK的下載選項,如果不清楚設(shè)置的讀者可以回看本書第四章的相關(guān)知識點。下載后,可以看到LED0和LED1同時按500ms的頻率亮滅,效果與其它版本的新建工程相同。
本小節(jié)使用STM32CubeMX新建的工程模板在我們光盤目錄:“4,程序源碼\2,標(biāo)準(zhǔn)例程-HAL庫版本\實驗0 基礎(chǔ)入門實驗\實驗0-4,新建工程實驗-CubeMX版本”中有存放,大家在編寫用戶代碼過程中可以參考該工程的main.c文件。
10.4 STM32CubeMX新建工程使用建議
① 使用CubeMX的環(huán)境搭建工程,工程文件夾路徑、文件名不要帶任何中文及中文字符,否則會遇到各種報錯;
② 本書以新建工程-HAL庫版本為基準(zhǔn)來展開,不對CubeMX的使用過多講解。使用CubeMX可以幫助我們快速搭建工程,使用戶專注于應(yīng)用開發(fā),但STM32的開發(fā)與硬件密切相關(guān),對STM32開發(fā)來說,拋開底層只專注做應(yīng)用并不實際,畢竟無法使用一套通用設(shè)計來滿足不同用戶的需求;
③ 關(guān)于新建CubeMX的工程路徑中有中文的情況的解決:
如果我們配置的CubeMX工程路徑里面有中文可能會報以下的錯誤(再次強調(diào),CubeMX的關(guān)聯(lián)路徑、文件名不要有中文出現(xiàn)):
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.4.1 直接編譯報錯
造成錯誤的原因是CubeMX對中文的支持不友好,且生成MDK工程默認(rèn)通過工程中的CMSIS那個綠色的控件選擇啟動文件而不是直接添加啟動文件(startup_xxx.s)到我們的工程中,而中文路徑時就會找不到,有兩個解決辦法:
1、用CubeMX生成的工程不要放置在包含中文路徑的文件夾下;
2、添加啟動文件到我們的工程中,我們新建一個application/MDK-ARM分組,把startup_stm32f103xe.s添加到這個分組,如圖10.3.3.22所示:
stm32cubemx正點原子hal,stm32,單片機,嵌入式硬件

圖10.4.2 STM32CubeMX生成的工程目錄結(jié)構(gòu)
④ 關(guān)于配置的文件CubeMX工程(.ioc后綴)名字有中文的情況,我們建議重新新建工程或者把生成的工程文件重命名為英文。因為帶中文的CubeMX工程生成的MDK的Output目錄有中文,MDK也會報錯,盡管可以重新設(shè)置MDK工程的Output目錄和添加③所描述步驟的啟動文件,使本次編譯通過,但下次重新用CubeMX生成工程時,仍舊需要重復(fù)修改配置。文章來源地址http://www.zghlxwxcb.cn/news/detail-791974.html

到了這里,關(guān)于【正點原子STM32連載】 第十章 STM32CubeMX簡介 摘自【正點原子】STM32F103 戰(zhàn)艦開發(fā)指南V1.2的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包