STM32 使用定时器实现延时函数
时间: 2025-03-02 21:08:12 浏览: 67
STM32 使用定时器实现延时函数
对于STM32而言,当FreeRTOS占用SysTick之后,可以考虑使用其他定时器来创建微秒级别的延时功能。通过配置TIMx(其中x代表具体的定时器编号),能够精确控制时间间隔,从而达到所需的延迟效果。
配置定时器参数
为了确保定时器能提供准确的时间基准,在初始化阶段需设置预分频系数(PSC)以及自动重装载寄存器(ARR),这两个值决定了计数频率和周期长度。例如,如果希望得到1μs的分辨率,则可以根据系统时钟源计算合适的PSC与ARR组合[^1]。
// 初始化定时器用于us级别延时
static void MX_TIM_Init(void){
TIM_HandleTypeDef htim;
// 设置定时器实例,假设这里选用的是TIM17
htim.Instance = TIM17;
// 计算并设定预分频值和自动重载值以获得期望的计数值变化率
// 此处省略具体计算过程...
}
编写延时函数
基于上述已配置好的硬件资源,下面展示了一个简单的delay_us()
函数实现方式:
void delay_us(uint16_t us){
uint16_t differ = 0xFFFF - us - 5; // 考虑到指令执行所需额外消耗的时间
/* 清除当前计数值 */
__HAL_TIM_SET_COUNTER(&htim17, differ);
/* 开始定时器工作 */
HAL_TIM_Base_Start(&htim17);
/* 等待直到计数值超过指定范围 */
while (__HAL_TIM_GET_COUNTER(&htim17) < (0xFFFF - 5));
/* 停止定时器运行 */
HAL_TIM_Base_Stop(&htim17);
}
此段代码片段展示了如何利用STM32中的通用定时器(Timer General Purpose Timer)完成精准度较高的微秒级延时操作[^3]。
阅读全文
相关推荐


















