OpenEdv-开源电子网

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

小白求问关于TIMx->SR = (uint16_t)~TIM_FLAG到底什么意思??

[复制链接]

16

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2014-7-15
在线时间
19 小时
发表于 2016-3-27 11:28:24 | 显示全部楼层 |阅读模式
1金钱
大神飘过,就告诉小弟这个取反是怎么个意思?TIM-FLAG-UPDATA和TIM-FLAG-CC1的所有位都被取反了?话说对TIM-FLAG进行位操作就能直接对TIM-FLAG-UPDATA和TIM-FLAG-CC1操作,这是怎么个原理?
图片1.jpg

最佳答案

查看完整内容[请看2#楼]

它不是對TIM_FLAG_Updata跟TIM_FLAG_CC1操作阿... 它是要對TIMx->SR進行清0操作 TIM_FLAG_Updata 你可以看成 BIT0 TIM_FLAG_CC1 BIT1 TIM_FLAG就像樓上說的 可以是某個BIT或某幾個BIT TIMx->SR = (uint16_t)~TIM_FLAG 不需要&是因為這個register寫1無效 寫0清零 你應該先K完C語言再玩板子...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2016-3-27 11:28:25 | 显示全部楼层
它不是對TIM_FLAG_Updata跟TIM_FLAG_CC1操作阿...
它是要對TIMx->SR進行清0操作

TIM_FLAG_Updata 你可以看成 BIT0
TIM_FLAG_CC1  BIT1
TIM_FLAG就像樓上說的 可以是某個BIT或某幾個BIT

TIMx->SR = (uint16_t)~TIM_FLAG
不需要&是因為這個register寫1無效 寫0清零

你應該先K完C語言再玩板子...
回复

使用道具 举报

3

主题

2165

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5772
金钱
5772
注册时间
2013-11-22
在线时间
1211 小时
发表于 2016-3-27 23:11:56 | 显示全部楼层
可能TIM_FLAG只是一个形参,实际带入TIM_FLAG的值为TIM_FLAG_Update 或者 TIM_FLAG_CC1
回复

使用道具 举报

16

主题

42

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2014-7-15
在线时间
19 小时
 楼主| 发表于 2016-3-28 10:57:04 | 显示全部楼层
civic7366 发表于 2016-3-28 09:43
它不是對TIM_FLAG_Updata跟TIM_FLAG_CC1操作阿...
它是要對TIMx->SR進行清0操作

多谢,受教了,找急着用,顾不了全部基础了,不懂的就问
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
发表于 2019-11-14 00:59:17 | 显示全部楼层
感觉文档将TIMx->SR = (uint16_t)~TIM_FLAG; 替换为
                 TIMx->SR = (uint16_t)~TIM_FLAG_Updata;
        而TIM_FLAG是通过宏定义定义的值:
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)

看这个应该很容易明白,可以直接从宏定义中看出TIM_FLAG_Update就是设置的第0位了,可读性非常强。

这样讲是不是更突出:不需要&是因为这个register写1无效,写0清0
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
发表于 2019-11-14 01:40:47 | 显示全部楼层
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
{  
  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
   
  /* Clear the flags */
  TIMx->SR = (uint16_t)~TIM_FLAG;



而TIM_FLAG是通过宏定义定义的值:
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 17:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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