1本节从调用固件库来点亮LED灯;使用的是指南者的板子,选择的KEIL5编辑,
一,构建文件库并将相应的文件导入;
创建文件,加入相应的文件库 工程创建完毕,这里不会可以在网上下载一个工程,把需要的复制过来再导入就可以了!
二,逻辑
导入相关文件后开始书写,确保.h的文件导入
1,为了文件的调用重复采用,采用条件编译
#ifndef _BSP_LED_H
#define _BSP_LED_H#endif
2.操作LED灯,操作其GPIO LED_GRIO_Config()初始化
添加要控制的参数,引脚(Pin),模式,速度;
做好在头文件里面的宏定义;
调用一个初始化函数,将三个值写道CRL寄存器里面;
3,打开时钟,时钟是我们的心脏
可以看到这里的时钟RCC在APB2 上面是由端口的 GPIOB,所以操作GPIOB及”使能“
4,初始化函数,操作ODR,查找GPIO.C文件调用SetBits和ResetBits控制灯光的关灭;
5,采用了一个延世函数,让灯光闪烁,亮起来不枯燥!
三,实际代码
1,bsp_led.c文件,相关的GPIO函数,都是在固件库里面查找使用的!
//bsp:board suport package 板机支持包
#include "bsp_led.h" void LED_GPIO_Config(void)//初始化GPIO
{GPIO_InitTypeDef GPIO_InitStruct;//初始化结构体//开时钟 RCCRCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);//ENABLE 使能GPIO_InitStruct.GPIO_Pin= LED_G_GPIO_PIN ;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;//通用推挽输出GPIO_InitStruct.GPIO_Speed= GPIO_Speed_50MHz;//速度 50MHZGPIO_Init(LED_G_GPIO_PORT,&GPIO_InitStruct);//初始化 端口 初始化的结构体(变量指针取地址)}
2,bes_led.h文件
#ifndef _BSP_LED_H
#define _BSP_LED_H#include "stm32f10x.h"#define LED_G_GPIO_PIN GPIO_Pin_0 //GREEN 灯
#define LED_G_GPIO_PORT GPIOB //端口
#define LED_G_GPIO_CLK RCC_APB2Periph_GPIOB#define ON 1
#define OFF 0#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 );void LED_GPIO_Config(void);#endif /*_BSP_LED_H*/
3.main.c文件
#include "stm32f10x.h" // 相当于51单片机中的 #include <reg51.h>#include"bsp_led.h"void Delay(uint32_t count)
{for(;count!=0;count--);
}
int main(void)
{// 来到这里的时候,系统的时钟已经被配置成72M。LED_GPIO_Config();while(1){//GPIO_SetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN );//灭LED_G(OFF); //带参宏Delay(0xFFFFF);//GPIO_ResetBits(LED_G_GPIO_PORT, LED_G_GPIO_PIN );//亮LED_G(ON);Delay(0xFFFFF);}
}
运行成功!!
附加:流水灯
1.流水灯就是使灯在灯闪烁时,亮起来不同的颜色,三基色RGB,这里只需要定义另外两个灯的引脚和条件,依次亮起来就可以了,也可以使同一时间,两个或者三个都打开,产生更多的颜色,增加趣味性!