首页 > 其他分享 >stm32定时器笔记

stm32定时器笔记

时间:2023-04-02 22:00:47浏览次数:47  
标签:NVIC 定时器 TIM6 分频 笔记 stm32 TIM 时钟

  参考资料: STM32-定时器详解

        STM32F103C8T6的学习(5)——定时器

        TM32定时器之预分频器详解

        stm32之TIM-基本定时器应用实例(详细)

        STM32 TIM 定时时间的计算

        《STM32单片机应用基础与项目实践》

 

  单片机具有一些外设,即外围功能模块。这些外设可以通过IO,SPI,I2C等总线控制。

  常见的外设:基本IO,定时器TIM,RTC闹钟,ADC模数等等……

定时器概括

  定时器是stm32中的一个常见外设,可以对输入的时钟进行计数,计数达到设定值触发中断。

  stm32有8个定时器,根据复杂度和应用场景分为:2个高级定时器(TIM1,TIM8),4个通用定时器(TIM2到TIM5),2个基本定时器(TIM6,TIM7)。

  其中基本定时器只有大容量的STM32F103RC才有。而STM32F103C8T6只有TIM1,TIM2,TIM3,TIM4(一个高级定时器,三个通用定时器)。

时钟来源

  计时器时钟可以由以下时钟源提供:

  (1) 内部时钟(CK_INT)。使用这个需要预分频器,见下。

  (2) 外部时钟模式1:外部输入脚(Tix)

  (3) 外部时钟模式2:外部触发输入(ETR)

  (4) 内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器。

预分频器

  stm32中,定时器的时钟源为频率极高的内部时钟时。不分频极其容易溢出。例如$72MHz$的时钟,$72MHz=72*10^6Hz$,一秒计数$7.2*10^7$次。16位最高到$65535$,溢出只需要$\frac{65535}{7.2*10^7}=0.0009s$!因此要对时钟进行分频输出。除此之外,预分频的好处还有:可以得到更准确的时间。

 

定时器初始化

  预分频系数psc:对系统时钟进行分频。

  重装载值arr:计数达到这个值后重新装载。

  stm32的所有外设初始化都是通过库中的结构体和初始化函数,定时器TIM也是这样。这个结构体类型是 TIM_TimeBaseInitTypeDef ,在库中的定义如下:

 

/* TIME 这个结构体可以用于所有的TIMx,除了TIM6和TIM7 */
typedef struct
{
  uint16_t TIM_Prescaler;             // 预先分频系数psc,可以是0~65535间的数 
  uint16_t TIM_CounterMode;           //   (计数器模式,基本定时器只能向上计数,不用设置) 
  uint16_t TIM_Period;                // 重装载值arr,可以理解为周期 
  uint16_t TIM_ClockDivision;         //   (时钟分频,不用设置) 
  uint8_t TIM_RepetitionCounter;      //   (重复计数器,不用设置,只对TIM1和TIM8两个高级定时器起作用的参数) 
} TIM_TimeBaseInitTypeDef;   

 

定时器间隔:

  在系统时钟是$72MHz$时,进入中断程序的时间间隔是$((1+psc)/72M)*(1+arr)$,在arr为$10000-1$,psc为$7200-1$时,中断时间为$1s$。

 

定时器初始化代码:

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;    // TIM结构体声明 
    NVIC_InitTypeDef NVIC_InitStructure;            // 嵌套向量中断结构体声明 
    
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);     //打开TIM6的时钟 
    
    /* 配置时基 */
    TIM_TimeBaseStructure.TIM_Period = arr;                     // 设置arr 
    TIM_TimeBaseStructure.TIM_Prescaler =psc;                     // 设置psc 
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;         // 不分频 
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数 
    TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);             // TIM6初始化 
     
    NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;              // TIM6中断 
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             // 打开IRQ通道 
    NVIC_Init(&NVIC_InitStructure);                              // 初始化NVIC 
    
    TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);    // 开启定时器 
    TIM_Cmd(TIM6, ENABLE);                      // 打开TIM6外设 

   其中,TIM6定时器的中断程序是库中的 TIM6_IRQHandler ,初始时是空函数,使用时需要直接在其上修改,或者将其注释后再重新写。

 

  

  

 

标签:NVIC,定时器,TIM6,分频,笔记,stm32,TIM,时钟
From: https://www.cnblogs.com/wegret/p/17280985.html

相关文章

  • C++学习笔记
    char和string的区别字符串string:C++string详解,C++字符串详解(biancheng.net)string是字符串类型,是在C的基础上对字符数组做封装,是一个类,有自己的函数,存的是一个完整的字符串,确实是由字符组成的,但不能认为里面是一个个char数据类型组成的。因而单拎出来里面的字符不能认为是cha......
  • Java学习笔记14
    1.Arrays类​ Arrays类包含用于操作数组的各种方法(如排序和搜索)。该类没有构造函数,直接使用类名.方法名()的方法调用需要的方法。常用方法方法作用publicstaticStringtoString(数组)把数组拼接成一个字符串publicstaticintbinarySearch(数组,查找的元素)二......
  • 新概念2册L75笔记(复习一般过去时&系动词:变化)
    L75SOS单词理解语法理解一般过去时功能:发生在过去的事情;礼貌委婉。关键词:过去具体时间(yesterday/ago/last…)课文理解......
  • stm32寄存器笔记
    参考资料:GPIO相关介绍STM32GPIO的配置寄存器(CRL、CRH)快速学习 stm32的寄存器都是32位的。每个GPIO口有7个寄存器来控制。从GPIO的 GPIO_TypeDef 定义中可以看出,分别是:CRL,CRH,IDR,ODR,BSRR,LCKR。 /***@briefGeneralPurposeI/O......
  • 构建之法阅读笔记2
     学习到了单元测试,单元测试是指开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确,使用单元测试是为了证明某段代码的行为确实和开发者所期望的一致,使代码变得更加完美,让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能......
  • AirNet使用笔记4
    1、DBM“航迹与计划相关配置”中“自动相关参数”:“相关最小权重值(含)”:最小就是二次代码,航班号,地址码全部算下来的,例如航班号一致6,二次代码不一致-3,24地址码一致,最终3,满足最小权重;“直接相关权重值(含)”:权重值(含)为12,指仅正值加起来满足12,就相关,不管负值(不同时的负值)。2、DBM“发布......
  • Java学习笔记(十四) maven1
    Maven介绍Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具,基于项目对象模型(POM)的概念,通过一小段信息来管理项目的构建Apache软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非营利性......
  • Java学习笔记(十三) 前端基础2
    Ajax介绍概念:AsynchronousJavaScriptAndXML,异步的JavaScript和XML作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想,用户名是否可用的校验等......
  • Java学习笔记(十二) 前端基础1
    Web前端基础初识web前端网页由哪些部分组成?文字图片音频视频超链接等我们看到的网页,背后的本质是什么?程序员写的前端代码前端的代码是如何转换成用户眼中的网页的?通过浏览器转化(解析和渲染)成用户看到的网页浏览器中对代码进行解析渲染的部分,称为浏......
  • springboot学习笔记1-基本介绍
    springboot基本介绍官方文档什么是springbootspringboot可以轻松创建独立的、生产级的基于spring的应用程序springboot直接嵌入tomcat、jetty、或undertow,无须打war包,可以直接运行springboot应用程序quickstartforspringbootdemo需求说明:quickstart创建......