硬汉嵌入式论坛

 找回密码
 立即注册
查看: 589|回复: 6
收起左侧

[STM32H7] 两个定时器同时定时但是数值相差1000倍

[复制链接]

1

主题

8

回帖

11

积分

新手上路

积分
11
发表于 2025-4-14 01:54:26 | 显示全部楼层 |阅读模式
我的板子用TIM6作为HAL_delay的定时器,
同时我作了一个us级的TIM3定时器,
但是当我用TIM3定时时HAL_tick会1000倍的增加,
但是定时时间应该是没有差1000倍,大佬能解答一下吗,万分感谢
TIM3定时器,开启我放在delay_us里了
// 使用TIM3
void delay_init(void)
{
  /* Set TIMx instance */
  htim3.Instance = TIM3;
  htim3.Init.Period            = 1;
  htim3.Init.Prescaler         = 200 - 1;
  htim3.Init.CounterMode       = TIM_COUNTERMODE_UP;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;

  while (HAL_TIM_Base_Init(&htim3) != HAL_OK);

  // HAL_TIM_Base_Start_IT(&htim3);

}

下面是HAL_delay的数值, 只delay了5ms




回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-4-14 08:46:35 | 显示全部楼层
仅看你的TIM3主频按照200MHz配置

定时频率 = TIMxCLK / (usPrescaler + 1)/usPeriod + 1) = 200M/(1+1)/(200-1+1) = 500K



回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2025-4-14 10:08:19 | 显示全部楼层
eric2013 发表于 2025-4-14 08:46
仅看你的TIM3主频按照200MHz配置

定时频率 = TIMxCLK / (usPrescaler + 1)/usPeriod + 1) = 200M/(1+1 ...

  uint32_t tick1 = HAL_GetTick();
  delay_ms(5);
  // HAL_Delay(5000);
  uint32_t tick2 = HAL_GetTick();
  SCB_CleanDCache();
  debug("%lu", tick2 - tick1);

这是我测量定时的代码, delay_ms用的TIM3, HAL_tick用的TIM6,
就这块tick2-tick1会变成5000, 但是事实上没有5s,只是tick1000倍的增加
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2025-4-14 13:34:45 | 显示全部楼层
chenfs 发表于 2025-4-14 10:08
uint32_t tick1 = HAL_GetTick();
  delay_ms(5);
  // HAL_Delay(5000);

把你的TIM6和TIM3中断都打开,做个IO反转,测试确实没问题的话,

那就是你的delayms实现有问题
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2025-4-14 13:56:08 | 显示全部楼层
eric2013 发表于 2025-4-14 13:34
把你的TIM6和TIM3中断都打开,做个IO反转,测试确实没问题的话,

那就是你的delayms实现有问题

感谢硬汉哥,我的delay_ms每次需要打开中断再关闭,可能函数开销多了一点
回复

使用道具 举报

59

主题

675

回帖

857

积分

金牌会员

积分
857
发表于 2025-4-14 17:00:13 | 显示全部楼层
应该是定时器时钟源频率不同吧,
回复

使用道具 举报

1

主题

8

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2025-4-15 14:38:25 | 显示全部楼层
ou513 发表于 2025-4-14 17:00
应该是定时器时钟源频率不同吧,

TIM6是HAL库初始化的,TIM3目前配成了2M,可能是我每次都重新开启中断的事
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-13 03:42 , Processed in 0.054395 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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