打印

定时器中断中IO口能输出最高频率?

[复制链接]
3055|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hikook|  楼主 | 2010-5-24 23:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人做实验时直接在定时器中断中把IO口取反输出频率信号,但输出频率始终达不到1M以上,为什么呢?谢谢各位!
沙发
香水城| | 2010-5-25 08:36 | 只看该作者
为什么不呢?

使用特权

评论回复
板凳
hikook|  楼主 | 2010-5-25 11:04 | 只看该作者
不知道什么原因,频率就是上不去!郁闷!

使用特权

评论回复
地板
luoyangzi| | 2010-5-25 11:35 | 只看该作者
频率信号输出端有没有接滤波电容?

使用特权

评论回复
5
香水城| | 2010-5-25 13:29 | 只看该作者
需要考虑中断的响应时间和中断内程序执行的时间,如果你的程序比较长,这个水准就不错了。

使用特权

评论回复
6
xsgy123| | 2010-5-25 15:44 | 只看该作者
1M应该是很容易达到的呀

使用特权

评论回复
7
maomao2126| | 2010-5-25 18:21 | 只看该作者
如果定时器定时的频率本来就比较小,那想快也快不起来啊

如香主所言,首先要保证中断的频率满足你的要求,还要考虑中断的响应时间及执行时间

使用特权

评论回复
8
无冕之王| | 2010-5-25 18:57 | 只看该作者
香主分析的很有道理

使用特权

评论回复
9
hikook|  楼主 | 2010-5-25 23:19 | 只看该作者
首先感谢各位的热情帮助!我在输出口上没有接电容,而且为了做实验中断中只把口线取反其他什么都不做,主程序也不做任何事情的!就是不行!:'(

使用特权

评论回复
10
香水城| | 2010-5-26 08:46 | 只看该作者
首先感谢各位的热情帮助!我在输出口上没有接电容,而且为了做实验中断中只把口线取反其他什么都不做,主程序也不做任何事情的!就是不行!:'(
hikook 发表于 2010-5-25 23:19


你希望什么结果?

请你把中断的响应时间和执行程序的时间加起来,计算一下。

使用特权

评论回复
11
maomao2126| | 2010-5-26 08:52 | 只看该作者
最好将定时器部分的设定发上来看看,说不定就是你设定的问题

这部分好像跟接没接电容关系不大吧?

使用特权

评论回复
12
hikook|  楼主 | 2010-5-27 07:14 | 只看该作者
程序代码如下:
/* Time2 base configuration 系统频率为72M*/
  TIM_TimeBaseStructure.TIM_Prescaler = 1;    //定时器2的时钟频率为:72M/(1+1) = 36M
  TIM_TimeBaseStructure.TIM_Period = 89;    //定时器的溢出频率为400k
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  TIM_Cmd(TIM2, ENABLE);
  中断函数为:
  void TIM2_IRQHandler(void)
{
  if(TIM_GetITStatus(TIM2, TIM_IT_Update) == SET)
  {
    /* Clear TIM3 Capture compare interrupt pending bit */
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
  }
}
现在的程序现象为:
1。当设定 TIM_TimeBaseStructure.TIM_Period = 89; 时定时器的溢出频率为400K,用示波器测试PB8口为200K,这时完全正确。
2。当设定 TIM_TimeBaseStructure.TIM_Period = 39; 时定时器的溢出频率为900K,用示波器测试PB8口为225.2K,这时输出频率就不正确了。
烦请各位帮忙分析原因,主程序不做任何事情的.

使用特权

评论回复
13
hikook|  楼主 | 2010-5-27 22:38 | 只看该作者
设定 TIM_TimeBaseStructure.TIM_Period = 39,我用软件仿真的测试PB8频率这时输出也不正确。
当然如果设定 TIM_TimeBaseStructure.TIM_Period = 89, 用软件仿真的测试PB8频率为200K,这时完全正确。
为何呢??

使用特权

评论回复
14
香水城| | 2010-5-28 09:43 | 只看该作者
楼主显然没有考虑我在10楼提出的问题。

你的中断程序中处理时间太长了,CPU没有你想象的快!

使用特权

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

本版积分规则

3

主题

29

帖子

1

粉丝