最近用到的模块时序要求比较高,要用到us定时,网上的代码页大同小异,在这里作个总结。
一、通用定时器循环等待
1、cubeMX配置(只开一个通用定时器就行,时钟那些基本配置不截图了),我用的是STM32F103ZET6,使用外部时钟72M,所以定时器的分频系数为72-1,然后的得到的就是72M/72=1M Hz,也就是1us。上图:
2.添加代码
在tim.c中添加
/* USER CODE BEGIN 1 */
#include "stm32f1xx_hal_tim.h"
void HAL_Delay_us(uint32_t us)
{
uint32_t tem=us;
__HAL_TIM_SET_COUNTER(&htim2,0); //将初值设置为0
HAL_TIM_Base_Start(&htim2); //开启定时器2
while(__HAL_TIM_GET_COUNTER(&htim2)<tem); //计时等待,当count达到所需的us跳出循环
HAL_TIM_Base_Stop(&htim2); // 关闭定时器
}
/* USER CODE END 1 */
记得在tim.h中声明函数
void HAL_Delay_us(uint32_t us);
至此,完结。
二、基于HAL_Delay()上改动
这个可以去看看这个:stm32之HAL库实现us延时方法
我觉得挺巧妙的!