您当前的位置:首页 > 电子 > 电气软件

四、【STM32 HAL库开发】TIM定时器:实现微秒延时

时间:08-22来源:作者:点击数:

实验目的:使用TIM定时器来实现微妙级延时。

实验现象:输出的方波波形如图,可以看到周期是204us,频率是4.9khz,不是想要的5khz。这可能是因为计算有延时(也可能是我哪里配置的不太对),不过对于延时精度不高的场合,这个误差还可以接受。

一、CubeMX配置

1、配置时钟

把系统时钟配置成72Mhz,配置过程参考第1节

2、配置TIM

当系统时钟频率是72Mhz时,把预分频系数设置成71,那么计数器计数一次,所需时间就是:

3、开启一个GPIO口来观察输出

随便开一个GPIO引脚,我这里开启PA4。

二、写代码

1、编写延时函数

/* USER CODE BEGIN 0 */
#define TIM_HANDLE &htim1 //定义这个是为了方便移植

void delay_us(uint16_t nus)
{
	__HAL_TIM_SET_COUNTER(TIM_HANDLE, 0); //把计数器的值设置为0
	__HAL_TIM_ENABLE(TIM_HANDLE); //开启计数
	while (__HAL_TIM_GET_COUNTER(TIM_HANDLE) < nus); //每计数一次,就是1us,直到计数器值等于我们需要的时间
	__HAL_TIM_DISABLE(TIM_HANDLE); //关闭计数
}
/* USER CODE END 0 */

2、输出一个方波

在main函数的while循环里写:

/* USER CODE BEGIN WHILE */
while (1)
{
    HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4); //翻转PA4的电平
    delay_us(100); //延时100us
    //这样输出的方波周期应该是200us,频率应该是5khz
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门