STM32 CubeMX學習:1. 點亮LED
系列文章目錄
- 前期的準備
- 點亮 LED
- 閃爍 LED
- 定時器閃爍LED
- PWM控制LED亮度
- 常見的PWM裝置
- 按鍵的外部中斷
- ADC模數轉換
- 序列槽收發
- 序列槽列印遙控器資料
- 未完待續…
文章目錄
- STM32 CubeMX學習:1. 點亮LED
-
- 1.1基礎學習:LED燈基礎知識
- 1.2 程式學習
-
- 1.2.1 CubeMX 配置 GPIO 的基本操作
- 1.2.2 HAL_GPIO_WritePin函數的講解
- 1.1.3 程式流程
- 總結
1.1基礎學習:LED燈基礎知識
1、LED即發光二極管,當LED内有電流通過時會發光,在安全電流範圍内,電流越大,亮度越亮

1.2 程式學習
1.2.1 CubeMX 配置 GPIO 的基本操作
1、我這裡使用正點原子的探索者開發闆,在這塊學習闆上,與LED相連的引腳為PF9和PF10
是以我們需要在之後配置相應的引腳,這裡我對LED燈的點亮原理作簡要的說明啦
如上圖所示我們可以看到,發光二極管的陰極與單片機引腳相連,發光二極管的陽極通過電阻與3.3伏的VCC相連。當單片機的引腳給高電平時,近似于發光二極管兩端沒有電勢差,沒有電流通過,是以發光二極管沒有點亮,相反的如果單片機的引腳給低電平,發光二極管兩端有電勢差,有電流通過,發光二極管可以點亮。
2、下面我們可以在上一篇建立工程的基礎上,在cubeMX中配置GPIO為輸出模式,在cubeMX找到對應引腳,配置成GPIO_Output模式。
首先,搜尋PF9和PF10(這裡以PF9為例進行說明,PF10同理)
選擇引腳模式為輸出模式(Output)
3、在cubeMX中修改對應引腳的名字。
(1)在左側找到System core->GPIO;
(2)找到對應的GPIO,例如PF9;
(3)在下方的配置單中user label填寫命名,填好後會在晶片縮略圖中更新。
如下圖所示
4、生成代碼:點選GENERATE CODE按鍵。
1.2.2 HAL_GPIO_WritePin函數的講解
1、在HAL庫中我們可以找到一個操作GPIO電平的函數:HAL_GPIO_WritePin函數
(1)該函數的作用在于使對應的引腳輸出高電平或者低電平。
(2)該函數傳回值為void,即沒有傳回值
(3)該函數有3個入口參數,可根據自己的需求進行設定
(a)GPIOx—— 對應GPIO總線,其中x可以是A…I。例如PF9,則輸入GPIOF
(b)GPIO_Pin—— 對應引腳數。可以是0-15。例如PF9,則輸入GPIO_PIN_9
(c)PinState—— GPIO_PIN_RESET:輸出低電平;GPIO_PIN_SET:輸出高電平
這裡我們先嘗試将兩個LED同時點亮,
這裡先給大家補充一些關于單片機的小知識:
對于單片機來說,LED燈等可以被稱為是單片機的外設,對于外設的使用,大緻可以按照以下幾個步驟進行。
首先,HAL狀态的初始化,可能包括flash指令緩存、flash資料緩存、flash預讀取緩存、中斷分組優先級、内部時鐘HSI、MCU特定封裝的初始化。
然後,進行系統時鐘的初始化。
接着,對于GPIO初始化。
最後,操作相應的外設完成所需功能。
1.1.3 程式流程
程式經過HAL_Init初始化, GPIO初始化,進入主循環,在主循環中将2個LED引腳均輸出低電平,進而點亮LED燈。主循環代碼如下:
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//set GPIO output low level
//設定GPIO 輸出低電平
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
完整的main函數代碼如下所示
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
//set GPIO output low level
//設定GPIO 輸出低電平
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_9, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_10, GPIO_PIN_RESET);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
然後在keil軟體中編譯代碼并把代碼下載下傳到單片機中,
其中1為編譯按鈕,可以對整個keil工程進行編譯
2為下載下傳按鈕,可以把代碼下載下傳到單片機之中,但是在下載下傳之前,除了要安裝相關的驅動(根據自己的情況分别配置),還需要進行一些設定
首先點選1處的“魔術棒”,然後點選2處進入debug設定,在3處選擇自己的調試器,常見的調試器有ST-Link和J-Link等,大家可以自行查詢一下這些調試器的差別,這裡不做過多的介紹。在4處,我們可以看到一串位址,說明調試器已經成功連接配接到電腦。
然後點選1處的“Flash Download”,按照2處進行勾選,不過注意,其中“Reset and Run”代表一旦代碼下載下傳到單片機中立刻開始運作程式,這裡要根據自己的需要靈活的進行設定。這樣我們就完成關于下載下傳的一些設定。
最後我們可以看到工程運作效果如圖所示
可以看到“TFTLCD”下的兩個LED燈已經被點亮,達到了我們預期的效果
代碼我已經放到了我的GitHub倉庫,如有需要可以下載下傳使用:
CubeMX學習
總結
GPIO輸出操作是STM32中最基礎的操作啦,通過高低電平的控制完成類似開關的控制,而高電平則對應了計算機中的數字1,而低電平對應了計算機中的數字0,高低電平的不斷變化,對應計算機内部的數字變化,STM32便是這樣輸出信号給外部世界的啦。 從此媽媽再也不用擔心我的點燈啦,大家給自己點個贊,學習單片機還要再接再厲哦!