1.硬件设计
LED1的阴极接到了PC13引脚上,我们控制PC13引脚的电平输出状态,即可控制LED1的亮灭。
2.编程要点
- 使能GPIO端口时钟;
- 初始化GPIO目标引脚为推挽输出模式;
- 编写简单测试程序,控制GPIO引脚输出高、低电平。
查看手册发现,PC13引脚在AHB1总线上,所以,使能时钟的时候应该是AHB1总线。
3.源码
bsp_led.h
#ifndef __BSP_LED_H
#define __BSP_LED_H
#ifdef __cplusplus
extern "C"{
#endif
#include "stm32f4xx.h"
#define LED1_PIN GPIO_Pin_13
#define LED1_GPIO_Port GPIOC
#define LED1_GPIO_CLK RCC_AHB1Periph_GPIOC
void Init_LED(void);
void LED_ON(void);
void LED_OFF(void);
#ifdef __cplusplus
}
#endif
#endif
bsp_led.c
#include "bsp_led.h"
void Init_LED(void)
{
//使能GPIO时钟
RCC_AHB1PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
//初始化GPIO
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=LED1_PIN;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Fast_Speed;
GPIO_Init(LED1_GPIO_Port,&GPIO_InitStruct);
}
void LED_ON(void)
{
GPIO_ResetBits(LED1_GPIO_Port,LED1_PIN);
}
void LED_OFF(void)
{
GPIO_SetBits(LED1_GPIO_Port,LED1_PIN);
}
在USER目录中增加LED文件夹,并新增驱动文件
然后,还需要在keil的USER组文件夹中添加源文件,同时还需要添加头文件目录。
最后,在main函数中调用驱动接口,就会发现LED等在闪烁。
#include "bsp_led.h"
void delay(uint32_t cnt)
{
while(cnt--);
}
int main(void)
{
Init_LED();
/* Infinite loop */
while (1)
{
LED_ON();
delay(0xFFFFFF);
LED_OFF();
delay(0xFFFFFF);
}
}