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_GPIOCvoid 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);//初始化GPIOGPIO_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);}
}