iT邦幫忙

2021 iThome 鐵人賽

3
Arm Platforms

基於ARM-M0架構MCU之落摔檢測韌體開發系列 第 33

STM32CubeMX專案配置詳細教學,點亮LED

  • 分享至 

  • xImage
  •  

想在這紀錄一下我使用STM32CubeMX的經驗適合完全沒用過的人,已經有開發經驗的就不用看了,我第一次使用STM32CubeMX來開發我自己做的開發版,在一開始我都是使用STM32標準庫的方式做開發,有興趣的可以看到我第13屆鐵人賽:https://ithelp.ithome.com.tw/users/20141979/ironman/4820

很幸運得了 [Arm Platforms] 類組的優選,我在文章有提到標準庫開發和STM32CubeMX的HAL、LL庫開發的差異STM32的開發生態,Cube、HAL庫、LL庫,這邊就不重複說這些的差別了,總之學標準庫會讓你對嵌入式單晶片這塊領域更有Sense,基本的學完後再來去深入探討進階功能。

從標準庫銜接到HAL庫使用上沒遇到甚麼問題,學過標準庫過後再去碰STM32CubeMX所產生出來的配置專案完全不覺得陌生,在我眼裡只是標準庫刪掉一堆功能函示作精簡的版本。

STM32CubeMX的安裝我就不描述了,直接從建立1個新的專案GPIO點亮LED開始,首先點開來 STM32CubeMX 軟體會出現以下畫面
https://ithelp.ithome.com.tw/upload/images/20220214/20141979mOe3xv5J4U.png

按了上圖 ACCESS TO MCU SELECTOR 的部分來創建個專案,開完後會出現下圖的選擇MCU/MPU型號的列表。
假設你身邊有ST官方出的開發板可以選擇第二項,以開發板型號做創建專案

https://ithelp.ithome.com.tw/upload/images/20220214/20141979nv36rlgFJb.png

我這邊是選擇 STM32F030CC 的 MCU 型號,這邊的話就選擇自己身邊有的開發版 MCU 型號做選擇吧不會影響我這點亮LED的範例,左半邊是根據MCU/MPU的規格去做篩選,選擇好後後會反黑再點右上角的 Start Project 開始專案會出現下列配置函示的介面。

https://ithelp.ithome.com.tw/upload/images/20220214/20141979fmV2B33uuO.png

首先要來配置能燒入程式的 IO 口 SWCLK 和 SWDIO
1.點選 SYS
2.點選 Debug Serial Wire 配置燒錄口
3.會顯示兩個角位框框變成綠色
至於下面兩個選項的作用是用來喚醒 MCU 或者讓 MCU 休眠的 IO 口,目前用不到先不選取

再來是選取左邊的 GPIO 選項,對著右邊的 MCU 選擇你要配置 GPIO 的口如下
https://ithelp.ithome.com.tw/upload/images/20220214/20141979YHO4LzsCOx.png

1.點選GPIO
2.點選你要的IO口就會跳出1個選單,再選你要的功能我這邊是選 PA1 GPIO_Output

選完後中間的介面就會跳出進階的設定,如下圖
https://ithelp.ithome.com.tw/upload/images/20220214/201419793AWn2qMAMS.png

