打印

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

[复制链接]
2441|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
系统时钟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 | 只看该作者
每个人都会犯错误,但不会每个人都犯同样的错误。

使用特权

评论回复
5
hackthree|  楼主 | 2011-11-1 13:51 | 只看该作者
3# 香水城

用的是TIM2,TIM2的话就是APB1,刚看了下手册上有这段

难道是这个原因?

使用特权

评论回复
6
hackthree|  楼主 | 2011-11-1 13:54 | 只看该作者
4# kimfufree

你这种人,不帮忙你就当个看客,何必说风凉话。。
我就看你以后不提任何问题。。。

使用特权

评论回复
7
香水城| | 2011-11-1 14:38 | 只看该作者
3# 香水城  

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


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

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

另外,你在中断中翻转管脚,如果是每进一次中断翻转一次,则示波器看到的就应该是降低一半的频率。

使用特权

评论回复
8
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);

这个需要等两次才能算一个周期?

使用特权

评论回复
9
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超频了, 有可能得不到想要的结果

使用特权

评论回复
10
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的信号的。。

使用特权

评论回复
11
hackthree|  楼主 | 2011-11-1 15:47 | 只看该作者
10# IJK

也就是说,RCC_PCLK1Config(RCC_HCLK_Div1);的时候,频率还是被限制成36M了。。

使用特权

评论回复
12
香水城| | 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 (14.19 KB )

STM32_Timer_Clock.GIF

使用特权

评论回复
13
hackthree|  楼主 | 2011-11-1 17:06 | 只看该作者
13# 香水城

哦,这下注意了。
那这样的话,APB1上的TIM最高不就只能用36M算了么?
36M/40960-1=878?

使用特权

评论回复
14
香水城| | 2011-11-1 17:18 | 只看该作者
TIM的最高输入频率是72M。

你再读一遍我13楼的回答。

使用特权

评论回复
15
huanben| | 2011-11-1 18:08 | 只看该作者
14# hackthree

LZ应该仔细看看版主发的数据手册截图吧。。

使用特权

评论回复
16
yudgern| | 2011-11-2 10:20 | 只看该作者

使用特权

评论回复
17
香水城| | 2011-11-2 21:28 | 只看该作者
LZ试试把定时器的输出打开,直接测量输出信号,看看什么结果。

使用特权

评论回复
18
wangshi| | 2011-11-23 20:55 | 只看该作者
恩 是你算的不对。

使用特权

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

本版积分规则

1

主题

220

帖子

1

粉丝