我有一个10 MHz的高速时钟连接到处理器的TIM4输入捕获引脚(ch.3)。我想验证时钟是否以10 MHz的速度运行,并捕获处理器的输入。我用输入捕获模块对处理器进行了编码,它在较低频率(大约1 kHz左右)下工作得很好。一旦我开始将频率提升到MHz范围,处理器就开始错过中断,因此给我的频率是错误的。我在数据表中没有看到说明输入捕获可以读取的最大频率的任何地方。我的外部时钟为8 MHz,内核时钟为72 MHz,因此我可以想象我可以读取10 MHz信号。有什么想法吗?
发布于 2014-09-09 21:13:34
看看TIM_ICInitStructure.TIM_ICPrescaler选项。通常,您会将其设置为TIM_ICPSC_DIV1,以便在每次有效转换时都会生成中断。
预分频器值为1、2、4和8,您可以通过该因子有效地降低中断生成率。例如,对于预分频器为8的10 For信号,您期望计数的频率为10 for /8=1.25 for。
对于72 IRQ的HCLK来说,这仍然是相当紧张的,所以你仍然需要小心地优化你的IRQ处理器。
发布于 2014-06-13 11:25:20
看起来您正在为时钟的每个上升(或下降)边沿生成一个中断请求。
如果确实是这样,那么考虑一下这个问题:对于10 MHz的输入信号,大约每7个CPU周期就会产生一个中断。在这7个CPU周期中,您需要预算时间以将寄存器保存到RAM、运行IRQ处理程序函数prolog、运行您为中断处理程序编写的实际代码、运行IRQ处理程序函数epilogue并恢复寄存器。
最好的情况是,如果您设置编译器标志来优化速度,并且在中断处理程序中没有做太多处理,那么您将看到数十个周期来运行所有这些任务。由于您只有7个周期来运行数十个周期的处理,因此错过中断也就不足为奇了。
发布于 2019-06-06 17:02:33
您不能在该频率下使用中断例程。您需要将10 the输入作为定时器的外部触发器。然后,您可以使用预分频器和定时器将频率降低到合适的较低中断频率。
https://stackoverflow.com/questions/24044034
复制相似问题