普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)
简介
使用TIM2实现1us延时
其他知识
公式
时间(s)=1/时钟频率(Hz)由导出 1us = 1/1M(Hz)
预分配设置
系统时钟是72MHz, 要1us的延时, 预分配得设置为72-1
计数器重载设置
设置为最大值65535,这样延时的时间可以设置的最大值也将是65535us, 一次count代表一个计数周期也就是1us
接口
HAL_StatusTypeDef HAL_TIM_Base_Start(TIM_HandleTypeDef *htim); // 是一个用于启动定时器的函数
HAL_StatusTypeDef HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim); // 关闭定时器
__HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__) // 设置Counter值
__HAL_TIM_GET_COUNTER(__HANDLE__) // 获取Counter值
实现步骤
创建项目
参考 普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)
TIM2 初始化
添加用户代码
time.c /main.c增加函数
/*
* us: 延时参数 0 ~65535, 与couter的重置值相符
*/
void delay_us(uint16_t us)
{
__HAL_TIM_SET_COUNTER(&htim2, 0); // counter重置为0
while (__HAL_TIM_GET_COUNTER(&htim2) < us); // couter值大于等于延时时间, 退出循环
}
int main()
{
...
HAL_TIM_Base_Start(&htim2); // 开启定时器
...
}
参考
普中STM32-PZ6806L开发板(HAL库函数实现-批量操作GPIO引脚实现跑马灯)
在HAL库利用硬件定时器实现微秒级us延时