stm32位操作函数(未完待续)

stm32位操作函数

昨天看到了普中科技的数码管操作函数,对stm32的位操作函数,自己也不太懂,就查了一下,现在整理学习笔记如下:

先来说一下stm32 GPIO的寄存器,每个GPI/O端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。



主要学习到了stm32操作函数的两个位操作函数,现在我们用寄存器和库函数来分别进行说明,库函数是这两个函数,GPIO_ResetBits和GPIO_SetBits,GPIO_WriteBit 

而对寄存器的操作有两个寄存器 GPIOB->BSRR和GPIOB->BRR :

//         GPIOB->BSRR = 0x01就是把GPIOB port 0升为高电平
// GPIOB->BRR = 0x01就是把GPIOB port 0降为低电平
// GPIOB->BSRR = 0x02就是把GPIOB port 1升为高电平
// GPIOB->BRR = 0x02就是把GPIOB port 1降为低电平
// GPIOB->BSRR = 0x04就是把GPIOB port 2升为高电平
// GPIOB->BRR = 0x04就是把GPIOB port 2降为低电平
// GPIOB->BSRR = 0x08就是把GPIOB port 3升为高电平
// GPIOB->BRR = 0x08就是把GPIOB port 3降为低电平

但是要注意这两个寄存器一个是32位的,一个是16位的。GPIOB->BSRR高16位用来清0,使用低16位用来置1使用,而BRR就是用来置0的。

而我们的库函数实际上就是对寄存器进行操作的。

库函数的源代码如下所示:

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BSRR = GPIO_Pin;
}


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;//写 1:清除对应的ODRy位为0
}

这两个函数,看数据手册  GPIOx->BSRR 高16位也是写 1:清除对应的ODRy位为0 ,那么和 GPIO_ResetBits ()实现的功能是一样的。
/* Set the GPIOA port pin 10 and pin 15 */ 
GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15); 








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值