STM32F103输入捕获太慢。

4
我有一个10 MHz高速时钟输入到处理器的TIM4输入捕获引脚(ch.3)。我想用处理器的输入捕获验证时钟是否以10 MHz运行。我使用输入捕获模块编写了处理器,对于较低频率(约1 kHz左右)它可以正常工作。一旦我将频率提高到MHz范围,处理器开始丢失中断,因此给出了错误的频率。我在数据手册中没有看到任何说明输入捕获可以读取的最大频率。我有一个外部时钟为8 MHz和核心时钟为72 MHz,所以我想我可以读取10 MHz的信号。有什么想法吗?
3个回答

3
请查看TIM_ICInitStructure.TIM_ICPrescaler选项。通常,您会将其设置为TIM_ICPSC_DIV1,以便在每次有效转换时生成中断。
可用的分频器值为1、2、4和8,这将使您有效地减少相应倍数的中断产生率。例如,对于一个10MHz信号和分频器为8,您期望计算出1.25MHz的频率。
对于72MHz HCLK来说,这仍然非常紧张,因此您仍需要小心地优化IRQ处理程序。

2

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

如果确实是这种情况,请思考一下:使用10 MHz输入信号,你将大约每7个CPU周期生成一个中断。在这7个CPU周期内,你需要预算时间将寄存器保存到RAM中,运行IRQ处理函数前奏,运行你编写的中断处理程序的实际代码,运行IRQ处理函数尾声,并恢复寄存器。

最好的情况是,如果你设置了编译器标志以优化速度并且在中断处理程序中没有进行太多处理,那么你需要几十个周期来运行所有这些任务。由于你只有7个周期来运行数十个周期的处理,所以很容易错过中断。


0

你不能在那个频率下使用中断例程。你需要将10MHz作为外部触发器输入到计时器中。然后,你可以使用预分频器和计时器将其分频到适合的较低中断频率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接