新手上路
- 积分
- 47
- 金钱
- 47
- 注册时间
- 2021-1-10
- 在线时间
- 13 小时
|
发表于 2021-1-28 22:36:51
|
显示全部楼层
TIM_ClearITPendingBit与TIM_ClearFlag的区别恐怕不是能不能清除中断标记,而是能不能清除重复捕获标记
以下是解释:
先把TIM_ClearITPendingBit();和TIM_ClearFlag();的定义摆出来:
void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT)
{
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_IT(TIM_IT));
/* Clear the IT pending Bit */
TIMx->SR = (uint16_t)~TIM_IT;
}
void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG)
{
/* Check the parameters */
assert_param(IS_TIM_ALL_PERIPH(TIMx));
assert_param(IS_TIM_CLEAR_FLAG(TIM_FLAG));
/* Clear the flags */
TIMx->SR = (uint16_t)~TIM_FLAG;
}
可以看出他们的区别只有第二位形参不同,我找了一下这两个形参可以被赋的所有值,如下:
#define TIM_IT_Update ((uint16_t)0x0001)
#define TIM_IT_CC1 ((uint16_t)0x0002)
#define TIM_IT_CC2 ((uint16_t)0x0004)
#define TIM_IT_CC3 ((uint16_t)0x0008)
#define TIM_IT_CC4 ((uint16_t)0x0010)
#define TIM_IT_COM ((uint16_t)0x0020)
#define TIM_IT_Trigger ((uint16_t)0x0040)
#define TIM_IT_Break ((uint16_t)0x0080)
#define TIM_FLAG_Update ((uint16_t)0x0001)
#define TIM_FLAG_CC1 ((uint16_t)0x0002)
#define TIM_FLAG_CC2 ((uint16_t)0x0004)
#define TIM_FLAG_CC3 ((uint16_t)0x0008)
#define TIM_FLAG_CC4 ((uint16_t)0x0010)
#define TIM_FLAG_COM ((uint16_t)0x0020)
#define TIM_FLAG_Trigger ((uint16_t)0x0040)
#define TIM_FLAG_Break ((uint16_t)0x0080)
#define TIM_FLAG_CC1OF ((uint16_t)0x0200)
#define TIM_FLAG_CC2OF ((uint16_t)0x0400)
#define TIM_FLAG_CC3OF ((uint16_t)0x0800)
#define TIM_FLAG_CC4OF ((uint16_t)0x1000)
也就是说,不同点只是TIM_ClearFlag比TIM_ClearITPendingBit多这四个形参而已,STM32中文参考手册对这四个形参的定义是:
CC4OF: 捕获/比较4重复捕获标记 (Capture/Compare 4 overcapture flag)
参见CC1OF描述。 |
CC3OF: 捕获/比较3重复捕获标记 (Capture/Compare 3 overcapture flag)
参见CC1OF描述。 |
CC2OF: 捕获/比较2重复捕获标记 (Capture/Compare 2 overcapture flag)
参见CC1OF描述。 |
CC1OF: 捕获/比较1重复捕获标记 (Capture/Compare 1 overcapture flag)
仅当相应的通道被配置为输入捕获时,该标记可由硬件置1。写0可清除该位。
0:无重复捕获产生;
1:计数器的值被捕获到TIMx_CCR1寄存器时, CC1IF的状态已经为’1’。
|
(小白入坑不到一个月,如有错误还望指正)
问题来了
什么是重复捕获标记?它的作用是什么?
|
|