STM32F103输入捕捉太慢

时间:2014-06-04 17:40:42

标签: stm32

我有10 MHz的高速时钟到处理器的TIM4输入捕捉引脚(第3章)。我想用处理器的输入捕获验证时钟是否以10 MHz运行。我用输入捕获模块对处理器进行了编码,它适用于较低频率(大约1 kHz左右)。一旦我开始将频率上升到MHz范围,处理器开始错过中断,从而给我一个不正确的频率。我没有在数据表中的任何地方看到输入捕获可以读取的最大频率。我有一个8 MHz的外部时钟和72 MHz的核心时钟,所以我想我可以读取10 MHz信号。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

看起来您正在为时钟的每个上升沿(或下降沿)生成中断请求。

如果情况确实如此,那么请考虑一下:使​​用10 MHz输入信号,您每7个CPU周期就会产生一次中断。在这7个CPU周期中,您需要预算时间将寄存器保存到RAM,运行IRQ处理函数prolog,运行您为中断处理程序编写的实际代码,运行IRQ处理函数结尾,并恢复寄存器。

最好的情况是,如果您设置编译器标志以优化速度并且您在中断处理程序中没有做太多处理,那么您需要查看数十个周期才能运行所有这些任务。因为你只有7个周期才能运行数十个周期'值得处理,你错过中断并不奇怪。

答案 1 :(得分:2)

查看TIM_ICInitStructure.TIM_ICPrescaler选项。通常,您将其设置为TIM_ICPSC_DIV1,以便在每次有效转换时生成中断。

预分频值1,2,4和8可用于有效降低该因子产生的中断速率。例如,对于预分频器为8的10MHz信号,您需要计算10Mhz / 8 = 1.25MHz的频率。

对于72MHz HCLK,这仍然非常紧张,因此您仍需要仔细优化IRQ处理程序。

答案 2 :(得分:0)

您不能以该频率使用中断例程。您需要将10MHz作为外部触发信号输入到定时器。然后,您可以使用预分频器和计时器将时钟分频到合适的较低中断频率。