//STM32标准库函数:
//通用定时器(计数、延时)常用库函数:
1.void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct); --- //自带UG位置一功能
/*
函数功能:定时器时基单元初始化
返回值:void
形参:
TIM_TypeDef* TIMx ---------------------- TIMx(具体的定时器)
TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct ----------------------- &TIM_TimeBaseInitStruct(时基单元信息结构体的地址)
*/
2.void TIM_SelectOnePulseMode(TIM_TypeDef* TIMx, uint16_t TIM_OPMode);
/*
函数功能:选择单脉冲模式
返回值:void
形参:
TIM_TypeDef* TIMx ---------------------- TIMx(具体的定时器)
uint16_t TIM_OPMode --------------------- TIM_OPMode_Single / TIM_OPMode_Repetitive(单脉冲触发 / 重复触发)
*/
3.TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);
/*
函数功能:使能定时器
返回值:void
形参:
TIM_TypeDef* TIMx ---------------------- TIMx(具体的定时器)
FunctionalState NewState ---------------- ENABLE / DISABLE(使能 / 禁止)
*/
4.void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);
/*
函数功能:定时器中断使能
返回值:void
形参:
TIM_TypeDef* TIMx ---------------------- TIMx(具体的定时器)
uint16_t TIM_IT ------------------------- TIM_IT_xxx(中断名)
FunctionalState NewState ---------------- ENABLE / DISABLE(使能 / 禁止)
*/
5.FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
/*
函数功能:获取具体标志位的状态(任务级)
返回值:FlagStatus ---- SET / RESET (1 / 0)
形参:
TIM_TypeDef* TIMx ----------------------- TIMx(具体的定时器)
uint16_t TIM_FLAG ----------------------- TIM_FLAG_xxx(具体标志位名)
*/
6.void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);
/*
函数功能:清除具体标志位(任务级)
返回值:void
形参:
TIM_TypeDef* TIMx ----------------------- TIMx(具体的定时器)
uint16_t TIM_FLAG ----------------------- TIM_FLAG_xxx(具体标志位名)
*/
7.ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);
/*
函数功能:获取具体中断标志位状态(中断级)
返回值:ITStatus ---- SET / RESET (1 / 0)
形参:
TIM_TypeDef* TIMx ----------------------- TIMx(具体的定时器)
uint16_t TIM_IT ------------------------- TIM_IT_xxx(具体中断标志位名)
*/
8.void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);
/*
函数功能:清除具体中断标志位
返回值:void
形参:
TIM_TypeDef* TIMx ----------------------- TIMx(具体的定时器)
uint16_t TIM_IT ------------------------- TIM_IT_xxx(具体中断标志位名)
*/
//定时器初始化结构体TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct 具体成员说明:
//1.TIM_TimeBaseInitStruct.TIM_CounterMode = ;
可选填:
#define TIM_CounterMode_Up ((uint16_t)0x0000) --- 递增计数(常用)
#define TIM_CounterMode_Down ((uint16_t)0x0010) --- 递减计数(常用)
#define TIM_CounterMode_CenterAligned1 ((uint16_t)0x0020) --- 中心对齐1
#define TIM_CounterMode_CenterAligned2 ((uint16_t)0x0040) --- 中心对齐2
#define TIM_CounterMode_CenterAligned3 ((uint16_t)0x0060) --- 中心对齐3
//2.TIM_TimeBaseInitStruct.TIM_Prescaler = ; --- 填入定时器预分频数
//3.TIM_TimeBaseInitStruct.TIM_Period = ; --- 填入计数值
//通用定时器计数延时例程:
/*
函数功能:TIM5微秒级延时
返回值:void
形参:u16 nus
函数说明:
计时时间到,更新事件标志位置一
*/
void Tim5_Delay_us(u16 nus)
{
//打开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
//配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct = {0};
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//配置为递增计数
TIM_TimeBaseInitStruct.TIM_Period = nus * 2 - 1;//配置ARR为nus*2
TIM_TimeBaseInitStruct.TIM_Prescaler = 42 - 1;//配置PSC为84
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStruct);//开始初始化时基单元
TIM_ClearFlag(TIM5, TIM_FLAG_Update);//清除更新中断标志位
//配置单脉冲模式
TIM_SelectOnePulseMode(TIM5, TIM_OPMode_Single);
//使能TIM5
TIM_Cmd(TIM5, ENABLE);
//判断时间是否到(更新事件标志位)
while(!(TIM_GetFlagStatus(TIM5, TIM_FLAG_Update)));//若计时时间没到则卡住程序
//清除更新事件标志位
TIM_ClearFlag(TIM5, TIM_FLAG_Update);
}
/*
函数功能:TIM5毫秒级延时
返回值:void
形参:u16 nms
函数说明:
计时时间到,更新事件标志位置一
*/
void Tim5_Delay_ms(u16 nms)
{
//打开时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
//配置时基单元
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct = {0};
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//配置为递增计数
TIM_TimeBaseInitStruct.TIM_Period = nms * 1000 - 1;//配置ARR为nus*1000
TIM_TimeBaseInitStruct.TIM_Prescaler = 84 - 1;//配置PSC为84
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseInitStruct);//开始初始化时基单元
TIM_ClearFlag(TIM5, TIM_FLAG_Update);//清除更新中断标志位
//配置单脉冲模式
TIM_SelectOnePulseMode(TIM5, TIM_OPMode_Single);
//使能TIM5
TIM_Cmd(TIM5, ENABLE);
//判断时间是否到(更新事件标志位)
while(!(TIM_GetFlagStatus(TIM5, TIM_FLAG_Update)));//若计时时间没到则卡住程序
//清除更新事件标志位
TIM_ClearFlag(TIM5, TIM_FLAG_Update);
}