文章目录
- 前言
- 构建步骤
- 实验结果
前言
本篇承接<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。如下图所示。