【STM32】STM32简述定时器

简介: 【STM32】STM32简述定时器

一、什么是定时器

有计时和定时功能的仪器组件——对于芯片来说,定时器含有计时和定时功能,片内模块——TIM


二、STM32F4xx系列定时器分类

片内外设定时器(14个)

  • 高级定时器:TIM1、TIM8
  • 通用定时器:TIM2——TIM5 TIM9——TIM14
  • 基本定时器:TIM6、TIM7(基本的计时和定时功能)

内核定时器(1个)

  • 系统定时器(SysTisk 滴答定时器)


三、芯片内定时器的基本结构


四、基本定时器只有基本时基单元功能

1、时基单元

  • 计数器寄存器(TIMx_CNT):16位(0~65535)
  • 预分频寄存器(TIMx_PSC)

  • 自动重载寄存器(TIMx_ARR)
    你想定时多久,全靠设置这个ARR
    你设置ARR的值是脉冲的个数单位
    怎么设置ARR要自己算:
  • 如:根据已知提供CNT的脉冲频率f

已知你要定时多久t

ARR=t/(1/f)

2、例子

实现定时器6 TIM6,使其定时0.5s,让LED0翻转

①先使能TIM6时钟

RCC->APB1ENR

RCC_APB1PeriphClockCmd()

②先配置定时器TIM6模块

相关主要寄存器如下:

代码:

定时器6初始化

void TIM6_Init(void)
{
  TIM_TimeBaseInitTypeDef TIMInitStruct;
  NVIC_InitTypeDef NVIC_InitStructure;//用来初始化NVIC指定中断的结构体
  
  
  //1-使能时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

  //2-初始化TIM6时基单元  ARR  PSC
  TIMInitStruct.TIM_Prescaler = 840-1;// 84Mhz/840 = 100Khz   10us/脉冲
  TIMInitStruct.TIM_Period    = 50000-1;//0.5s = 500ms  = 500000us
  TIM_TimeBaseInit(TIM6,&TIMInitStruct);
  
  //3-开启定时器TIm6 更新中断
  TIM6->DIER |= 0x01;
  //TIM_ITConfig()
  
  //4-将TIM6更新中断注册进NVIC
  NVIC_InitStructure.NVIC_IRQChannel = TIM6_DAC_IRQn;//54号和 DAC共用
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
  
  //5-开启定时器6计数器
  TIM6->CR1 |= 0x01;
  //TIM_Cmd()

}


中断服务函数

void TIM6_DAC_IRQHandler(void)
{
  //因为这个TIM6中断号和中断函数和DAC共用
  //为了区分是谁触发中断进来的,可以在中断函数判断标志位
  //if(TIM_GetITStatus(TIM6,TIM_IT_Update);) == 1)
  if(TIM6->SR & 0x01)
  {
    //如果能进来  表示上面SR第0位  更新中断标志位置位了
    GPIO_ToggleBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
    
    TIM6->SR &= ~0x01;//写0清零中断标志位
    //TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
  }
}


相关文章
|
7月前
|
传感器 存储
STM32--TIM定时器(3)
STM32--TIM定时器(3)
163 0
STM32--TIM定时器(3)
|
7月前
|
编解码 芯片
STM32--TIM定时器(2)
STM32--TIM定时器(2)
209 0
|
7月前
|
传感器
STM32--TIM定时器(1)
STM32--TIM定时器(1)
300 0
|
7月前
STM32F103标准外设库——SysTick系统定时器(八)
STM32F103标准外设库——SysTick系统定时器(八)
566 0
STM32F103标准外设库——SysTick系统定时器(八)
|
6月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
472 2
|
5月前
|
传感器
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
stm32f407探索者开发板(二十二)——通用定时器基本原理讲解
491 0
|
5月前
|
芯片
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
stm32f407探索者开发板(十二)——Systick滴答定时器-延时函数讲解
299 0
|
5月前
STM32CubeMX 定时器
STM32CubeMX 定时器
187 0
|
5月前
stm32f407探索者开发板(二十三)——定时器中断实验
stm32f407探索者开发板(二十三)——定时器中断实验
510 0