1.MPU/CPU 選擇
step1: 打開CubeMX 軟件, 在主頁面上 點擊如下按鈕,進入芯片選擇界面

step2: 在Part Number Search 欄搜索我們需要用到的芯片型號,比如這里我們選擇 STM32F103C8

選中某一型號時,會在頁面右邊顯示該芯片的詳細參數和信息,其中 Features 可以查看該芯片的具體特點和外設, 還可以點擊Datasheet 下載數據手冊

在芯片選擇頁面的右下方有芯片的信息概要,比如這里包括該型號芯片的 引腳瘋轉,Flash, Ram, IO 數量, 主頻等基本信息

確定了芯片型號之后,雙擊上圖中我們選擇的芯片,進入工程配置界面
2.片內外設配置
在工程配置頁面中有外設配置,時鍾配置,和工程配置。這里我們先講解如何配置這些片內外設

CubeMX STM32所有外設都進行了分類,比如這里的 STM32F103C8T6 的所有外設就被分成了一共5類:
1)系統內核

2)模擬類

3) 定時相關

4) 通信相關

5) 中間件

上面的片內外設用戶需要根據自己項目的使用情況而進行選擇配置,但是對於絕大部分的項目來說 1)系統內核 中的 RCC&SYS 項都必須要進行設置
RCC配置,如果需要用 LSE / HSE 就需要在這進行配置

SYS配置, 關於 debug 口子的配置,默認它是認為我們不需要 debug 口的,所以如果不更改的話生成代碼下載進去后 debug 口就關閉了
所以一般這里需要修改為 JTAG(4pin)

3.時鍾配置
step1:
選中時鍾配置欄,進入時鍾配置界面

首先我們在這里對單片機的系統時鍾源做一個簡單的解釋,對於STM32來說總共有4個時鍾源。
STM32的四個時鍾源
高速外部時鍾(HSE):外部時鍾源,晶振頻率可取范圍為4~16MHz,我們一般采用8MHz的晶振。
低速外部時鍾(LSE):外部時鍾源,主要提供給實時時鍾模塊,所以一般采用32.768KHz。
高速內部時鍾(HSI):由內部RC振盪器產生,頻率為8MHz,但不穩定。
低速內部時鍾(LSI):由內部RC振盪器產生,也主要提供給實時時鍾模塊,頻率大約為40KHz。

對於單片機的系統主時鍾。我們一般選用高速時鍾 HSE或者HSI(系統默認), 上圖中時鍾配置為 HSE,HSE時鍾配置流程主要分為以下幾步
1)HSE直接分頻后作為 PLL Source Mux選擇器的輸入 ,
2)之后通過鎖相環 9倍頻 后輸入到 System Clock Mux
3) System Clock Mux 直接輸出得到系統主時鍾 SYSCLK 72Mhz
4) SYSCLK 經過分頻器得到高速時鍾 HCLK (這里分頻系數為1 所以HCLK也為72MHZ)
5) HCLK 后面又分為了5條路徑
a.直接作為 AHB總線時鍾,作為 內核,內存,DMA等的時鍾
b. 分頻后作為 Cortex 系統定時器的時鍾源
c.直接作為 FCLK時鍾
d.分頻后作為 APB1總線的時鍾 (包括分頻后 作為APB1外設時鍾 也叫做PCLK1 , 分頻后再倍頻作為 APB1總線上定時器的時鍾)
e.分頻后作為 APB2總線的時鍾 (包括分頻后作為APB2外設時鍾 也叫做PCLK2, 分頻后再倍頻作為APB2總線上定時器的時鍾, 以及分頻后再分頻作為ADC的時鍾)
通過上面配置就完成了從 HSE 到 系統主時鍾全部過程的配置, 若板子上面沒有提供外部高速晶振,我們就只有使用內部高速晶振了,其配置過程的原理也是類似的,這里就不再贅述了。
如果項目中還用到了 RTC,IWDG等外設,那就還需要另外配置低速時鍾。至此我們時鍾配置也就基本完成了。。。
另外列舉了一些常用的時鍾配置參數,設計時可以作為參考:
1. STM32F407VETx 選擇 外部高速時鍾 HSE時,需要設置的具體參數

4.工程管理器
最后我們通過工程管理器 Project Manager 來對整個CubeMx工程來進行最后的配置

STM32CubeMX的 Project Manager工程管理器包含:
Project 工程管理、
Code Generator 代碼生成、
Advanced Settings 高級設置。
4.1 Project
Project工程管理包含三部分內容:
Projcet Settings工程設置、
Linker Settings堆棧設置、
Mcu and Firmware Package MCU和固件包信息。

