STM32F427 使用定时器T4作为延时定时器
设置如下:主要是预分频设置为90,因为系统APB1的时钟是90Hz 预分频90
#ifndef __DELAY_H__
#define __DELAY_H__
#include "stdint.h"
void delay_us(uint32_t us);
void delay_ms(uint32_t us);
#endif
C文件
#include "delay.h"
#include "main.h"
#include "stdio.h"
extern TIM_HandleTypeDef htim4;
//使用一个定时器延时1us
void delay_us(uint32_t us)
{
if(us>65535)
{
us=65535;
printf("%s %d param us is overrun \r\n",__FILE__,__LINE__);
}
//计数器清零
__HAL_TIM_SET_COUNTER(&htim4,0);
//设置重载值,也就是需要计数的最大值
__HAL_TIM_SET_AUTORELOAD(&htim4,us);
//开始计数
HAL_TIM_Base_Start(&htim4);
//等待计数事件到
while(!__HAL_TIM_GET_FLAG(&htim4,TIM_FLAG_UPDATE));
//清除转态标志
__HAL_TIM_CLEAR_FLAG(&htim4,TIM_FLAG_UPDATE);
//停止计数
HAL_TIM_Base_Stop(&htim4);
}
//使用一个定时器延时1ms
void delay_ms(uint32_t ms)
{
for(uint32_t i=0;i<ms;i++)
{
delay_us(1000);
}
}
|