惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
MongoDB | Blog
MongoDB | Blog
博客园_首页
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
B
Blog RSS Feed
D
Docker
IT之家
IT之家
大猫的无限游戏
大猫的无限游戏
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
G
Google Developers Blog
V
V2EX
量子位
雷峰网
雷峰网
月光博客
月光博客
云风的 BLOG
云风的 BLOG
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog

静水流深

NAS连续运行58天- 静水流深 从森林走向森林- 静水流深 1Panel添加群晖Webdav作为备份账号- 静水流深 Halo—Joe3主题添加页脚信息- 静水流深 【转载】调试的本质:从混乱到有序,产品状态逐步确定- 静水流深 INAV航点飞行- 静水流深 STM32 Cube MX迁移工程- 静水流深 INAV固定翼之AUTO Tune 和 AUTO Level Trim- 静水流深 STM32 HAL库 printf 重定向至指定串口输出- 静水流深 关于3D打印航模一些想法- 静水流深 愿有岁月可回首- 静水流深 如何用深度学习做目标识别?—— 完整工具链详解- 静水流深 对深度学习与图像目标识别相关概念的理解- 静水流深 U-Center配置GPS- 静水流深 1Panel申请和续签证书&配置反向代理- 静水流深 早点睡,早点起,做好手头的事- 静水流深 Mission Planner地面站模拟飞行和MAVLINK消息UDP转发- 静水流深 Ardupilot设置MSP协议OSD- 静水流深 ArduPilot VTOL QuickTune 快速自动调参记录- 静水流深
STM32定时器—定时周期测试例程- 静水流深
唐韵 · 2001-05-25 · via 静水流深

此代码用于测试定时器的定时周期
写在定时器中断回调函数中

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

	if (htim->Instance == TIM5)

	{

	static uint32_t last_tick = 0;

	uint32_t now_tick = HAL_GetTick();

	uint32_t diff = now_tick - last_tick;

    last_tick = now_tick;

  
	// 通过串口或调试器输出diff,观察周期

	char msg[32];

	int len = snprintf(msg, sizeof(msg), "TIM5 interval: %lu ms\r\n", diff);

	HAL_UART_Transmit(&huart1, (uint8_t*)msg, len, 100);

	}

}

此代码调用了系统滴答计时器,分辨率为1ms,可以测试定时周期大于1ms(且为1ms 的整数)的计时器。

举例:串口输出的信息为 TIM5 interval: 1 ms,说明两次回调之间的 HAL_GetTick() 差值为 1ms。也就是定时周期为1ms。TIM5 interval后面的数值代表定时周期。


另外 ,即使看到TIM5 interval: 1 ms但这并不一定代表定时器真正的周期就是 1ms,原因如下:

  1. HAL_GetTick() 的分辨率是 1ms,它只能反映“至少”过了1ms,实际可能是0.5ms~1.49ms之间都显示为1。
  2. 如果你的定时器周期小于1ms(比如0.5ms),diff 也会大部分时间显示为0,偶尔跳1。
  3. 如果你的定时器周期大于1ms(比如5ms),diff 会显示为5。

提示

  • 如果你每次都看到输出为1,大概率定时器周期就是1ms左右。
  • 如果你定时器实际配置为0.5ms,但用 HAL_GetTick() 测试,可能会看到偶尔1、偶尔0。
  • 更精确的周期测试,建议用 DWT 计数器或定时器自身的 CNT 计数