STM32——TIM定时器

发布时间:2024-07-29  

STM32共有16个定时器,定时器分类:2个高级控制定时器、

                   10个通用定时器、

                    2个基本定时器、

                  2个看门狗定时器、

定时器特性:

 

 最大定时器时钟配置专用定时器:RCC_DCKCFGR   ----->>>>RCC dedicated clock configuration register

               TIMPRE位:主要用于定时器预分频选择,个人认为这称作为倍频选择更合适。TIMxCLK =  ? xPCLKx。
重装载定时器:TIMx_ARR,存储内容为要装载到实际重装载寄存器的值。

计数寄存器:TIMx_CNT,当前计数值

 

基本定时器框图:

 

 方框中的阴影部分为影子寄存器:既有两个定时器。

基本定时器主要注意:

          1、时钟源   ,RCC_DCKCFGR 控制

          2、控制器    ,

          3、计数器    , 计数器寄存器(TIMx_CNT) 、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),
          4、定时器周期计算

标准库初始化结构体:

TIM_TimeBaseInitTypeDef 

TIM_TimeBaseInit

 

入门实验,使用定时器产生0.5秒的中断,使LED实现亮灭反转循环,


宏定义


#ifndef __BSP_BASIC_TIME_H

#define __BSP_BASIC_TIME_H

#include "stm32f4xx.h"

// 定时器源选择

#define BASIC_TIM                TIM6

#define BASIC_TIM_CLK        RCC_APB1Periph_TIM6


//中断

#define BASIC_TIM_IRQn                    TIM6_DAC_IRQn

#define BASIC_TIM_IRQHandler        TIM6_DAC_IRQHandler


void TIMx_Configuration();


#endif //__BSP_BASIC_TIME_H


中断配置,基本定时器模式配置


#include "./tim/bsp_basic_time.h"

/*

编程要点:

初始化 RGB 灯的 GPIO

开启基本定时器时钟

设置定时器周期和预分频器

启动定时器更新中断,并开启定时器

定时器中断服务函数实现 RGB 灯的反转

*/


// 中断函数

static void TIMx_NVIC_Configuretion()

{

        NVIC_InitTypeDef NVIC_InitStructure;

        //设置中断组

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

        //设置中断来源

        NVIC_InitStructure.NVIC_IRQChannel = BASIC_TIM_IRQn;

        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

        //设置抢占优先级

        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;

    

        NVIC_Init(&NVIC_InitStructure);

}


//定时器基本模式设置

static void TIM_Mode_Config(void)

{

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    // 开启 TIM_CLK ,X(6,7)

    RCC_APB1PeriphClockCmd(BASIC_TIM_CLK,ENABLE);

    // 累计 TIM_Period 个后产生新的中断或者更新

    // 当定时器从0计数到4999,即为5000次,为一个定时周期

    TIM_TimeBaseStructure.TIM_Period = 5000-1;

    // 设置定时频率 

    TIM_TimeBaseStructure.TIM_Prescaler = 9000-1;

    // 初始化定时器

    TIM_TimeBaseInit(BASIC_TIM,&TIM_TimeBaseStructure    );

    

    // 清除定时器更新中断标志位

     TIM_ClearFlag(BASIC_TIM,TIM_FLAG_Update);

    //开启定时器更新中断

    TIM_ITConfig(BASIC_TIM,TIM_IT_Update,ENABLE);

    

    // 定时器使能

    TIM_Cmd(BASIC_TIM,ENABLE);

}


void TIMx_Configuration()

{

    TIMx_NVIC_Configuretion();

    TIM_Mode_Config();

}


主函数调用


int main(void)

{

    /* LED 端口初始化 */

    LED_GPIO_Config();     

  

  /*初始化按键*/

  Key_GPIO_Config();

    TIMx_Configuration();

 

    /* 轮询按键状态,若按键按下则反转LED */ 

    while(1)                            

    {       

 

    }

}


中断函数


void BASIC_TIM_IRQHandler(void)

{

    if( TIM_GetITStatus( BASIC_TIM, TIM_IT_Update) != RESET )

    {

        LED1_TOGGLE;

        TIM_ClearITPendingBit(BASIC_TIM , TIM_IT_Update);

    }

    

}

主要引用的函数:TIM_ClearFlag  影响TIMx_SR 寄存器的 UIF 位
        TIM_ITConfig  在发生上溢时产生中断。
        TIM_ClearITPendingBit   清除中断标志位

文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>