野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14716|回复: 2

设置定时器时,为什么要用这种语法?

[复制链接]
发表于 2015-4-13 09:49:18 | 显示全部楼层 |阅读模式
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;

把SysTick_CTRL_ENABLE_Msk 按位取反之后,为什么又要和SysTick->CTRL 位与一下呢?
回复

使用道具 举报

发表于 2015-4-13 11:12:02 | 显示全部楼层
本帖最后由 11kxmx 于 2015-4-13 11:34 编辑

清 0,1取反为0,0和谁相"与"都是0
SysTick_CTRL_ENABLE在宏定义时其中的一位(使能位)为1其余为0
#define SysTick_CTRL_ENABLE_Msk            (1ul << SysTick_CTRL_ENABLE_Pos)  
取反后该位为0,其余位为1
然后和SysTick->CTRL 相"与" 对应位就变成了0(不论它原来是0还是1),而其余位保持不变
而置1(使能)应该是
SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;
因为一个控制寄存器有好多位,我们不要在不明白它是什么用途的情况下贸然地去给它清0或置1,所以只是用到某一位时才单独对其操作
而其它位要保持原状态 
回复 支持 反对

使用道具 举报

发表于 2015-4-13 18:54:44 | 显示全部楼层
楼上  正解
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 10:01 , Processed in 0.031033 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表