OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3147|回复: 0

宏定义的小问题

[复制链接]

2

主题

2

帖子

0

精华

新手入门

积分
38
金钱
38
注册时间
2015-6-4
在线时间
3 小时
发表于 2016-1-31 15:38:27 | 显示全部楼层 |阅读模式
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;这句话究竟实现了什么呢?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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