簡介
這篇文章介紹如何使用CubeMx建立一個簡單的LED工程,該工程是一個MDK工程,當然也可以使用CubeMx建立基于其他編譯器的工程。作為入門,我們的第一個工程僅點亮一個LED。并且在這個工程上進行修改,增加一個按鍵功能,展示CubeMx修改工程的功能。
硬體準備
筆者使用正點原子戰艦V3開發闆,使用任何主要是STM32的硬體裝置并且帶有GPIO控制的LED和按鍵,就可以,硬體上沒有什麼限制。
軟體準備
- STM32CubeMx
- Keil MDK,IAR或類似的編譯環境
實際操作部分
1.生成工程,并點亮LED
2.修改現有工程,将GPIO輸入功能,也就是按鍵功能加入工程
第一部分 建立工程點亮LED
打開CubeMx,選擇ACCESS TO SELECTOR
剛安裝好第一次點選會進入一個加載頁面,他是連結官網更新晶片庫的,如果加載時間過長,也可以關閉加載頁面,也能直接進入我們下一步要操作的頁面
在右上方選擇你的硬體裝置搭載的晶片,然後在左下方選擇你要用的晶片并輕按兩下進入下一個頁面。
可以通過界面發現,CubeMx工程的配置步驟非常清晰,從左到右分别為引腳與外設配置,時鐘樹配置,工程相關配置。從上到下也是系統核心功能到外設的配置。最右方的區域用圖形化的方式配置相關的引腳。
1.第一步需要配置時鐘源,我在這裡選用外部晶振作為外部時鐘源。左側選擇後,右側會自動選擇外部時鐘源要用的引腳
2.根據硬體選擇LED使用的引腳,找到pcb的原理圖
我使用LED1,發現他的引腳是E5,在CubeMx右方相應位置,左鍵選擇
3.在左方選擇GPIO,進行詳細配置
User Label可以自己為這個引腳命名,到時候這個命名會出現在代碼中易于操作
4.引腳配置完了,接下來配置時鐘樹
時鐘頻率,f103zet6最高為72Mhz,通過配置,最後使APB外設的時鐘頻率達到最高就可以了
5.配置工程相關
有兩個地方要注意,生成工程的路徑不能有中文,生成的IDE版本要正确,我這裡選擇的是MDK5.
6.配置完這些步驟後就可以點選GENERATE CODE生成工程了
7.打開工程
/* Exported functions prototypes ---------------------------------------------*/
void Error_Handler(void);
/* USER CODE BEGIN EFP */
/* USER CODE END EFP */
/* Private defines -----------------------------------------------------------*/
#define LED1_Pin GPIO_PIN_5
#define LED1_GPIO_Port GPIOE
/* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */
會發現main.h裡自動生成了宏定義,到時候可以通過宏定義操作LED
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
HAL_Delay(200);
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
/* USER CODE END 3 */
在main.c裡編寫代碼如上,下載下傳程式到硬體上(下載下傳方式自行決定),就可以看到一個閃爍的LED
第二部分,修改工程增加按鍵
1.在首頁面打開剛剛生成的工程
2.根據原理圖選擇相應的引腳,我這裡用的是KEY0
在工程中選擇E4引腳
由原理圖可知,按鍵應該上拉,按鍵的配置如圖所示,然後直接點選generate code并打開工程就行了
3.我們會發現原來使用者的代碼還在,但是CubeMx自動生成了GPIO輸入的初始化代碼,這樣我們隻用關心真正的應用代碼部分就可以了。
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if( 0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
{
HAL_Delay(100);
if( 0 == HAL_GPIO_ReadPin(KEY0_GPIO_Port,KEY0_Pin))
{
HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
}
}
}
/* USER CODE END 3 */
}
使用以上代碼,編譯下載下傳到硬體中,就可以看到LED随按鍵的按下而亮滅
總結
這部分内容具體使用了CubeMx建立工程,并初步展示了CubeMx修改工程元件的能力,CubeMx不僅可以添加功能,而且可以更改工程使用的晶片等等。而這些操作都是不會破壞使用者層的代碼的,這就是CubeMx的強大之處.下一部分我會展示使用CubeMx配置序列槽功能,并使用GPIO外部中斷完成按鍵功能。