可以看到左上方的界面出現了1個 PA1 還有一排的規格,下方則是 PA1 的初始化
1.GPIO output level (GPIO 口默認狀態,可配置為 High 和 Low)
2.GPIO mode (GPIO 口的模式,可配置成 Output Push Pull 和 Output Open Drain)
(至於這模式的差別我在之前的文章有提到了:GPIO口的八種模式)
3.GPIO Pull-up/Pull-down(GPIO 口內部上拉VDD或下拉GND還有不上拉和不下拉)
4.Maximum output speed (GPIO 口的輸出速度可以配置為高速、中速、低速,實際的數值可以查看參考手冊的GPIO章節)
5.User Label (這是定義這個IO口名稱的宏定義 #define,例如我打 LED_TEST 的話則會再 MCU 介面出現註解的感覺,程式碼部分則會在最後產生專案裡的 main.h 裡面如下圖)

https://ithelp.ithome.com.tw/upload/images/20220214/201419798N65rjqTse.png

要得GPIO口配置好了再來就是開啟RCC,MCU需要震盪才會工作,點開左邊的RCC選項後會看到下圖介面

https://ithelp.ithome.com.tw/upload/images/20220214/20141979Y0ebLiEORe.png
1.點選RCC
2.可以選擇你想開起的外部時鐘,由於我自己做的開發版我兩個外部時鐘都有焊上去但我這邊只選擇使用外部高速時因震盪
3.顯示這兩個角位配置成外部高速石英震盪

Clock Configuration

要用的IO口都開好了,再來是 Clock Configuration 也就是時鐘樹(RCC)詳細設置,點選上方的Clock Configuration 如下

https://ithelp.ithome.com.tw/upload/images/20220214/201419791o7pMuALFB.png

1.點選上方的 Clock Configuration 進入配置時鐘樹
2.設定外部石英震盪速度這邊可以看到4-32代表說你只能掛這範圍的石英,這邊就根據各位的開發版的來決定。
3.經過PLL數據多工器來選擇要使用HSE還是HSI,這邊我選擇HSE
4.這邊我選擇6倍頻是因為我想讓這顆MCU達到最高工作頻率48MHz,每顆mcu能工作的頻率不一樣,還有很重要的一點再高階一點的MCU些IO口的最高工作頻率也會不同喔,要看 Datasheet 裡的說明,假如我這邊調7框框會變紅色提示你錯誤配置
5.系統的 Clock 來源這邊我選擇PLLCLK
6.看到最後 PCLK1 的 APB1 的總線速度為48MHz,看這裡的原因是APB1為GPIO口上的控制線

Project Manager

再來是要創造專案的設定,點選上方的 Project Manager

https://ithelp.ithome.com.tw/upload/images/20220214/20141979HZIBpWbZpD.png

1.Project Settings (專案設置)

Project Name :專案名稱,這邊我設置h01_GPIO (不要設置中文)
Project Location :專案要放的路徑,這邊我選擇D槽創建1個STM32CubeMXLib的空資料夾
Application Struture:應用程式的結構,這裏包含兩個選項Basic:是基礎的結構,一般不包含中間件(RTOS、文件系統、USB設備等),Advanced:相反就是包含中間件,一般針對相對複雜一點的工程。這邊我們就設定基本(Basic)模式就好。
Toolchain Folder Location:這會在 Project Location 專案路徑上建立資料夾,名稱為 Project Name
Toolchain/IDE:這邊是選擇你要用的編譯軟體,這邊我選擇 MDK-ARM 是用Keil5,我比較習慣 Keil5 這邊就看個人喜好瞜,後面的版本部分就選最高的就好

2.Linker Settings (堆棧設置)

這部分預設就好,這牽扯到程式碼的運行速度入門這行先不要去玩這個,這地方會動到.s檔組合語言的部分。

3.Thread-safe Settings

去看官方使用手冊說明看完還是不確定,只看懂使用Keil5、STM32CubeIDE的話勾選 Enble multi-threaded support

4.Mcu and Firmware Package

這邊就不用動了就直接預設的就好,這邊是在選擇要用HAL庫版本

Code Generator

再來點選左半邊的 Code Generator (代碼生成器),這地方主要是在設定產生代碼的樣子

https://ithelp.ithome.com.tw/upload/images/20220214/20141979afJEFzg4Gv.png

1.STM32Cube MCU packages and embedded software packs

  • Copy all used libraries into the project folder - 將所有使用過的庫複製到項目文件夾中
    這地方可以勾起來,這樣工程才會包含所有基本的功能庫,方便查看各個功能有甚麼樣的函示
  • Copy only the necessary library files - 只複製必要的庫文件
    假如你沒有使用CAN、SPI、I2C等外設功能,就不會新增相關庫文件到你工程下。
  • Add necessary library files as reference in the toolchain project configuration file - 在工具鏈項目配置文件中添加必要的庫文件作爲參考
    這個勾選的話就不會HAL庫的驅動文件只會有最基本配置初始函示,例如我要點亮1個LED的話勾選了這個選項我就要自己寫操作暫存器來賦予值,有點像是暫存器開發,我覺得剛開始練習就勾1個就好,這樣能快速練習一些基本功能。

2.Generated files (生成文件)

這裡依個人需求選擇,我個人習慣每個功能函示都有對應的地方居住所以勾選了第1個選項,這有點像是我之前標準庫開發的方式,有興趣的可以再去看看我的鐵人文章,再來是,第2個我不想每次重新生成程式都備份舊的,第3個則是每次產生新文件時不取代掉我原本的打的程式

  • Generate peripheral initialization as a pair of'.c/.h' files per peripheral - 每個外設生成獨立的'.c/.h'文件
    不勾:所有初始化代碼都生成在main.c
    勾選:初始化代碼生成在對應的外設文件。 如UART初始化代碼生成在uart.c中。
  • Backup previously generated files when re-generating - 在重新生成時備份以前生成的文件
    重新生成代碼時,會在相關目錄中生成一個Backup文件夾,將之前源文件拷貝到其中。
  • Keep User Code when re-generating - 在重新生成時保留用戶代碼
    在main.c中添加了一段代碼,重新生成時,會在main.c中保留你之前自己添加的這段代碼。
    !! 注意:前提是這段代碼寫在規定的位置。也就是BEGIN和END之間,否則會被刪除。 !!
  • Delete previously generated files when not re-generated - 刪除以前生成,但現在沒有生成的文件
    假設之前生成了i2c.c,現在重新配置沒有i2c.c,則會刪除之前的i2c.c文件。

3.HAL Settings (HAL庫設置)

  • Set all free pins as analog (to optimize the power consumption)
    將所有空閒引腳設置爲類比輸入,做低功耗產品時這個選項有必要勾選。
  • nable Full Assert
    使能所有斷言,作為參數檢查。
  • Template Settings
    模板設置這邊預設就好,有興趣的可以參考最新用戶手冊6節 Custom code generation 內容。

Advanced Settings

https://ithelp.ithome.com.tw/upload/images/20220214/20141979rvbV8rxndT.png

  • Driver Selector - 主要是選擇要用什麼庫做驅動,HAL庫、LL庫這兩個差別我在之前的文章有做解釋這邊就不在描述了。
  • Generated Function Calls - 調用函數
    主要後面兩個選項:Not Generate Function Call和Visibility (Static)
    1.Do Not Generate Function Call不生成函數調用
    也就是你代碼不調用對應初始化函數。
    比如:你GPIO項勾選Do Not Generate Function Call,你main.c函數中就不會調用MX_GPIO_Init這個函數。
    這邊我是選擇要調用。

設定好後就可以按上面的 GENERATE CODE了,按完過一下子就會出現下列這視窗
https://ithelp.ithome.com.tw/upload/images/20220214/20141979w0RqKjPwr5.png
選擇左邊第1個,開啟專案資料夾

https://ithelp.ithome.com.tw/upload/images/20220214/20141979ROB0zOjJWH.png
點開MDK-ARM裡面就會看到下圖
https://ithelp.ithome.com.tw/upload/images/20220214/20141979DuRrzXmnWK.png
點開h01_GPIO專案就可以開始寫程式啦,在main.c這裡打上這4行就可以插上LED於PA1就會閃爍了啦~

假如對上述操作有什麼疑問都歡迎提出來。


上一篇
STM32的開發生態,Cube、HAL庫、LL庫
下一篇
送件電路板的流程分享
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言