新手入门
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2015-6-4
- 在线时间
- 3 小时
|
1金钱
看到教程里有这么一段:
3) ~取反操作使用技巧
SR 寄存器的每一位都代表一个状态,某个时刻我们希望去设置某一位的值为 0,同时
其他位都保留为 1,简单的作法是直接给寄存器设置一个值:
TIMx->SR=0xFFF7;
这样的作法设置第 3 位为 0,但是这样的作法同样不好看,并且可读性很差。看看库函数
代码中怎样使用的:
TIMx->SR = (uint16_t)~TIM_FLAG;
而 TIM_FLAG 是通过宏定义定义的值:
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)
看这个应该很容易明白,可以直接从宏定义中看出 TIM_FLAG_Update 就是设置的第 0 位了,
可读性非常强。
[size=13.3333px]TIMx->SR = (uint16_t)~TIM_FLAG;这句里的[size=13.3333px]TIM_FLAG和[size=13.3333px]TIM_FLAG_Update有什么关系呢?
[size=13.3333px]TIMx->SR = (uint16_t)~TIM_FLAG;这句话究竟实现了什么呢?
|
|