OpenEdv-开源电子网

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

TIM_GetCapture2()与TIM_GetCounter()的区别在哪里?

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-8-14
在线时间
0 小时
发表于 2014-8-14 21:51:27 | 显示全部楼层 |阅读模式
5金钱


u16 TPAD_Get_Val(void)
{
TPAD_Reset();
while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) == RESET)
{
if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);
};
return TIM_GetCapture2(TIM5);
}
为什么把上面的程序改成下面的,程序就不能运行了
u16 TPAD_Get_Val(void)
{      
 TPAD_Reset();
 while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) == RESET)
 {
  if(TIM_GetCapture2(TIM5)>TPAD_ARR_MAX_VAL-500)
   return TIM_GetCapture2(TIM5);
 }; 
 return TIM_GetCapture2(TIM5);  
}  




最佳答案

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

 这是两个不同的概念哦 uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx) {   /* Check the parameters */   assert_param(IS_TIM_LIST6_PERIPH(TIMx));   /* Get the Capture 2 Register value */   return TIMx->CCR2; } uint16_t TIM_GetCounter(TIM_TypeDef* TIMx) {   /* Check the parameters */   assert_param(IS_TIM_ALL_PERIPH(TIMx));   /* Get the Count ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

230

主题

1952

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-8-14 21:51:28 | 显示全部楼层
 这是两个不同的概念哦


uint16_t TIM_GetCapture2(TIM_TypeDef* TIMx)
{
  /* Check the parameters */
  assert_param(IS_TIM_LIST6_PERIPH(TIMx));
  /* Get the Capture 2 Register value */
  return TIMx->CCR2;
}

uint16_t TIM_GetCounter(TIM_TypeDef* TIMx)
{
  /* Check the parameters */
  assert_param(IS_TIM_ALL_PERIPH(TIMx));
  /* Get the Counter Register value */
  return TIMx->CNT;
}





CNT是当前计数器值,,,CCR2是比较值。。

 
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-8-14
在线时间
0 小时
 楼主| 发表于 2014-8-14 22:20:44 | 显示全部楼层
u16 TPAD_Get_Val(void)
{      
 TPAD_Reset();
 while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) == RESET)
 {
  //if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);
 }; 
 return TIM_GetCapture2(TIM5);  
}  

 if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL+1)return TIM_GetCounter(TIM5); ----这一句TPAD_ARR_MAX_VAL-500,500的意义是什么,我把500改成一个不是太大的数程序也能正常运行。差别好像只是在微妙级。     if语句被注释掉的话程序也能够在开发板上正常运行,那这一句的意义主要是在哪里呢??
回复

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2017-5-9
在线时间
18 小时
发表于 2017-7-15 14:24:14 | 显示全部楼层
wP5555 发表于 2014-8-14 22:20
**** 作者被禁止或删除 内容自动屏蔽 ****

经验值
回复

使用道具 举报

8

主题

38

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2019-2-1
在线时间
64 小时
发表于 2019-2-14 18:11:00 | 显示全部楼层
TIM_GetCapture2()只有当触发比较或者捕获时才会有值,而TIM_GetCounter()是查看当前计数器或者说是定时器中的数值,无论是否触发了比较捕获,都会有值,在楼主的函数段中,while中的情况是没有触发捕获,因此要使用GetCounter
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-4-20 06:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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