打印

TIM1_CC1触发ADC的频率如何计算?

[复制链接]
2783|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
st316|  楼主 | 2012-11-20 18:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用TIM1_CC1事件去触发ADC1开始一次模数转换,请问,两次触发事件之间的间隔要如何计算?
我的理解是这样的:
这涉及到TIM1的三个寄存器,分别是TIM1_CNT(计数器)、TIM1_ARR(重载值)、TIM1_CCR1(比较值)。
其中,CNT会不断增加(如果设置为向上计数模式),直至等于ARR里面的值,然后又从0开始增加,如此不断重复。
什么时候产生TIM1_CC1事件,就和CCR里面的值有关了,当CNT增加到CCR里面值大小时,就会产生TIM1_CC1事件?我知道,这样的理解肯定是错的,如果是这样的话,那么,TIM1_CC1事件的产生周期就只和ARR里面值有关了,和CCR是无关的。

今天一天都在看用户手册关于ADC部分的描述,好不容易实现了用TIM_CC1去触发双ADC以同步规则模式去转换各自的多个通道。不过,TIM1_CC1的触发频率还不知道如何去计算,用户手册里TIM1部分肯定有说明,现在实在不想看了。请各位指点!
沙发
st316|  楼主 | 2012-11-20 18:04 | 只看该作者
TIM1部分的设置如下:
  /* TIM1 configuration ------------------------------------------------------*/ 
  /* Time Base configuration */
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  TIM_TimeBaseStructure.TIM_Period = 0xFFFF;         
  TIM_TimeBaseStructure.TIM_Prescaler = 0x04FF;      
  TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  /* TIM1 channel1 configuration in PWM mode */
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;               
  TIM_OCInitStructure.TIM_Pulse = 0x7FFF;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         
  TIM_OC1Init(TIM1, &TIM_OCInitStructure);

使用特权

评论回复
板凳
airwill| | 2012-11-21 09:41 | 只看该作者
当CNT增加到CCR1 时, 就触发 TIM1_CC1事件. 就是这样的.

使用特权

评论回复
地板
lut1lut| | 2012-11-21 14:37 | 只看该作者
“什么时候产生TIM1_CC1事件,就和CCR里面的值有关了,当CNT增加到CCR里面值大小时,就会产生TIM1_CC1事件”你的理解没错。

“TIM1_CC1事件的产生周期就只和ARR里面值有关了,和CCR是无关的。”没错

使用特权

评论回复
5
st316|  楼主 | 2012-11-21 20:34 | 只看该作者
晕,这样理解竟然是对的。:L
如此说来,这个CCR寄存器的作用,就只是用来控制PWM的占空比了。

我不想改变ARR寄存器的值,看来只能另想他法去触发ADC了。
请问,TIM3_TRGO事件是个什么事件?

使用特权

评论回复
6
飞仔的梦想| | 2012-11-22 11:07 | 只看该作者
学习了:victory:

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

167

帖子

3

粉丝