利用固件库点亮LED灯
- 新建工程模板
利用固件库新建工程模板和之前记录的利用寄存器的不同,所以在这里进行记录说明。
首先新建一个空的文件夹,用来放固件库的资料,在空的文件夹中新建下面图上的几个文件夹。其中Doc文件夹用来放关于本程序的说明,Libraries文件夹用来存放固件库中的启动文件和外设有关的文件,Project文件夹中存放的是工程文件,User文件夹中存放的是有关于用户编写的文件和系统文件,具体如下所示:
Doc文件夹
Libraries文件夹
CMSIS文件
外设文件夹
User文件夹
到这里文件夹已经建设完成,下一步就是新建工程,然后在工程中把我们已经新建好的.c文件加入到工程中。
加下来我们在配置头文件的路径,让文件读取到.h文件
进行相应的宏定义。
到这里新建固件库的工程才算结束,可以进行代码的编写了. - 代码,下面的代码是实现,点亮LED灯的代码
//初始化GPIO
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
}
int main(void)
{
LED_GPIO_Config();
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
- 使用宏定义的方式进行改正,这样变换外设的时候就可以只修改宏定义。
- 在下面的这段代码中,我们把引脚连接的PB0用宏定义的形式进行了重命名。
//绿灯
#define LED_G_GPIO_Pin GPIO_Pin_0
#define LED_G_GPIO_PORT GPIOB
#define LED_G_GPIO_CLOCK RCC_APB2Periph_GPIOB
这段代码中我们宏定义了一个常量,用来控制LED的开关。
#define ON 1
#define OFF 0
//LED_G(ON)代表绿灯亮,LED_G(OFF)代表绿灯灭
#define LED_G(a) if (a)\
GPIO_ResetBits(LED_G_GPIO_PORT,LED_G_GPIO_Pin);\
else \
GPIO_SetBits(LED_G_GPIO_PORT,LED_G_GPIO_Pin);
用宏定义的方式用来实现那个灯被点亮
#define LED_RED LED_G(OFF);LED_B(OFF) LED_R(ON)
#define LED_GREEN LED_G(ON);LED_B(OFF) LED_R(OFF)
#define LED_BLUE LED_G(OFF);LED_B(ON) LED_R(OFF)
这样就可以在程序中用简单的代码实现LED灯的循环点亮。
int main(void)
{
LED_GPIO_Config();
while(1)
{
LED_RED;
delay(10000000);
LED_GREEN;
delay(10000000);
LED_BLUE;
delay(10000000);
}
}