GPIO输出——使用固件库点亮LED灯
- stepI: User中新建bsp_led.c,.h并添加到 K e i l 工程中 \textbf{stepI:}\text{User}中新建\text{bsp\_led.c,.h}并添加到Keil工程中 stepI:User中新建bsp_led.c,.h并添加到Keil工程中
- stepII: 定义bsp_led.h \textbf{stepII:}定义\text{bsp\_led.h} stepII:定义bsp_led.h
- stepIII: 定义bsp_led.c , 外设初始化 \textbf{stepIII:}定义\text{bsp\_led.c},外设初始化 stepIII:定义bsp_led.c,外设初始化
- stepIV: 填充main.c \textbf{stepIV:}填充\text{main.c} stepIV:填充main.c
从上一节已经新建好的固件库开始编写
stepI: User中新建bsp_led.c,.h并添加到 K e i l 工程中 \textbf{stepI:}\text{User}中新建\text{bsp\_led.c,.h}并添加到Keil工程中 stepI:User中新建bsp_led.c,.h并添加到Keil工程中
bsp:board support package 板级支持包
stepII: 定义bsp_led.h \textbf{stepII:}定义\text{bsp\_led.h} stepII:定义bsp_led.h
注意: \textcolor{red}{\small 注意:} 注意:
#ifndef _BSP_LED_H //注意要有这两句话防止重复定义
#define _BSP_LED_H //注意要有则两句话防止重复定义
...
#endif
stepIII: 定义bsp_led.c , 外设初始化 \textbf{stepIII:}定义\text{bsp\_led.c},外设初始化 stepIII:定义bsp_led.c,外设初始化
外设初始化四步:
- 打开GPIO时钟
- 定义一个GPIO初始化结构体
- 配置GPIO初始化结构体成员
- 调用GPIO初始化函数,将配置好的结构体成员参数写入寄存器
void LED_GPIO_Config(void){
///以下四步适合所有外设初始化///
/*第一步:打开GPIO时钟*/
//由于GPIO外设都接在AHB1上,AHB1时钟在RCC上
//所以找到stm32f4xx_rcc.h和stm32f4xx_rcc.c文件
//找到对应函数
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
/*第二步:定义一个GPIO初始化结构体*/
//找到stm32f4xx_gpio.h文件
//0.找到对应的初始化结构体
GPIO_InitTypeDef GPIO_InitStruct;
/*第三步:配置GPIO初始化结构体成员*/
//1.配置结构体中的成员:PF6
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6;
//2.配置模式:输出模式
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
//3.配置输出类型:推挽
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
//4.配置输出电平:上拉
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
/*第四步:调用GPIO初始化函数,将配置好的结构体成员参数写入寄存器*/
GPIO_Init(GPIOF, &GPIO_InitStruct);
GPIO_ResetBits(GPIOF, GPIO_Pin_6);
}
代码在bsp_led.c
中定义,在bsp_led.h
中引用
# ifndef _BSP_LED_H//注意要有这两句话防止重复定义
#define _BSP_LED_H//注意要有这两句话防止重复定义
#include "bsp_led.h"
#include "stm32f4xx_rcc.h"
#include "stm32f4xx_gpio.h"
void LED_GPIO_Config(void);
#endif /*_BSP_LED_H*/
stepIV: 填充main.c \textbf{stepIV:}填充\text{main.c} stepIV:填充main.c
#include "stm32f4xx.h"
#include "./LED/bsp_led.h"//注意这个路径
//软件延时
void Delay(uint32_t count){
for(;count!=0;count--);
}
int main(void){
LED_GPIO_Config();
while(1){//闪烁效果
GPIO_ResetBits(GPIOF, GPIO_Pin_6);
Delay(0xffffff);
GPIO_SetBits(GPIOF, GPIO_Pin_6);
Delay(0xffffff);
}
}
注意调用时"./LED/bsp_led.h"路径