定时触发很奇怪的问题,难道是我算的不对?

[复制链接]
3449|17
 楼主| hackthree 发表于 2011-11-1 09:32 | 显示全部楼层 |阅读模式
系统时钟72M。用定时器触发AD转换。
定时器如下配置:
TIM_TimeBaseStructure.TIM_Period = 1756;
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
我想得到40.96kHz的AD采样率。
如果TIM_Prescaler=0,那么TIM_Period应该等于72M/40960-1=1756;
可是我在ADC1_2_IRQHandler中加入一次管脚翻转用示波器看,频率却是40960/2=20.48KHZ。。
如果想得到40.96khz 的话TIM_Period必须除以二也就是878.
我检查过RCC的配置,系统72M没错啊。。
各位指导下我哪边错了?:L
 楼主| hackthree 发表于 2011-11-1 10:55 | 显示全部楼层
:L怎么最近提的问题都没人回答。。
香水城 发表于 2011-11-1 11:23 | 显示全部楼层
检查一下APB时钟设置是否正确。
香水城 发表于 2011-11-1 11:40 | 显示全部楼层
每个人都会犯错误,但不会每个人都犯同样的错误。
 楼主| hackthree 发表于 2011-11-1 13:51 | 显示全部楼层
3# 香水城

用的是TIM2,TIM2的话就是APB1,刚看了下手册上有这段
074e00d4-9291-4e48-baa9-f93c59a3cc1b.JPG
难道是这个原因?
 楼主| hackthree 发表于 2011-11-1 13:54 | 显示全部楼层
4# kimfufree

你这种人,不帮忙你就当个看客,何必说风凉话。。
我就看你以后不提任何问题。。。
香水城 发表于 2011-11-1 14:38 | 显示全部楼层
3# 香水城  

用的是TIM2,TIM2的话就是APB1,刚看了下手册上有这段
83834
难道是这个原因?
hackthree 发表于 2011-11-1 13:51


LZ位没有说用那个TIM,也不知道你的APB配置如何,所以不敢轻易怀疑下结论。

还是请按照3楼的提示,检查一下APB的配置。

另外,你在中断中翻转管脚,如果是每进一次中断翻转一次,则示波器看到的就应该是降低一半的频率。
 楼主| hackthree 发表于 2011-11-1 15:11 | 显示全部楼层
8# 香水城

  RCC_PCLK2Config(RCC_HCLK_Div1);

  RCC_PCLK1Config(RCC_HCLK_Div1);

中断里是直接执行下面这两句的:
GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_SET);
GPIO_WriteBit(GPIOC, GPIO_Pin_6, Bit_RESET);

这个需要等两次才能算一个周期?
IJK 发表于 2011-11-1 15:19 | 显示全部楼层
8# 香水城  

  RCC_PCLK2Config(RCC_HCLK_Div1);

  RCC_PCLK1Config(RCC_HCLK_Div1);

hackthree 发表于 2011-11-1 15:11


  RCC_PCLK1Config(RCC_HCLK_Div1);
如果HCLK=72M,那么APB1 CLK=72M,APB1 CLK超频了, 有可能得不到想要的结果
 楼主| hackthree 发表于 2011-11-1 15:41 | 显示全部楼层
10# IJK

这个我试了下。
72M下。
RCC_PCLK1Config(RCC_HCLK_Div1);

RCC_PCLK1Config(RCC_HCLK_Div2);
的效果是一样的。。
以前也没注意这个,都是网上例程直接拿来用的。。
照这么说,APB1上的都只能用36M算而不是72M?
如果是36M/40960-1,那就是878了。。
我FFT出来,只有定为878才能测到20KHZ左右的信号。
1756只能测到10KHZ左右的信号,再大就信号叠加了。。
而如果采样率是40.96KHZ,那就肯定能测到20KHZ的信号的。。
 楼主| hackthree 发表于 2011-11-1 15:47 | 显示全部楼层
10# IJK

也就是说,RCC_PCLK1Config(RCC_HCLK_Div1);的时候,频率还是被限制成36M了。。
香水城 发表于 2011-11-1 16:55 | 显示全部楼层
10# IJK  

也就是说,RCC_PCLK1Config(RCC_HCLK_Div1);的时候,频率还是被限制成36M了。。
hackthree 发表于 2011-11-1 15:47


不是的。

不允许APB1的预分频系数是1,这样会产生不可知的后果。APB1的预分频系数必须大于等于2。

当APB1的预分频系数等于2时,TIM2的输入时钟频率等于AHB的频率。请看STM32参考手册中第7.2节中以下说明:
STM32_Timer_Clock.GIF
 楼主| hackthree 发表于 2011-11-1 17:06 | 显示全部楼层
13# 香水城

哦,这下注意了。
那这样的话,APB1上的TIM最高不就只能用36M算了么?
36M/40960-1=878?
香水城 发表于 2011-11-1 17:18 | 显示全部楼层
TIM的最高输入频率是72M。

你再读一遍我13楼的回答。
huanben 发表于 2011-11-1 18:08 | 显示全部楼层
14# hackthree

LZ应该仔细看看版主发的数据手册截图吧。。
yudgern 发表于 2011-11-2 10:20 | 显示全部楼层
香水城 发表于 2011-11-2 21:28 | 显示全部楼层
LZ试试把定时器的输出打开,直接测量输出信号,看看什么结果。
wangshi 发表于 2011-11-23 20:55 | 显示全部楼层
恩 是你算的不对。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

220

帖子

1

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