7.3 1周1 ——库函数点亮LED灯

文章介绍了如何使用STM32的库函数初始化GPIO端口,控制LED灯的亮灭。通过GPIO_InitTypeDef结构体设置PIN、速度和模式,然后使用GPIO_Init进行初始化。对APB2总线使能后,通过GPIO_ResetBits和GPIO_SetBits控制LED的状态。此外,文章还提供了使用BSRR寄存器直接操作LED状态的新技巧。
摘要由CSDN通过智能技术生成

 

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(灯灭)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值