STM32 寄存器位操作详解

在对STM32寄存器操作时,我们经常会对寄存器的某一位或几位进行修改并且保持其他位不变,这时候就会用到C语言的位操作方法。那么如何进行位操作,以及位操作的原理是什么呢?话不多说直接开冲:

1、把变量的某位清零
//先定义一个随机变量a
unsigned char a = 0x9f;
//对bit2位进行清零操作
a &= ~(1 << 2);

首先,随便给一个变量,为了跟32的代码接近点,我们也用16进制,然后0x9f就是1001 1111 b(二进制)
要求对bit2位清零,也就是说要将1001 1111变成1001 1011。这里注意一下,bit位是从0开始的,bit2是倒数第三位,别搞错了。
然后就是重点了,怎么理解 a &= ~(1<<2)呢?
第一步,先看括号里的,1左移两位,得到一个二进制数:0000 0100 b
第二步,~是一个取反符号,我们对(1<<2)取反就可以得到1111 1011 b
第三步,a &= 1111 1011可以拆分为:a = (1001 1111 b)&(1111 1011)
经过与运算之后 a = 1001 1011 b,这就完成了我们的目的,对bit2位清零,同时不改变其他位。

2、 把变量的连续几位清零

将a中的bit2和bit3位清零。


a &= ~(3<<2*1);    // a &= ~(数值<<每组位数*组编号)

如果想要对a中的连续几位进行操作,首先要将二进制位分组,在这里我们将其按照两个位一组的方式进行分组,也就是bit0bit1为第0组,bit2bit3为第1组,bit4bit5为第2组,bit6bit7为第3组。现在我们想要对bit2,bit3位清零,也就是对第1组进行清零。感兴趣的可以思考一下为什么要分组这个问题,因为我们马上就会用到。

3的二进制为:0011
(3<<21)我们现在将其左移两位得到 0000 1100 b
~(3<<2
1)得到 —————————>1111 0011 b
在对a做位与运算 a = (1001 1111 b)&(1111 0011 b)=1001 0011 b

在这里大家可能有点懵的点在于括号里的321都是个啥?一个一个来解释:
这里的"1"就是我们刚才分的组号,如果想要清除第3组bit6bit7,那么将这里的1换成3即可。"2"是每组的位数,每组有两个二进制位,如果我们在分组的时候分成4个一组,那么这里就是4。"3"是我们的一组两个数二进制表示 11 时的值,如果是一组4个,此处就是二进制数1111 b了。
在这里插入图片描述
大家可以用上面的方法自己试试对第二组bit4bit5进行清零操作,答案在最后。

3、对变量的某一位进行赋值操作

这个比较简单,直接往位上写就可以了:

//a = 1001 0011 b
a |= (1<<3);
//a = 1001 1011 b
4、对变量的某几位进行赋值操作

寄存器在经过清零操作之后,就可以很方便的在某几位写入所需要的数值且保持其他位不变,这时候写入的数值一般就是需要设置的寄存器位参数了。

//假设a = 1000 0011 b,将第二组bit4bit5设置成二进制数 01 b
a |= (1<<2*2);
5、对某位进行取反操作
//a = 1001 0011 b 对bit6位进行取反
a ^= (1<<6);
//a = 1101 0011 b

最后是之前留下的小问题:a &= ~(3<<2*2);

  • 29
    点赞
  • 136
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
嗨!对于学习STM32寄存器编程,你可以按照以下步骤进行: 1. 了解寄存器的基本概念:寄存器是用来存储数据的硬件组件,它们在微控制器中起着重要的作用。了解寄存器的种类和功能是学习STM32寄存器编程的基础。 2. 确定你所使用的STM32系列微控制器型号:每个STM32系列微控制器都有自己的寄存器集合和功能。你需要确定你所使用的型号,并下载相关的参考手册。 3. 下载STM32参考手册:在STMicroelectronics官网上,你可以找到针对特定型号的STM32参考手册。这些手册详细描述了每个寄存器的功能、配置方法和寄存器地址等重要信息。 4. 学习寄存器编程技巧:在学习STM32寄存器编程之前,你需要掌握C或者汇编语言编程知识。了解如何读写寄存器、设置位字段和使用寄存器位操作是非常重要的。 5. 编写代码:根据参考手册中提供的信息,你可以编写代码来配置和操作寄存器。这样可以实现对特定功能或外设的控制。 6. 测试和调试:一旦编写完代码,你可以将其下载到STM32微控制器上,并通过调试器或串口输出等方式验证是否实现了预期的功能。如果有问题,可以根据调试信息进行排查和修复。 请注意,寄存器编程是低级别的编程方法,需要更多的手动配置和对硬件的了解。如果你是STM32初学者,可能更容易使用标准库或CubeMX等工具来进行开发,这些工具可以简化硬件配置过程。一旦你对STM32有了更深入的了解,再尝试寄存器编程也是很有意义的。祝你学习愉快!如有问题,欢迎继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值