1周1:库函数点亮LED灯
代码以及注释:
红灯——PC5; 蓝灯——PB2;
Main()
{
// GPIO_InitTypeDef 这个结构体是用来给GPIO端口来初始化的,包含了
Pin值,MODE,Speed这三个属性。
举例:
GPIO_InitTypeDef B,
这个B就是个结构体了,有3个属性。
定义了结构体随着就要给结构体赋值
B.GPIO_Pin = GPIO_Pin_2;(蓝灯就为2,红灯为5)
B.GPIO_Speed = GPIO_Speed_50MHz;(50Mhz速率)
B.GPIO_Mode = GPIO_Mode_Out_PP;(通用推挽输出模式)
结构体赋值完成后,就要进行初始化
GPIO_Init(GPIOB,& B);
此处有两个参数,第一个为GPIO的端口,红灯是C,蓝灯是B;
第二个为初始化的结构体,注意要取地址!
现在GPIO端口已经初始化好了,下来就是点亮LED灯
我的两个灯分别在端口B和C,但是这两个端口都在APB2线上,
所以现在要给APB2线使能(类似供电)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
这个函数的意思是给APB2的GPIOB使能,现在使能了就能控制灯亮和灭了。
GPIO_ResetBits(GPIOC,GPIO_Pin_5);
GPIO_SetBits(GPIOC,GPIO_Pin_5);
由于我的开发板两个灯默认状态是低电平,所以对应Reset是开,Set是关。
While(1)
{}
//方式程序跑飞
}
新技巧1.1:
#define LED_RED_ON (LED_RED_GPIO->BSRR |= LED_RED_PIN <<16) // 点亮,置低电平
#define LED_RED_OFF (LED_RED_GPIO->BSRR |= LED_RED_PIN) // 熄灭,置高电平
#define LED_RED_TOGGLE (LED_RED_GPIO->ODR ^= LED_RED_PIN) // 反转,电平取反
直接调用语句 LED_RED_ON 就代表执行( )内的语句。
相关寄存器解释:
用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态.
ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。
GPIOx_ODR:
控制引脚输出状态。
GPIOx_BSRR:
在这个寄存器中,低16位是用来置位的,高16位用来复位的。
例如:
#define LED_RED_O (LED_RED_GPIO->BSRR |= LED_RED_PIN <<16) // 点亮,置低电平
解释:左移16位置1,变成高16位了,将对应位的ODR设置成0(灯亮)
#define LED_RED_OFF (LED_RED_GPIO->BSRR |= LED_RED_PIN) // 熄灭,置高电平
解释:对应位置1,在低16位,对应位的ODR为1(灯灭)