久芯网

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

avatar ousam 提问时间: 2023-06-29 08:11:15 / 未解决

外置晶振是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);


如需获得 STM32F407 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

3个回答
  • avatar 废鱼
    回答时间: 2023-06-29 08:34:41

    10500这个修改为10500 - 1,试一下。

  • avatar ousam
    回答时间: 2023-06-29 09:07:17
    废鱼 发表于 2023-6-20 16:09
    10500这个修改为10500 - 1,试一下。

    试过了,没有多大用,起码改为10500-100才接近62.5us

  • avatar butterflyspring
    回答时间: 2023-06-29 09:36:13

    定时器的实质就是给数字分频器,只要输入时钟准确,分频后也都是准确的。 从配置上看: Auto-reload register (TIMx_ARR) 这个寄存器的值,也就是 TIM_TimeBaseStructure.TIM_Period = 10500; 应该减1。

会员中心 微信客服
客服
回到顶部