【正点原子STM32连载】第十章 STM32CubeMX简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)實驗平臺:正點原子MiniPro H750開發板
2)平臺購買地址:https://detail.tmall.com/item.htm?id=677017430560
3)全套實驗源碼+手冊+視頻下載地址:http://www.openedv.com/thread-336836-1-1.html
4)對正點原子STM32感興趣的同學可以加群討論:879133275
第十章 STM32CubeMX簡介
STM32CubeMX是由ST公司開發的圖形化代碼自動生成工具,能夠快速生成初始化代碼,如GPIO、時鐘樹、中間件等,使用戶專注于業務代碼的開發?,F在ST主推HAL庫,經典的標準外設庫已經停止維護了,新產品也只提供HAL庫的代碼,因此,我們學習HAL庫是更加有優勢的,由于HAL庫具有低耦合、通用、抽象了硬件層,使得開發者無需太過關注硬件驅動的實現,使得開發更加的簡單快速,更容易維護,因此被越來越多的產品所使用。
本章將分為如下幾個小節:
10.1 STM32CubeMX的作用
10.2 安裝STM32CubeMX
10.3 使用STM32CubeMX新建工程
10.1 STM32CubeMX的作用
STM32CubeMX具有如下特性:
①直觀的選擇MCU型號,可指定系列、封裝、外設數量等條件
②微控制器圖形化配置
③自動處理引腳沖突
④動態設置時鐘樹,生成系統時鐘配置代碼
⑤可以動態設置外圍和中間件模式和初始化
⑥功耗預測
⑦C代碼工程生成器覆蓋了STM32微控制器初始化編譯軟件,如IAR,KEIL,GCC
⑧可以獨立使用或者作為Eclipse插件使用
⑨可作為ST的固件包、芯片手冊等的下載引擎
這里特別說明一下STM32CubeMX和STM32Cube固件庫的關系,STM32CubeMX圖形工具配置生成的代碼,是基于STM32Cube固件庫的,并且可以在圖形工具中直接下載STM32Cube固件庫。也就是說,我們使用STM32CubeMX配置出來的初始化代碼,兼容STM32Cube庫,例如硬件抽象層代碼就是使用的STM32的HAL庫。不同系列的STM32芯片,會有不同系列的STM32Cube庫,而STM32CubeMX圖形工具只有一個,所以開發不同的STM32系列芯片,選擇不同系列的STM32Cube庫即可,它們的關系如下圖所示:
圖10.1.1 STM32CubeMX和STM32Cube固件庫的關系
當然,自動生成的驅動代碼我們不去仔細專研其原理的話,對學習的提升很有限,而且在出現BUG的時候難以快速定位解決,因此我們也要了解其背后的原理。
10.2 安裝STM32CubeMX
STM32CubeMX運行環境搭建包含兩個部分,首先安裝Java環境,再安裝STM32CubeMX。
10.2.1 安裝JAVA環境
安裝Java運行環境,大家可以到Java官網www.java.com下載最新的Java軟件,也可以直接從光盤資料獲取安裝包,目錄如下:A盤6,軟件資料1,軟件3、STM32CubeMXJava安裝包,Java安裝包文件下有x64和x86兩個文件夾,分別是64位和32位的電腦的安裝包,大家根據自己電腦的位數選擇即可。比如64位電腦選擇x64文件夾的jre-8u301-windows-x64.exe安裝包,并根據提示安裝即可。安裝完成之后提示界面如下圖10.2.1.1所示。
圖10.2.1.1 Java安裝成功提示界面
安裝完Java運行環境之后,為了檢測是否正常安裝,我們可以打開Windows的命令輸入框,輸入:java –version命令,如果顯示Java版本信息,則安裝成功。提示信息如下圖10.2.1.2:
圖10.2.1.2 查看Java版本
10.2.2 安裝STM32CubeMX
在安裝了Java運行環境之后,接下來我們安裝STM32CubeMX圖形化工具。該軟件可以直接從光盤資料獲取,目錄如下:A盤6,軟件資料1,軟件3、STM32CubeMX,也可以直接從ST官方下載,下載網址為:https://www.st.com/en/development-tools/stm32cubemx.html。
接下來我們直接雙擊SetupSTM32CubeMX-6.3.0.exe,安裝步驟如下。
圖10.2.2.1 啟動安裝
圖10.2.2.2 接受本許可協議
圖10.2.2.3 勾選第一項即可
圖10.2.2.4 指定安裝路徑
圖10.2.2.5 創建快捷方式
圖10.2.2.6 安裝進度提示
圖10.2.2.7 完成安裝
10.3 使用STM32CubeMX新建工程
大多數情況下,我們都只使用STM32CubeMX來生成工程的時鐘系統初始化代碼以及外設的初始化代碼,因為用戶控制邏輯代碼是無法在STM32CubeMX中完成的,需要用戶自己根據需求來實現。
10.3.1 打開STM32CubeMX
雙擊桌面STM32CubeMX快捷方式圖標,如圖10.3.1.1所示。
圖10.3.1.1 CubeMX快捷方式
打開后CubeMX主界面如圖10.3.1.2所示。
圖10.3.1.2 CubeMX主界面
10.3.2 下載和關聯的STM32Cube固件包
我們知道STM32CubeMX圖形工具只有一種, STM32Cube固件包卻有多種,需要選擇我們工程對應的固件包。
為了方便,新建工程前,我們先來下載和關聯STM32Cube固件包,點擊Help->Manage embedded software packages,如圖10.3.2.1所示。
圖10.3.2.1 管理固件包
然后彈出管理界面,在該窗口找到STM32H7列表選項,勾選1.6.0版本。這里選擇1.6.0版本是因為我們的光盤的固件包是這個版本的。關聯STM32Cube固件包有兩個方法,如圖10.3.2.2所示.
圖10.3.2.2 下載和關聯STM32Cube固件包
方法二:下載好之后,會自動關聯,所以不需要多講什么。
方法一:點擊后,彈出下面的窗口,然后選擇光盤中的對應的固件包,注意這里是壓縮包的形式,如圖10.3.2.3所示。
圖10.3.2.3 關聯本地STM32Cube固件包
圖10.3.2.4 等待關聯
圖10.3.2.5 關聯成功
關聯好固件包我們就可以開始新建工程了。
10.3.3 新建工程
使用STM32CubeMX配置工程的一般步驟為:
1,工程初步建立
2,HSE和LSE時鐘源設置
3,時鐘系統(時鐘樹)配置
4,GPIO功能引腳配置
5,Cortex-M7內核基本配置(限定項)
6,生成工程源碼
7,用戶程序
接下來將按照這7個步驟,依次教大家使用STM32CubeMX工具生成一個完整的工程。
1 工程初步建立
方法一:依次點擊“File”,“New Project”即可建新工程。如果之前打開過的話,左側最近打開的過程一列會有打開的工程列表,直接點擊這些工程也可以打開。
方法二:直接點擊ACCESS TO MCU SELECTOR。
具體操作如圖10.3.3.1所示。
圖10.3.3.1 新建工程
點擊新建工程后,第一次可能會聯網下載一些的文件,可能等待時間比較長,可以直接選擇取消即可。
圖10.3.3.2 啟動時聯網更新檢測
之后都可以進入芯片選型界面,如圖10.3.3.3所示。
圖10.3.3.3 芯片選型界面
選擇具體的芯片型號,如圖10.3.3.4所示。
圖10.3.3.4 選擇具體的芯片型號
選擇了芯片型號后,彈出主設計界面,如圖10.3.3.5所示。
圖10.3.3.5 主設計界面
2 HSE和LSE時鐘源設置
進入工程主設計界面后,首先設置時鐘源HSE和LSE。如圖10.3.3.6所示。
圖10.3.3.6 設置時鐘源HSE和LSE
圖10.3.3.6中的標號3和4,我們都選擇了Crystal/Ceramic Resonator,表示外部晶振作為它們的時鐘源。我們開發板的外部高速晶振和外部低速晶振分別是:8MHZ和32.768KHZ。所以HSE時鐘頻率就是8MHZ,LSE時鐘頻率就是32.768KHZ。
選項Master Clock Output 1 用來選擇是否使能MCO1引腳時鐘輸出,選項Master Clock Output 2用來選擇是否使能MCO2引腳時鐘輸出,最后一個選項Audio Clock Input(I2S_CKIN)用來選擇是否從I2S_CKIN(PC9)輸入I2S時鐘。這里大家要注意,因為選項Master Clock Output 2和選項Audio Clock Input(I2S_CKIN)都是使用的PC9引腳,所以如果我們使能了其中一個,那么另一個選項會自動顯示為紅色,也就是不允許配置,這就是STM32CubeMX的自動沖突檢測功能。
3 時鐘系統(時鐘樹)配置
點擊Clock Configuration選項卡即可進入時鐘系統配置欄,如下圖10.3.3.7所示:
圖10.3.3.7 時鐘系統配置欄
進入Clock Configuration配置欄之后可以看到,界面展現一個完整的STM32H7時鐘系統框圖。從這個時鐘樹配置圖可以看出,配置的主要是外部晶振大小,分頻系數,倍頻系數以及選擇器。在我們配置的工程中,時鐘值會動態更新,如果某個時鐘值在配置過程中超過允許值,那么相應的選項框會紅色提示。
這里,我們將配置一個以HSE為時鐘源,配置PLL1相關參數,然后系統時鐘選擇PLLCLK為時鐘源,最終配置系統時鐘為480MHz的過程。同時,還配置了AHB,APB1,APB2、APB3、APB4和Systick的相關分頻系數。由于圖片比較大,我們把主要的配置部分分兩部分來講解,第一部分是配置系統時鐘,第二部分是配置SYSTICK、AHB、APB1、APB2、APB3和APB4的分頻系數。首先我們來看看第一部分配置如下圖10.3.3.8所示:
圖10.3.3.8 系統時鐘配置圖
我們把系統時鐘配置分為七個步驟,分別用標號1~7表示,詳細過程為:
1、時鐘源參數設置:我們選擇HSE為時鐘源,所以我們要根據硬件實際的高速晶振頻率(這里我們是8MHZ)填寫。
2、時鐘源選擇:我們配置選擇器選擇HSE即可。
3、PLL1分頻系數M配置。分頻系數M我們設置為2。
4、PLL1倍頻系數N配置。倍頻系數N我們設置為240。
5、PLL1分頻系數P配置。分頻系數P我們配置為2。
6、系統時鐘時鐘源選擇:PLL,HSI還是HSE。我們選擇PLL,選擇器選擇PLLCLK即可。
7、經過上面配置以后此時SYSCLK=480Mhz。
經過上面的7個步驟,就會生成標準的480MHz系統時鐘。接下來我們只需要配置AHB、APB1、APB2、APB3、APB4和Systick的分頻系數,就可以實現sys.c文件中的sys_stm32_clock_init函數配置的部分時鐘系統。配置如下圖10.3.3.9所示:
圖10.3.3.9 AHB、APB1、APB2、APB3和APB4總線時鐘配置
AHB、APB1、APB2、APB3和APB4總線時鐘以及Systick時鐘的最終來源都是系統時鐘SYSCLK。其中AHB總線時鐘HCLK是由SYSCLK經過AHB預分頻器之后的來,如果我們要設置HCLK為240MHz(最大也就240Mhz),那么我們只需要配置圖中標號8的地方為2即可。得到HCLK之后,接下來我們將在圖標號9~12處同樣的方法依次配置APB3、APB1、APB2和APB4分頻系數分別為2,2、2和2即可。注意!systick固定為480MHz,配置完成之后,那么HCLK=240MHZ,Systic=480MHz,PCLK1=120MHz,PCLK2=120MHz,PCLK3=120Mhz,PCLK4=120MHz,這和我們使用sys_stm32_clock_init函數配置的時鐘是一樣的。
4 GPIO功能引腳配置
本小節,我們講解怎么使用STM32CubeMX工具配置STM32H7的GPIO口。MiniPRO STM32H750開發板的PB4、PE5和PE6引腳連接一個RGB燈,我們來學習配置這三個IO口的相關參數。這里我們回到STM32CubeMX的Pinout&Configuration選項,在搜索欄輸入PB4后回車,可以在引腳圖中顯示位置,如下圖10.3.3.10所示:
圖10.3.3.10 搜索引腳位置
接下來,我們在圖10.3.3.11引腳圖中點擊PB4,在彈出的下拉菜單中,選擇IO口的功能為GPIO_Output。操作方法如下圖10.3.3.11所示:
圖10.3.3.11 配置GPIO模式
同樣的方法,我們配置PE5和PE6選擇功能為GPIO_Oput即可。設置好即可看到引腳從灰色變成綠色,標識該管腳已經啟用。這里我們需要說明一下,如果我們要配置IO口為外部中斷引腳或者其他復用功能,我們選擇相應的選項即可。配置完IO口功能之后,還要配置IO口的速度,上下拉等參數。這些參數我們通過System Core下的GPIO選項進行配置,如圖10.3.3.12所示。
圖10.3.3.12 GPIO選項
我們先配置PB4,PE5和PE6配置方法一樣的。點擊圖10.3.3.12的2號框里面的PB4,配置如圖10.3.3.13所示。
圖10.3.3.13 配置GPIO口詳細參數
GPIO output level是IO的初始值,為了開始讓RGB燈熄滅,我們設置初始值輸出高電平。
GPIO mode默認是推挽輸出,不需要更改。
GPIO Pull-up/Pull-down默認是不上下拉,我們改為上拉。
Maximum output speed輸出速度配置,默認是低速,我們設置為中速(可以不改)。
User Label用戶符號,我們可以給PB4起一個別的名字。
PE5和PE6也是按照這樣的方法配置即可。
5 Cortex-M7內核基本配置
這里我們主要配置Cortex-M7內核相關的參數。我們依次點擊Cortex_M7 進入配置界面,操作過程如下圖10.3.3.14所示:
圖10.3.3.14 Cotex_M7配置
該界面一共有兩個配置欄目。第一個配置欄目Cortex Interface Settings下面有兩個配置項:
上面這2個參數是CM7內核相關配置。第二個配置欄目Cortex Memory Protection Unit,是用來配置內存保護單元MPU,在我們后面的實驗會講解MPU配置。
6 生成工程源碼
接下來我們學習怎么設置生成一個工程,Project Manager-> Project選項用來配置工程的選項,我們了解一下里面的信息。
Project Name:工程名稱,填入工程名稱(半角,不能有中文字符)
Project Location:工程保存路徑,點擊Browse選擇保存的位置(半角,不能有中文字符)
Toolchain Folder Location:工具鏈文件夾位置,默認即可。
Application Structure:應用的結構,選擇Basic(基礎),不勾選Do not generate the main(),因為我們要其生成main函數。
Toolchain/IDE:工具鏈/集成開發環境,我們使用Keil,因此選擇MDK-ARM,Min Version選擇V5.27(最新)。
Linker Settings 鏈接器設置:
Minimum Heap Size 最小堆大小,默認(大工程需按需調整)。
Minimum Stack Size 最小棧大小,默認(大工程需按需調整)。
MCU and Firmware Package是 MCU及固件包設置:
MCU Reference:目標MCU系列名稱。
Firmware Package Name and Version :固件包名稱及版本。
勾選Use Default Firmware Location,文本框里面的路徑就是固件包的存儲地址,我們使用默認地址即可。(這里因為我有兩個版本的固件包,所以它默認使用最新的,這個關系不大,就用新的)。 最后工程配置,如圖10.3.3.15所示。
圖10.3.3.15 工程配置
打開Project Manager-> Code Generator選項,Generated files 生成文件選項,勾選Generate peripheral initialization as a pair of ‘.c/.h’files per peripheral,勾選這個選項的話將會將每個外設單獨分開成一組.c、.h文件,使得代碼結構更加的清晰,如圖10.3.3.16所示。
圖10.3.3.16 代碼生成器設置
至此工程最基礎配置就已經完成,點擊藍色按鈕(SENERATE CODE)就可以生成工程。
圖10.3.3.17生成工程
在彈出來的窗口中點擊Open Project就打開MDK工程。
圖10.3.3.18 打開工程
完整的STM32H7工程就已經生成完成。生成后的工程目錄結構如下圖10.3.3.19所示:
圖10.3.3.19 STM32CubeMX生成的工程目錄結構
Drivers文件夾存放的是HAL庫文件和CMSIS相關文件。
Inc文件夾存放的是工程必須的部分頭文件。
MDK-ARM下面存放的是MDK工程文件。
Src文件夾下面存放的是工程必須的部分源文件。
Template.ioc是STM32CubeMX工程文件,雙擊該文件就會在STM32CubeMX中打開。
7 用戶程序
在編寫用戶程序之前,首先我們打開生成的工程模板進行編譯,發現沒有任何錯誤和警告。
接下來我們看看生成的工程模板的main函數,這里我們刪掉了源碼注釋,關鍵源碼如下:
大家需要注意,STM32CubeMX生成的main.c文件中,有很多地方有“/* USER CODE BEGIN X /”和“/ USER CODE END X */”格式的注釋,我們在這些注釋的BEGIN和END之間編寫代碼,那么重新生成工程之后,這些代碼會保留而不會被覆蓋。
我們編寫一個跑馬燈的用戶程序,程序具體如下:
編寫好程序后,編譯沒有任何警告和錯誤。可以直接下載程序MiniPRO STM32H750開發板中(使用DAP下載,請注意配置MDK),算法只需要128K的算法就可以了。
本小節使用STM32CubeMX新建的工程模板在我們光盤目錄:“4,程序源碼\標準例程-庫函數版本\實驗0-4 Template工程模板-使用STM32CubeMX配置 ”中有存放,大家在編寫用戶代碼過程中可以參考該工程的main.c文件。
10.4 STM32CubeMX新建工程使用建議
① 使用CubeMX的環境搭建工程,工程文件夾路徑、文件名不要帶任何中文及中文字符,否則會遇到各種報錯;
② 本書以新建工程-HAL庫版本為基準來展開,不對CubeMX的使用過多講解。使用CubeMX可以幫助我們快速搭建工程,使用戶專注于應用開發,但STM32的開發與硬件密切相關,對STM32開發來說,拋開底層只專注做應用并不實際,畢竟無法使用一套通用設計來滿足不同用戶的需求;
③ 關于新建CubeMX的工程路徑中有中文的情況的解決:
如果我們配置的CubeMX工程路徑里面有中文可能會報以下的錯誤:
圖10.4.1 直接編譯報錯
造成錯誤的原因是CubeMX對中文的支持不友好,且生成的MDK工程默認通過工程中的CMSIS那個綠色的控件選擇啟動文件而不是直接添加啟動文件(startup_xxx.s)到我們的工程中,而有中文路徑時就會找不到,有兩個解決辦法:
1、用CubeMX生成的工程不要放置在包含中文路徑的文件夾下;
2、添加啟動文件到我們的工程中,我們新建一個Application/MDK-ARM分組,把startup_stm32h750xx.s添加到這個分組,如圖10.4.2所示:
圖10.4.2 STM32CubeMX生成的工程目錄結構
④ 關于配置的文件CubeMX工程(.ioc后綴)名字有中文的情況,我們建議重新新建工程或者把生成的工程文件重命名為英文。因為帶中文的CubeMX工程生成的MDK的Output目錄有中文,MDK也會報錯,盡管可以重新設置MDK工程的Output目錄和添加③所描述步驟的啟動文件,使本次編譯通過,但下次重新用CubeMX生成工程時,仍舊需要重復修改配置。
總結
以上是生活随笔為你收集整理的【正点原子STM32连载】第十章 STM32CubeMX简介 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .net 知识积累
- 下一篇: android 刷机文件怎么打开,安卓手