0
点赞
收藏
分享

微信扫一扫

模块化点亮LED

继续跟随海创电子的视频进行学习,本节利用BSRR寄存器和BRR寄存器来点亮PC13。

端口设置/清除寄存器(GPIOx_BSRR)(x=A..E)

模块化点亮LED_引脚

其特点是:

  1. 将该32位的寄存器分为高16位、低16位,而且只能以16位的形式来进行操作;
  2. 高16位用于置“0”,低16位用于置“1”;
  3. 各个位对“0”操作是免疫的。

例如如果要点亮PC13,那么就要到对应的 GPIOC_BSRR 中进行操作

//R:reset(置0)   S:set(置1)
//如果BS13、BR13 均置1,那么BS13起作用
输出高电平:1<<13 //即 BS13 置 1

输出低电平:1<<(13+16) //即 BR13 置 1

如果引脚的不一致性问题,通过方式BRR寄存器来解决。

端口清除寄存器(GPIOx_BRR)(x=A..E)

模块化点亮LED_引脚_02

模块化点亮LED_点亮LED_03

特点:

  1. 只能以16位的形式来进行操作;
  2. 同时各个位对“0”操作是免疫的;
  3. 输出高电平就可以使用BSRR寄存器,输出低电平就可以使用BRR寄存器。

那么输出高电平、低电平的具体函数形式为

BPIOC->BSRR |= 1<<13;

有一个函数能够识别哪个组的哪个引脚

//用于置0
//第一个参数设置使用的哪个组,第二个参数是引脚
void GPIO_SetBits(GPIO_typeDef *GPIOx, uint16_t GPIO_Pin){
BPIOx->BSRR |= GPIO_Pin;
}

//用于置1
//第一个参数设置使用的哪个组,第二个参数是引脚
void GPIO_ResetBits(GPIO_typeDef *GPIOx, uint16_t GPIO_Pin){
BPIOx->BSRR |= (GPIO_Pin+16);
}
//可以将其修改为下面形式
void GPIO_ResetBits(GPIO_typeDef *GPIOx, uint16_t GPIO_Pin){
BPIOx->BRR |= GPIO_Pin
}

将对应的移位操作定义成下面的形式,方便调用。

#define GPIO_Pin_0  ((uint16_t)0x0001)  //二进制:0b0000 0001
#define GPIO_Pin_1 ((uint16_t)0x0002) //二进制:0b0000 0010
#define GPIO_Pin_2 ((uint16_t)0x0004) //二进制:0b0000 0100
#define GPIO_Pin_3 ((uint16_t)0x0008)
#define GPIO_Pin_4 ((uint16_t)0x0010)
#define GPIO_Pin_5 ((uint16_t)0x0020)
#define GPIO_Pin_6 ((uint16_t)0x0040)
#define GPIO_Pin_7 ((uint16_t)0x0080)
#define GPIO_Pin_8 ((uint16_t)0x0100)
#define GPIO_Pin_9 ((uint16_t)0x0200)
#define GPIO_Pin_10 ((uint16_t)0x0400)
#define GPIO_Pin_11 ((uint16_t)0x0800)
#define GPIO_Pin_12 ((uint16_t)0x1000)
#define GPIO_Pin_13 ((uint16_t)0x2000)
#define GPIO_Pin_14 ((uint16_t)0x4000)
#define GPIO_Pin_15 ((uint16_t)0x8000)
#define GPIO_Pin_all ((uint16_t)0xFFFF)

结构体变量和结构体指针变量的区别

在上面的改变结构体变量的方法有两种,第一种采用定义结构体指针的方式,第二种是使用结构体的方式,分别如下所示:

//第一种
void GPIO_SetBits(GPIO_typeDef *GPIOx, uint16_t GPIO_Pin){
BPIOx->BSRR |= GPIO_Pin;
}

//第二种
void GPIO_SetBits(GPIO_typeDef GPIOx, uint16_t GPIO_Pin){
BPIOx.BSRR |= GPIO_Pin;
}

我们使用函数的目的是能够改变成员变量的的值,经过程序验证可以发现,结构体的方式并不能改变传入的值,而定义结构体指针则可以改变传入的值,因此在实际开发中都会用指针传递值。


举报

相关推荐

0 条评论