4.1.1 Project Setting
A.Project Name:工程名稱
比如:Demo.uvprojx,以及對應工程里面目標名稱。
B.Project Location:工程存放路徑
這個容易理解。如:D:\Desktop\Test.
C.Application Struture:應用程序結構
這里包含兩個選項:Basic 和 Advanced。
Basic:是基礎的結構,一般不包含中間件(RTOS、文件系統、USB設備等)。
Advanced:相反就是包含中間件,一般針對相對復雜一點的工程。當然,這兩種生成的結構都比較基礎,一般實際項目都會重新整理一遍軟件架構。
D.Toolchain Folder Location:工具鏈文件夾路徑
這個是根據上面Project Name和Project Location得出來的,用戶不能修改。
E.Toolchain/IDE:工具鏈選擇
·EWARM V7 和 V8
·MDK-ARM V4 和 V5
·TrueSTUDIO
·SW4STM32
·Makefile
·其它
4.1.2 Linker Setting

這里的選項一看就明白,主要就是堆和棧大小的設置,默認缺省值:Heap堆為0x200,Stack棧為0x400.
4.1.3 Mcu and Firmware Package (MCU和固件包信息)
這里有三個選項,關於MCU類型和固件包版本信息,一般默認配置。
A.Mcu Reference:MCU參考型號
這個是根據你選擇的MCU型號決定的,用戶不能修改。
B.Firmware Package Name and Version:固件包名稱和版本信息
這個容易理解,如:STM32Cube_FW_F1_V1.7.0
C.Use Default Firmware Location:使用默認固件包
這里勾選上就會根據系統進行默認匹配固件包,一般建議默認。當然,不勾選,可以自己選擇指定固件包。
4.2 Code Generator

如上圖,主要包含四項內容:固件包拷貝、生成文件、HAL設置、模板設置。
4.2.1 STM32Cube Firmware Library Package固件包拷貝
1.Copy all used libraries into the project folder 將所有使用過的庫復制到項目文件夾中
不管你用,還是沒有用到,都拷貝到你工程目錄下。這樣一來,你工程下文件就比較多。
2.Copy only the necessary library files 只復制必要的庫文件。
這個相比上一個減少了很多文件。比如你沒有使用CAN、SPI...等外設,就不會拷貝相關庫文件到你工程下。
3.Add necessary library files as reference in the toolchain project configuration file 在工具鏈項目配置文件中添加必要的庫文件作為參考。
這里沒有復制HAL庫文件,只添加了必要文件(如main.c)。相比上面,沒有Drivers相關文件。
4.2.2 Generated files 生成文件
這里可以多選,每項可選擇:是or不是。
1.Generate peripheral initialization as a pair of'.c/.h' files per peripheral 每個外設生成獨立的'.c/.h'文件
不勾:所有初始化代碼都生成在main.c
勾選:初始化代碼生成在對應的外設文件。 如UART初始化代碼生成在uart.c中。
2.Backup previously generated files when re-generating 在重新生成時備份以前生成的文件
重新生成代碼時,會在相關目錄中生成一個Backup文件夾,將之前源文件拷貝到其中。
3.Keep User Code when re-generating 在重新生成時保留用戶代碼
比如:我在main.c中添加了一段代碼,重新生成時,會在main.c中保留你之前自己添加的這段代碼。
注意:前提是這段代碼寫在規定的位置。也就是BEGIN和END之間。否則同樣會刪除。
4.Delete previously generated files when not re-generated 刪除以前生成,但現在沒有生成的文件
比如:之前生成了spi.c,現在重新配置沒有spi.c,則會刪除之前的spi.c文件
4.2.3 HAL Settings HAL庫設置
1.Set all free pins as analog (to optimize the power consumption) 將所有空閑引腳設置為模擬(以優化功耗)
這個做低功耗產品時這個選項有必要勾選。
2.Enable Full Assert 使能所有斷言
4.2.4 Template Settings模板設置
1.Select a template to generate customized code
選擇一個模板來生成自定義代碼代碼自定義生成模板可以參看最新(V28版)用戶手冊6.3節 Custom code generation內容。
4.3 Advanced Settings
目前暫時只有兩個選項:驅動選擇和調用函數設置

4.3.1 驅動選擇
目前主要就是針對工程中使用到的外設,選擇HAL還是LL驅動(參看上圖)。 提示:目前有些型號MCU的部分外設沒有LL驅動。
4.3.2 調用函數
主要關心后面兩個選項:Not Generate Function Call 和 Visibility (Static)。
a. Not Generate Function Call不生成函數調用
也就是你代碼不調用對應初始化函數。
比如:你GPIO項勾選Not Generate Function Call,你main.c函數中就不會調用MX_GPIO_Init這個函數。
b. Visibility (Static)可見性(靜態)
這個就是初始化代碼聲明為static。
注意:
A.有些選項是是默認值,不能修改。如SystemClock_Config配置不聲明為ststic.
B.使用static是配合上面Code Generator代碼生成章節中Generated files生成文件使用。如果都生成.c .h獨立文件了,就不會生成static了。
