[STM32F4] 使用STM32F407定时器中断周期不准的问题

[复制链接]
3525|35
 楼主| jcky001 发表于 2023-7-3 10:42 | 显示全部楼层 |阅读模式
外置晶振是8M,使用最高的系统时钟168M,然后使用定时器TIM8作为定时器更新中断,程序的寄存器PLL_N = 336;PLL_P = 2;PLL_M = 8;要配置一个16KHz,也即是周期为62.5us的中断,但是实际测试出来就是查了一点,利用一进入中断置GPIO的方式测试,示波器实测63.2us,也试过用Uint64的计数器,测试13分钟,测试记录到的值和理论值相差7.9s左右,所以是排除了程序置GPIO所用的时间导致的,实在查不出那儿的问题,望大神们指教一下:

如果配置成125us,实测126us,总是达不到理论的周期。定时器的配置:

TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3; TIM_TimeBaseStructure.TIM_Period = 10500; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
两只袜子 发表于 2023-7-3 14:23 | 显示全部楼层
要么你时钟有问题,

要么你的测量有问题。
cr315 发表于 2023-7-4 10:00 | 显示全部楼层
10500这个修改为10500 - 1,试一下。
lzmm 发表于 2023-7-5 10:10 | 显示全部楼层
STM32F407微控制器中,定时器可以使用内部时钟源(如APB1或APB2总线时钟)或外部时钟源(如晶振)作为时钟输入。
hudi008 发表于 2023-7-5 10:48 | 显示全部楼层
参考STM32F407的参考手册和技术支持文档
maqianqu 发表于 2023-7-5 11:43 | 显示全部楼层
怎么在中断中检验时间是否正确              
abotomson 发表于 2023-7-5 12:04 | 显示全部楼层
在定时器中断处理函数内部,如果存在复杂的代码逻辑或者大量的数据处理,会导致中断处理耗时较长,进而影响到下一个中断的触发时间。
cashrwood 发表于 2023-7-5 12:25 | 显示全部楼层
外部电磁噪声、电源波动等因素可能会导致定时器时钟不稳定
dspmana 发表于 2023-7-5 12:37 | 显示全部楼层
系统时钟配置不准               
i1mcu 发表于 2023-7-5 14:08 | 显示全部楼层
定时超时如何计算?与时钟有何关联
hilahope 发表于 2023-7-5 14:27 | 显示全部楼层
可能存在芯片硬件问题。               
mnynt121 发表于 2023-7-5 14:33 | 显示全部楼层
将定时器的预分频值正确设置为产生期望的定时中断周期。
sesefadou 发表于 2023-7-5 15:05 | 显示全部楼层
定时器的预分频值决定了定时器时钟的频率,从而影响了定时器中断的触发周期。
wwppd 发表于 2023-7-5 16:03 | 显示全部楼层
检查时钟源的稳定性和精度,确保它与你期望的频率一致。
AloneKaven 发表于 2023-7-5 18:06 | 显示全部楼层
是不是时钟配置的问题啊
maqianqu 发表于 2023-7-5 22:06 | 显示全部楼层
如果多个中断同时发生,并且它们具有相同的优先级,则无法保证它们的触发顺序。
hilahope 发表于 2023-7-6 11:27 | 显示全部楼层
某些编译器的优化设置可能会影响定时器的准确性。
tabmone 发表于 2023-7-6 16:03 | 显示全部楼层
尽量减少中断处理函数的执行时间。
Jacquetry 发表于 2023-7-6 23:13 | 显示全部楼层
时钟有问题吧
月亮一键变蓝 发表于 2023-7-7 22:10 | 显示全部楼层
有点误差也是可以的啊,才1us
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1653

主题

5766

帖子

6

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