Day04 嵌入式---基本定时器

定时器概述

1、软件定时原理

使⽤纯软件的⽅式实现定时功能。

存在的问题:定时不太精准。CPU死等。

1)压栈出栈需要花费时间

2)ARM流⽔线体系架构的原因

2、定时器定时原理

使用精准的时基,通过硬件方式,实现定时功能

时基单元:

分频模块(PSC):对外来的时钟进⾏分频。

计数模块(CNT):对来⾃分频模块输出的时钟脉冲进⾏计数。

⾃动重装载模块(ARR):它存储的是计数器的⽬标值,计数器每次累加就⽐较⼆者,⼆者相等计数器溢

出,当计数器溢出时,然后清零计数器寄存器。

核心:计时器

特性表:

常规定时器个数:TIM1 ~ TIM14 ⼗四个定时器

基本定时器:TIM6 TIM7

通⽤定时器:TIM2-TIM5 TIM9-TIM14

⾼级定时器:TIM1 TIM8

定时器类型 定时器 计数模式 预分频系数 产生DMA请求 捕获/比较通道 互补输出
基本定时器 TIM6,TIM7 16 1-65536 可以 0
通用定时器 TIM2,TIM3,TIM4,TIM5 16 1-65536 可以 4
高级定时器 TIM1,TIM8 16 1-65536 可以 4

3、定时器分类

计数模式和溢出条件

基本定时器

1、概念

STM32F407 基本定时器由时钟源、控制器、时基单元组成。 有两个基本定时器 TIM6 和 TIM7,它们

的功能完全相同,资源是完全独⽴的,可以同时使⽤。

2、特性

<1>16位的递增计数器。(计数值:0-65535)

<2>16位的预分频器。(分频系数:1-65536)

<3>可以发出⼀个触发信号,触发DAC进⾏数模转换

<4>在事件更新时(计数器溢出),可以产⽣中断 和 DMA请求

框图

溢出条件:CNT == ARR

时钟源

<1>定时器的核⼼是计算器,要实现计数功能,⾸先要给它⼀个时钟源。基本定时器时钟挂

载在 APB1 总线,所以它的时钟来⾃于 APB1 总线,但是基本定时器时钟不是直接由 APB1总线直

接提供,⽽是先经过⼀个倍频器。

<2>当 APB1 的预分频器系数为 1 时,这个倍频器系数为 1,当 APB1 的预分频器系数≥2

分频时,这个倍频器系数就为 2 。

<3>我们知道APB1的分频系数为4,≥2,所以,倍频系数为2,基本定时器的时钟源为 42

x2=84MHZ

控制器:控制定时器复位、使能、计数等功能之外,还可以⽤于触发 DAC 转换。

时基单元

<1>fCK_CNT的时钟计算: fCK_PSC / (PSC[15:0]+1)

<2>预分频器寄存器(TIMx_PSC)可以在运⾏过程中修改它的数值,新的预分频数值将在下

⼀个更新事件时起作⽤。

<3>影⼦寄存器:实际起作⽤的寄存器,不可直接访问。当更新事件发⽣时,值才写⼊影⼦

寄存器(可配置)。

定时器中断配置

<1>开启TIM时钟, RCC_APB1PeriphClockCmd();//根据不同定时器选择对应时钟函数

<2>配置NVIC, NVIC_Init();

<3>配置TIM,TIM_TimeBaseInit();

<4>开启中断。TIM_ITConfig();

<5>使能定时器:TIM_ITCmd();

<6>重写中断函数,TIM6_DAC_IRQHandler()

<7>清除中断标志位。void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

时间


Tout:溢出时间,即定时多长时间
TIMxCLK:定时器时钟频率

  1. //定时器时钟源 TIMxCLK = 2 * PCLK1 25     
  2. //        PCLK1 = HCLK / 4 26     
  3. //        => TIMxCLK=HCLK/2=SystemCoreClock/2=84MHz 

ARR:定时器周期,初始化结构体时用 TIM_Period 表示

PSC:预分频大小,初始化结构体时用 TIM_Prescaler 表示
 
比如我们需要一个 1s 周期的定时器,具体这两个寄存器值该如何设置。

假设,我们先设置 TIMx_ARR寄存器值为 9999 ,即当 TIMx_CNT 从 0 开始计算,刚好等于 9999 时生成事件,总共计数 10000 次,那么如果此时时钟源周期 为 100us 即可得到刚好 1s 的定时周期。

接下来问题就是设置 TIMx_PSC 寄存器值使得 CK_CNT 输出为 100us 周期 (10000Hz) 的时钟。预分频器的输入时钟 CK_PSC 为 84MHz,所以设置预分频器值为 (8400-1) 即可满 足。

实验

使⽤基本定时器实现定时中断的功能,当计数事件溢出时,点亮LED。

void Tim_Init()
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
    NVIC_InitTypeDef NVIC_InitStruct1;
    NVIC_InitStruct1.NVIC_IRQChannel=TIM6_DAC_IRQn;
    NVIC_InitStruct1.NVIC_IRQChannelCmd=ENABLE;
    NVIC_InitStruct1.NVIC_IRQChannelPreemptionPriority=0;
    NVIC_InitStruct1.NVIC_IRQChannelSubPriority=1;
    NVIC_Init(&NVIC_InitStruct1);
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct1;
    TIM_TimeBaseInitStruct1.TIM_Period=4999;
    TIM_TimeBaseInitStruct1.TIM_Prescaler=8399;
    TIM_TimeBaseInit(TIM6,&TIM_TimeBaseInitStruct1);
    TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE); //定时中断配置
  TIM_Cmd(TIM6,ENABLE); //使能定时器
}
void TIM6_DAC_IRQHandler(void) //重写定时器中断函数
{
 if(TIM_GetITStatus(TIM6,TIM_IT_Update) == SET)
 {
 
 GPIO_ToggleBits(GPIOF,GPIO_Pin_9); //翻转电平
 GPIO_ToggleBits(GPIOF,GPIO_Pin_10);
 TIM_ClearITPendingBit(TIM6,TIM_IT_Update);
 } 
}
int main()
{
    Tim_Init();
    Led_Init();
    Led1_Close();
    Led2_Close();
    while(1)
    {
              TIM6_DAC_IRQHandler();
    }
}

相关推荐

  1. Day03 嵌入---中断

    2024-02-22 15:16:02       53 阅读
  2. 嵌入学习】ARM day04.16

    2024-02-22 15:16:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-22 15:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-22 15:16:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-22 15:16:02       82 阅读
  4. Python语言-面向对象

    2024-02-22 15:16:02       91 阅读

热门阅读

  1. 大模型中的token是什么?

    2024-02-22 15:16:02       52 阅读
  2. windows命令行加入与移除管理员组

    2024-02-22 15:16:02       57 阅读
  3. SpringBoot项目启动后执行指定方法的四种实现

    2024-02-22 15:16:02       53 阅读
  4. react中useState、setState、usemeno、meno区别

    2024-02-22 15:16:02       47 阅读
  5. 路由器配置DMZ主机映射

    2024-02-22 15:16:02       73 阅读
  6. 提升爬虫效率:多线程,多进程,多协程

    2024-02-22 15:16:02       45 阅读
  7. 近红外γ-谷氨酰转肽酶(GGT)荧光探针(NRh-G)星戈瑞

    2024-02-22 15:16:02       51 阅读
  8. 物联网和人工智能的融合

    2024-02-22 15:16:02       60 阅读
  9. android 全局异常处理封装

    2024-02-22 15:16:02       51 阅读
  10. C语言内存模型的深度剖析

    2024-02-22 15:16:02       51 阅读