OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6310|回复: 1

使用TIM4定时器更新中断,只有第一次定时准确,后面定时无规律

[复制链接]

14

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2019-1-8
在线时间
21 小时
发表于 2022-12-5 17:15:16 | 显示全部楼层 |阅读模式
10金钱

代码附上,系统时钟是168Mhz,定时器时钟是84Mhz分频8400,实际就是10000Hz,重装值是10000。然后就是配置中断服务函数。

现在的现象是第一次定时1S没问题,但是后面进入中断的时间就杂乱无章,无规律可言。

配置的中断优先级分组是4,没有贴出来。

  1. void TIM4_Init(void)
  2. {
  3. NVIC_InitTypeDef NVIC_InitStructure;
  4. TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
  5. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);

  6. NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;
  7. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  8. NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
  9. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  10. NVIC_Init(&NVIC_InitStructure);

  11. TIM_TimeBaseInitStructure.TIM_Period = 10000-1;
  12. TIM_TimeBaseInitStructure.TIM_Prescaler = 8400-1;
  13. TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  14. TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;

  15. TIM_TimeBaseInit(TIM4, &TIM_TimeBaseInitStructure);
  16. // TIM_ARRPreloadConfig(TIM4, ENABLE);
  17. // TIM_ClearFlag(TIM4, TIM_FLAG_Update);
  18. TIM_ITConfig(TIM4, TIM_IT_Update,ENABLE);
  19. TIM_Cmd(TIM4,ENABLE);
  20. }

  21. void TIM4_IRQHandler(void)
  22. {
  23.     if(TIM_GetITStatus(TIM4, TIM_IT_Update)!= RESET)
  24.     {
  25.     TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  26.     }
  27. }
复制代码


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2019-1-8
在线时间
21 小时
 楼主| 发表于 2022-12-6 21:20:41 | 显示全部楼层
已解决,定时是准的。是测时有误
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 23:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表