文章目錄
- 前言
- 建構步驟
- 實驗結果
前言
本篇承接<STM32F429第一篇之建立一個HAL庫模闆工程>。實作模闆工程的應用,主要參考資料:
- 正點原子.STM32F429開發指南——HAL庫版本
建構步驟
- 通過參考上一篇文章,建立一個HAL庫模闆工程。如下圖所示:

- 在 Template 檔案夾中,新進 hardware 檔案夾。如下圖所示:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 将 Template 檔案夾名稱改成LED.
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 定位到 \LED\user 。删除掉多餘的檔案,剩餘:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 将三個檔案名為 Template 的檔案 全部修改名稱為:LED。如下圖所示:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 輕按兩下 LED.uvprojx 檔案,打開項目:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 點選 Manage Project Items 按鈕,如下圖所示:
8. 作如下圖修改:
- 在HARDWARE處右擊,選擇 Add New Item to Group ‘HARDWARE’.
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 選擇C File,名稱為led,位置選擇在hardware檔案夾,最後點選 Add 。如下圖所示: 注意:位置不是預設的user檔案夾
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 類似的,建立led的頭檔案。如下圖所示:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 添加頭檔案到工程,如下圖所示:
STM32F429第三篇之GPIO的模闆工程建構前言建構步驟實驗結果 - 編寫LED初始化檔案:
頭檔案:
#ifndef _LED_H
#define _LED_H
extern void LED_Init(void);
#endif
c檔案:
#include "led.h"
#include "stm32f4xx.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOB_CLK_ENABLE(); //開啟GPIOB時鐘
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽輸出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0置1,預設初始化後燈滅
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1置1,預設初始化後燈滅
}
- 編寫main.c檔案
#include "sys.h"
#include "delay.h"
#include "led.h"
int main(void)
{
HAL_Init(); //初始化HAL庫
Stm32_Clock_Init(360,25,2,8); //設定時鐘,180Mhz
delay_init(180); //初始化延時函數
LED_Init(); //初始化LED
while(1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //LED0對應引腳PB1拉低,亮,等同于LED0(0)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //LED1對應引腳PB0拉高,滅,等同于LED1(1)
delay_ms(500); //延時500ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //LED0對應引腳PB1拉高,滅,等同于LED0(1)
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //LED1對應引腳PB0拉低,亮,等同于LED1(0)
delay_ms(500); //延時500ms
}
}
- 編譯下載下傳。
實驗結果
兩個LED燈,同時閃爍,周期為1s。如下圖所示。