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

[复制链接]
4249|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部分的设置如下:
  1.   /* TIM1 configuration ------------------------------------------------------*/
  2.   /* Time Base configuration */
  3.   TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  4.   TIM_TimeBaseStructure.TIM_Period = 0xFFFF;         
  5.   TIM_TimeBaseStructure.TIM_Prescaler = 0x04FF;      
  6.   TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;   
  7.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  8.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  9.   /* TIM1 channel1 configuration in PWM mode */
  10.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  11.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;               
  12.   TIM_OCInitStructure.TIM_Pulse = 0x7FFF;
  13.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;         
  14.   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是无关的。”没错
 楼主| st316 发表于 2012-11-21 20:34 | 显示全部楼层
晕,这样理解竟然是对的。:L
如此说来,这个CCR寄存器的作用,就只是用来控制PWM的占空比了。

我不想改变ARR寄存器的值,看来只能另想他法去触发ADC了。
请问,TIM3_TRGO事件是个什么事件?
飞仔的梦想 发表于 2012-11-22 11:07 | 显示全部楼层
学习了:victory:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

167

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部