固件库点亮LED
前提条件 建立一个固件库工程模板可以参考以下博客
https://blog.csdn.net/cainaiolin/article/details/52012786
硬件基础
我的开发板上面一共有三个led灯 我选择点亮PB5这个灯
话不多说看代码:新建一个文件名字为“bsp_led.h”
BoardSupport Packet 的缩写(板级支持包) 多用在用户自己定义的文件中
#ifndef __BSP_LED_H
#define __BSP_LED_H
//R红色的灯
/*-----LED 灯的 GPIO 端口、GPIO 引脚号以及 GPIO 端口时钟----*/
#define LED1_GPIO_PORT GPIOB
#define LED1_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED1_GPIO_PIN GPIO_Pin_5
/*直接操作寄存器的方法控制IO*/
#define digitalHi(p,i) {p->BSRR = i;} //输出高电平
#define digitalLo(p,i) {p->BRR = i;} //输出为低电平
#define digitalToggle(p,i) {p->ODR ^= i;} //输出为反正状态 异或
/*定义控制IO的宏*/
#define LED1_TOGGLE digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)
/*LED_GPIO初始化函数*/
void LED_GPIO_Config(void)
{
/*定义一个GPIO_InitTypeDef类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
/*开启LED的相关GPIO外设时钟*/
RCC_APB2PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
/*选择需要控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
/*设置引脚的模式为通用推挽输出模式*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
/*设置输出的速率为50MHz*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
/*选择需要控制的引脚*/
GPIO_InitStructure.GPIO_Pin = LED1_GPIO_PIN;
/*调用GPIO_Init函数初始化GPIO端口*/
GPIO_Init(LED1_GPIO_PORT,&GPIO_InitStructure);
/*关闭所有灯*/
GPIO_SetBits(LED1_GPIO_PORT, LED1_GPIO_PIN);
}
#endif
LED_GPIO_Config 初始化函数步骤解读
1.定义一个GPIO_InitTypeDef类型的变量,这个结构体中包含三个变量uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode
分别设置管脚,输出速率,模式选择。
2.开启相关的GPIO口的时钟
3.对GPIO_InitTypeDef类型的的变量进行赋值
4.调用GPIO_Init函数对GPIO端口进行初始化
5.LED默认是关闭的
主函数:main
#include"stm32f10x.h"
#include"bsp_led.h"
/*
*@brief Main program
*@param None
*@retval Nane
*/
int main(void)
{
LED_GPIO_Config();
while(1)
{
LED1_ON ;
}
}