目录
条件
1—打开GPIO对应的时钟
3—配置输出速度
4—选择要控制的GPIO引脚
5—调用库函数,初始化GPIO
6—封装
封装目的
编程升级
注意:
LED所在的引脚输出电平,从而控制灯的亮灭。
对于STM32来说,原理也是一样的,就是更加的复杂一点,这也是保证了STM32的稳定性。
RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
开启LED的引脚时钟,我这里的是使用了宏定义
#define LED_GPIO_CLK RCC_APB2Periph_GPIOB
2—配置GPIO模式
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP ;
模式有好多种,各种用法有自己的特色,所以这个模式一定要选对,否则无法工作或程序出现错误。
浮空输入 GPIO_Mode_IN_FLOATING
上拉 GPIO_Mode_IPU
下拉 GPIO_Mode_IPD
模拟输入 GPIO_Mode_AIN
开漏输出 GPIO_Mode_AF_OD
开漏复用 GPIO_Mode_AF_OD
推挽式输出 GPIO_Mode_Out_PP
推挽式复用功能 GPIO_Mode_AF_PP
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz ;
速度可以根据自己需要来配置,不过一般都按最快来配置。
#define LED_GREEN_PIN GPIO_Pin_0
#define LED_RED_PIN GPIO_Pin_5
#define LED_YELLOW_PIN GPIO_Pin_1GPIO_InitStruct.GPIO_Pin=LED_RED_PIN|LED_GREEN_PIN|LED_YELLOW_PIN;
根据自己想要的颜色选择,也可以多种颜色组合成炫酷的灯光效果。
#define LED_PORT GPIOB
GPIO_Init(LED_PORT,&GPIO_InitStruct);
使用方法:把上述代码放在main()函数即可,当然为了使代码以后更加简便,我们对代码进行了封装。
头文件:
#define LED_GPIO_CLK RCC_APB2Periph_GPIOB
#define LED_GREEN_PIN GPIO_Pin_0
#define LED_PORT GPIOB
#define LED_RED_PIN GPIO_Pin_5
#define LED_YELLOW_PIN GPIO_Pin_1
函数
void LED_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_APB2PeriphClockCmd(LED_GPIO_CLK,ENABLE);
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP ;
GPIO_InitStruct.GPIO_Pin=LED_RED_PIN|LED_GREEN_PIN|LED_YELLOW_PIN;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz ;
GPIO_Init(LED_PORT,&GPIO_InitStruct);
}
提高代码的可读性,以及使得主函数main()更加的简便;
之前的代码也不是很好的实现我们想要的颜色,那么为了更好的操作,我们再次多源代码进行封装。
#define ON 1
#define OFF 0
#define LED_GREEN(a) if(a)\
{GPIO_ResetBits(LED_PORT,LED_GREEN_PIN);}\
else\
{GPIO_SetBits(LED_PORT,LED_GREEN_PIN);}
#define LED_RED(a) if(a)\
{GPIO_ResetBits(LED_PORT,LED_RED_PIN);}\
else\
{GPIO_SetBits(LED_PORT,LED_RED_PIN);}
#define LED_YELLOW(a) if(a)\
{GPIO_ResetBits(LED_PORT,LED_YELLOW_PIN);}\
else\
{GPIO_SetBits(LED_PORT,LED_YELLOW_PIN);}
在宏定义里面是不能直接使用回车换行的,这样会出现问题。那是不是只能一行写到底呢?
肯定不是的,为了美观,大家可以在最后加上一个符号\,这样就可以再使用回车换行了,但是在符号\的后面不能有任何的东西,这是一个值得注意的问题。
//打开灯
#define LED_G {LED_GREEN(ON);LED_RED(OFF);LED_YELLOW(OFF);}
#define LED_R {LED_GREEN(OFF);LED_RED(ON);LED_YELLOW(OFF);}
#define LED_Y {LED_GREEN(OFF);LED_RED(OFF);LED_YELLOW(ON);}
在头文件里面是有宏定义的方法来使得函数更加简便,这样我们只需要调用LED_GREEN(ON)就可以点亮一个属于自己颜色。