stm32之定时器配置

单片机:野火的stm32f103系列

目标:掌握定时器的使用

  • 1、简介:

stm32定时器包括基本定时器、通用定时器、高级定时器。

  • 2、基本配置步骤

  1. 使能时钟
    // 开启定时器时钟,即内部时钟CK_INT=72M
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
  1. 初始化参数

TIM_Prescaler--预分频

 // 时钟预分频数
 TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;

TIM_CounterMode--计数模式

// 计数器计数模式,设置为向上计数
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;

TIM_Period--重装载值

TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;

TIM_ClockDivision--分频因子

// 时钟分频因子 ,没用到不用管
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;    

TIM_RepetitionCounter--重复计数器,高级定时器才用到

// 重复计数器的值,没用到不用管
TIM_TimeBaseStructure.TIM_RepetitionCounter=0;    
  1. 设置中断优先级并使能
// 中断优先级配置
static void GENERAL_TIM_NVIC_Config(void)
{
    NVIC_InitTypeDef NVIC_InitStructure; 
    // 设置中断组为0
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);        
        // 设置中断来源
    NVIC_InitStructure.NVIC_IRQChannel = GENERAL_TIM_IRQ ;    
        // 设置主优先级为 0
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;     
      // 设置抢占优先级为3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;    
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}
  1. 清楚中断标志位
// 清除计数器中断标志位
TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
总结:

使用stm32的定时器功能,首先,需要配置TIM定时器初始化和NVIC中断优先级,配置好后,使用定时器的功能,即计数到一定值,做什么功能。

一、定时器时钟来自内部时钟72MHz,预分频系数Prescaler的值对72MHz进行缩小,以得到合适的时钟频率,若Prescaler=71时,得到72/(71+1)=1MHz=10^6Hz,则一个周期时间为1/10^6s,自动重装载寄存器的值Period=999时,则定时时间为:(999+1)* (1/10^6)=0.001s。

代码
static void GENERAL_TIM_Mode_Config(void)
{   
      
    TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;    
    // 开启定时器时钟,即内部时钟CK_INT=72M
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    //GENERAL_TIM_APBxClock_FUN(GENERAL_TIM_CLK, ENABLE);    
    // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断
    TIM_TimeBaseStructure.TIM_Period=GENERAL_TIM_Period;
    // 时钟预分频数
    TIM_TimeBaseStructure.TIM_Prescaler= GENERAL_TIM_Prescaler;    
    // 时钟分频因子 ,没用到不用管
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        
    // 计数器计数模式,设置为向上计数
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;         
    // 重复计数器的值,没用到不用管
    TIM_TimeBaseStructure.TIM_RepetitionCounter=0;    
    // 初始化定时器
    TIM_TimeBaseInit(GENERAL_TIM, &TIM_TimeBaseStructure);
    
    
    // 清除计数器中断标志位
    TIM_ClearFlag(GENERAL_TIM, TIM_FLAG_Update);
      
    // 开启计数器中断
    TIM_ITConfig(GENERAL_TIM,TIM_IT_Update,ENABLE);
        
    // 使能计数器
    TIM_Cmd(GENERAL_TIM, ENABLE);
}
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值