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

[复制链接]
4623|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 | 显示全部楼层
频率信号输出端有没有接滤波电容?
香水城 发表于 2010-5-25 13:29 | 显示全部楼层
需要考虑中断的响应时间和中断内程序执行的时间,如果你的程序比较长,这个水准就不错了。
xsgy123 发表于 2010-5-25 15:44 | 显示全部楼层
1M应该是很容易达到的呀
maomao2126 发表于 2010-5-25 18:21 | 显示全部楼层
如果定时器定时的频率本来就比较小,那想快也快不起来啊

如香主所言,首先要保证中断的频率满足你的要求,还要考虑中断的响应时间及执行时间
无冕之王 发表于 2010-5-25 18:57 | 显示全部楼层
香主分析的很有道理
 楼主| hikook 发表于 2010-5-25 23:19 | 显示全部楼层
首先感谢各位的热情帮助!我在输出口上没有接电容,而且为了做实验中断中只把口线取反其他什么都不做,主程序也不做任何事情的!就是不行!:'(
香水城 发表于 2010-5-26 08:46 | 显示全部楼层
首先感谢各位的热情帮助!我在输出口上没有接电容,而且为了做实验中断中只把口线取反其他什么都不做,主程序也不做任何事情的!就是不行!:'(
hikook 发表于 2010-5-25 23:19


你希望什么结果?

请你把中断的响应时间和执行程序的时间加起来,计算一下。
maomao2126 发表于 2010-5-26 08:52 | 显示全部楼层
最好将定时器部分的设定发上来看看,说不定就是你设定的问题

这部分好像跟接没接电容关系不大吧?
 楼主| 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,这时输出频率就不正确了。
烦请各位帮忙分析原因,主程序不做任何事情的.
 楼主| hikook 发表于 2010-5-27 22:38 | 显示全部楼层
设定 TIM_TimeBaseStructure.TIM_Period = 39,我用软件仿真的测试PB8频率这时输出也不正确。
当然如果设定 TIM_TimeBaseStructure.TIM_Period = 89, 用软件仿真的测试PB8频率为200K,这时完全正确。
为何呢??
香水城 发表于 2010-5-28 09:43 | 显示全部楼层
楼主显然没有考虑我在10楼提出的问题。

你的中断程序中处理时间太长了,CPU没有你想象的快!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

1

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