普中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 初始化

普中STM32-PZ6806L开发板(HAL库函数实现-TIM2实现us延时)_第1张图片

添加用户代码

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延时

你可能感兴趣的:(普中STM32-PZ6806L,stm32,嵌入式硬件,单片机,us延时)