• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

stm32配置寄存器之前为什么要先清零??

菜鸟冷虎 2018-08-18 浏览量:4267
直接赋值不可以吗
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你所看到通常应该是这样的:

        tmpcr1 &= ~(TIM_CR1_DIR | TIM_CR1_CMS);
        tmpcr1 |= Structure->CounterMode;
    ​ST在做库的时候,把与或操作用的很熟练。由于STM32的寄存器全是32Bit宽度,所以,一个寄存器里面包含了多个功能的标志位,这个很常见。

    比如我需要设置某一个功能,其控制位为bit3-bit1  ,
    那么我在设置前需要去这个bit3-bit1进行置位,然后在赋值新值,除开bit3-bit1之外的值,就保持原来的值。

    所以, reg&=~0x00 00 00 0E  这样,就把bit3-bit1值0,其他BIT值不变其他bit&0都等于原来的值
    然后, reg|= 0x00 00 00 08  其他bit|0 也等于原来的值。

    这样就可以实现精确控制bit3-bit1  

    • 发布于 2018-08-18
    • 举报
    • 评论 0
    • 2
    • 0

其他答案 数量:17
  • 直接赋值是可以的,没必要一定要要清零
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 是为了避免之前的配置与新的配置产生冲突
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 这个要看具体外设,部分外设的使能位必须清除后才可以进行配置,大多数都是可以直接操作的。
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 一般是直接操作的,但是为了避免冲突的的原因,有时候必须清零
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 普通IO口寄存器可以直接操作,不需要清零,
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 要看你的配置的寄存器是什么样的了,是为1有效,还是为0有效
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 只是为了避免之前设置的影响
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 这是一种标准的赋值方式,只操作一个寄存器的部分位都是这么操作的
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 都不对,寄存器一般会先读原寄存器的值,再修改,再写入,这是最严谨的操作

    比清零再写,和直接写,都严谨。

    清零再写的话,如果寄存器里面本来就值,你一写原值被覆盖了,假如有的位本来有数据,你也不知道是0 是1,怎么保留原来的数据。

    直接写,也无法保留寄存器中原来的数据

    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 系统启动之后寄存器都会是复位值,一般直接赋值即可。
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 1
    • 0

  • 不是所有的都一定需要清零,主要看程序,很多的是直接赋值就可以了
    • 发布于2018-08-18
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接清零是为了防止有不一样状态导致最终想要实现的功能不能实现 
    • 发布于2018-08-19
    • 举报
    • 评论 0
    • 0
    • 0

  • 对寄存器的清零操作很多都是直接对一个寄存器操作,防止误操作
    • 发布于2018-08-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以直接配置啊 清零是把之前的状态还原 不是必备的
    • 发布于2018-08-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 要看看具体寄存器每一位的作用,如果寄存器其它位的配置与你程序无关的话就不需要清零。

    • 发布于2018-08-26
    • 举报
    • 评论 0
    • 0
    • 0

  • 先清零可以保证写入可以直接用逻辑或,需要保证其他位不变情况,不清零用逻辑运算很麻烦,如果是写入全比特,可以直接写入
    • 发布于2018-08-28
    • 举报
    • 评论 0
    • 0
    • 0

  • 不需要清零,可以直接进行操作
    • 发布于2018-09-18
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

stm32配置寄存器之前为什么要先清零??