STM32标准库函数学习 --- 通用定时器(计数、延时)部分

//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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值