想在這紀錄一下我使用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 軟體會出現以下畫面
按了上圖 ACCESS TO MCU SELECTOR 的部分來創建個專案,開完後會出現下圖的選擇MCU/MPU型號的列表。
假設你身邊有ST官方出的開發板可以選擇第二項,以開發板型號做創建專案
我這邊是選擇 STM32F030CC 的 MCU 型號,這邊的話就選擇自己身邊有的開發版 MCU 型號做選擇吧不會影響我這點亮LED的範例,左半邊是根據MCU/MPU的規格去做篩選,選擇好後後會反黑再點右上角的 Start Project 開始專案會出現下列配置函示的介面。
首先要來配置能燒入程式的 IO 口 SWCLK 和 SWDIO
1.點選 SYS
2.點選 Debug Serial Wire 配置燒錄口
3.會顯示兩個角位框框變成綠色
至於下面兩個選項的作用是用來喚醒 MCU 或者讓 MCU 休眠的 IO 口,目前用不到先不選取
再來是選取左邊的 GPIO 選項,對著右邊的 MCU 選擇你要配置 GPIO 的口如下
1.點選GPIO
2.點選你要的IO口就會跳出1個選單,再選你要的功能我這邊是選 PA1 GPIO_Output
選完後中間的介面就會跳出進階的設定,如下圖
可以看到左上方的界面出現了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 裡面如下圖)
要得GPIO口配置好了再來就是開啟RCC,MCU需要震盪才會工作,點開左邊的RCC選項後會看到下圖介面
1.點選RCC
2.可以選擇你想開起的外部時鐘,由於我自己做的開發版我兩個外部時鐘都有焊上去但我這邊只選擇使用外部高速時因震盪
3.顯示這兩個角位配置成外部高速石英震盪
要用的IO口都開好了,再來是 Clock Configuration 也就是時鐘樹(RCC)詳細設置,點選上方的Clock Configuration 如下
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 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 這邊就看個人喜好瞜,後面的版本部分就選最高的就好
這部分預設就好,這牽扯到程式碼的運行速度入門這行先不要去玩這個,這地方會動到.s檔組合語言的部分。
去看官方使用手冊說明看完還是不確定,只看懂使用Keil5、STM32CubeIDE的話勾選 Enble multi-threaded support
這邊就不用動了就直接預設的就好,這邊是在選擇要用HAL庫版本
再來點選左半邊的 Code Generator (代碼生成器),這地方主要是在設定產生代碼的樣子
這裡依個人需求選擇,我個人習慣每個功能函示都有對應的地方居住所以勾選了第1個選項,這有點像是我之前標準庫開發的方式,有興趣的可以再去看看我的鐵人文章,再來是,第2個我不想每次重新生成程式都備份舊的,第3個則是每次產生新文件時不取代掉我原本的打的程式
!! 注意:前提是這段代碼寫在規定的位置。也就是BEGIN和END之間,否則會被刪除。 !!
設定好後就可以按上面的 GENERATE CODE了,按完過一下子就會出現下列這視窗
選擇左邊第1個,開啟專案資料夾
點開MDK-ARM裡面就會看到下圖
點開h01_GPIO專案就可以開始寫程式啦,在main.c這裡打上這4行就可以插上LED於PA1就會閃爍了啦~
假如對上述操作有什麼疑問都歡迎提出來。