历史上的今天
返回首页

历史上的今天

今天是:2024年12月29日(星期日)

2018年12月29日 | stm32定时器(基本定时器)操作寄存器版

2018-12-29 来源:eefocus

定时器本质


定时器的本质:计数器


定时器的构成:时钟源+计数器+重载值


1、stm32的定时器


   stm32定时器数量较多、功能比较强;不同的定时器功能有不同。


   stm32的定时器进行类型划分。分为三类:①基本定时器;②通用定时器;③高级定时器


   基本定时器:用于定时器,还可以用于触发DAC(数模转换器)、ADC(模数转换器)工作。


   通用定时器:具备基本定时器所有的功能;捕获输入、比较输出、捕获PWM波、生成PWM波、支持霍尔元件


   高级定时器:具备通用定时器所有的功能:支持死区、刹车功能。


STM32F407的基本定时器有TIM6、TIM7.

STM32F407的通用定时器有TIM2~TIM5,TIM9~TIM14.

STM32F407的高级定时器有TIM1、TIM8.

    

基本定时器定时功能。


2、基本定时器定时功能介绍。


   基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器,该计数器由可编程预分频器驱动。


   此类定时器不仅可用作通用定时器以生成时基(可以作为通用定时器的时钟源), 还可以专门用于驱动数模转换器 (DAC)。实际上,此类定时器内部连接到 DAC 并能够通过其触发输出驱动 DAC。

   

这些定时器彼此完全独立,不共享任何资源(每个定时器都可以单独工作,不需要其他定时器的资源)。


3、基本定时器的特征

   

基本定时器(TIM6 和 TIM7)的特性:

  

 ● 16 位自动重载递增计数器

 

  ● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数介于 1 和 65536 之间

 

  ● 用于触发 DAC 的同步电路


   ● 发生如下更新事件时会生成中断/DMA 请求:计数器上溢(计数器上溢会产生更新事件,更新事件能够产生中断/DMA请求)。


例:

  假设 168MHz  10000分频

    

  本身在168MHz的情况下1秒钟,只需要记168M个数。

  如果是10000分频,那么就要记:168MHz/10000 = 16800个数  


公式套用:


计数时钟 = 时钟源 / PSC + 1

时钟周期 = 1/计数时钟  

时钟周期 * arr = 得出多少时间才溢出,触发中断



4、基本定时器框架

   工作原理在框图上有体现:



什么时候用自动重载值寄存器带缓冲功能?   什么时候用自动重载值寄存器不带缓冲功能?


   不带缓冲功能:定时器只需要固定一个时间的定时,这个项目中不需要改变这个定时器的定时。


 例如:这个定时器1s中点亮LED灯,1s中熄灭LED灯


   带缓冲功能:定时一个时间后要换时间。  例如:这个定时器500ms中点亮LED灯,100ms中熄灭LED灯


   UG位:可以让计数器清0,自动重载值写入到影子寄存器,清除分频器的值,不会改变分频比。


   配置流程:


   1、选择一个定时时长;确定预分频与重载值。 


   2、确定是否使用缓存功能(UG位操作)


   3、使能定时器


   4、等待时间到


   计算预分频去与自动重载值如何设定?TIM6/7定时器5s钟。


5、基本定时器的相关寄存器


   5.1 TIM6 和 TIM7 控制寄存器 1 (TIMx_CR1)



位 7 ARPE:自动重载预装载使能 (Auto-reload preload enable)

        0: TIMx_ARR 寄存器不进行缓冲。

        1: TIMx_ARR 寄存器进行缓冲。


位 3 OPM:单脉冲模式 (One-pulse mode)

        0:计数器在发生更新事件时不会停止计数(循环功能)

        1:计数器在发生下一更新事件时停止计数(将 CEN 位清零)(单次功能)。


位 2 URS:更新请求源 (Update request source)

        此位由软件置 1 和清零,用以选择 UEV 事件源。

        0:使能时(UEV使能),所有以下事件都会生成更新中断或 DMA 请求。此类事件包括:

              — 计数器上溢/下溢

              — 将 UG 位置 1

              — 通过从模式控制器生成的更新事件


        1:使能时(UEV使能),只有计数器上溢/下溢会生成更新中断或 DMA 请求。

位 1 UDIS:更新禁止 (Update disable)

        此位由软件置 1 和清零,用以使能/禁止 UEV 事件生成。

        0:使能 UEV。更新 (UEV) 事件可通过以下事件之一生成: 

             — 计数器上溢/下溢

             — 将 UG 位置 1

             — 通过从模式控制器生成的更新事件然后更新影子寄存器的值。


        1:禁止 UEV。不会生成更新事件,各影子寄存器的值(ARR 和 PSC)保持不变。但如果将


          UG 位置 1,或者从从模式控制器接收到硬件复位,则会重新初始化计数器和预分频器。


位 0 CEN:计数器使能 (Counter enable)

        0:禁止计数器

        1:使能计数器

        注意: 只有事先通过软件将 CEN 位置 1,才可以使用门控模式。而触发模式可通过硬件自动将

        CEN 位置 1。

在单脉冲模式下,当发生更新事件时会自动将 CEN 位清零。

5.2  TIM6 和 TIM7 控制寄存器 2 (TIMx_CR2)



这个寄存器与基本定时器功能无关,只有需要使用到TRGO才去关心该位。


5.3TIM6 和 TIM7 DMA/中断使能寄存器 (TIMx_DIER)



位 8 UDE:更新 DMA 请求使能 (Update DMA request enable)

        0:禁止更新 DMA 请求。

        1:使能更新 DMA 请求。

位 0 UIE:更新中断使能 (Update interrupt enable) (模块级使能中断位)

        0:禁止更新中断。

        1:使能更新中断。

5.4  TIM6 和 TIM7 状态寄存器 (TIMx_SR)



位 0 UIF:更新中断标志 (Update interrupt flag)

        该位在发生更新事件时通过硬件置 1。但需要通过软件清零。

        0:未发生更新。

        1:更新中断挂起。该位在以下情况下更新寄存器时由硬件置 1:(定时时间到)

        — 上溢或下溢并且当 TIMx_CR1 寄存器中 UDIS = 0 时。

        — 当由于 TIMx_CR1 寄存器中 URS = 0 且 UDIS = 0 而通过软件使用 TIMx_EGR 寄存器中


的 UG 位重新初始化 CNT 时。

5.5  TIM6 和 TIM7 事件生成寄存器 (TIMx_EGR)



位 0 UG:更新生成 (Update generation)

        该位可通过软件置 1,并由硬件自动清零。

        0:不执行任何操作。

        1:重新初始化定时器计数器并生成寄存器更新事件。请注意,预分频器计数器也将清零(但预分频比不受影响)。

5.6  TIM6 和 TIM7 计数器 (TIMx_CNT)




位 15:0 CNT[15:0]:计数器值 (Counter value)


5.7  TIM6 和 TIM7 预分频器 (TIMx_PSC)



位 15:0 PSC[15:0]:预分频器值 (Prescaler value)

        计数器时钟频率 CK_CNT 等于 fCK_PSC / (PSC[15:0] + 1)。注意: 该位会自动加1,在设置的时候要减1。


        例如:8400分频  只需写入8399即可。

        PSC 包含在每次发生更新事件时要装载到实际预分频器寄存器的值。

5.8  TIM6 和 TIM7 自动重载寄存器 (TIMx_ARR)



位 15:0 ARR[15:0]:自动重载值 (Auto-reload value)

      ARR 为要装载到实际自动重载寄存器的值。注意:自动重载值写入10000;真实写入的值只能是9999。原因看下图便知。

     有关 ARR 更新和行为的详细信息,请参见第 17.3.1 节:第 484 页的时基单元。

     当自动重载值为空时,计数器不工作。



配置流程:


案例:实现1s LED亮,1s LED灭


6、使用定时器6


1、初始化


      开启时钟、清空计数器的值、设置预分频、设置重载值、设置无缓冲功能、采用循环模式、控制寄存器1、开启中断使能(模块级中断使能、核心级中断使能)、开启计数器使能。


2、编写中断服务函数


     清标志位、灯亮与灯灭。


程序:


timer6.h


#ifndef __TIMER6_H__

#define __TIMER6_H__

 

#include

 

void timer6_init(u16 arr, u16 psc);

 

 

#endif

timer6.c


#include "timer6.h"

#include "led.h"

 

/*

函数功能:基本定时器初始化

返回值:无

形参:arr:重装载值 psc:预分频值

*/

void timer6_init(u16 arr, u16 psc) 

{

    //开启基本定时器6(TIM6)的时钟

    RCC->APB1ENR |= 1<<4;

 

    /*清空计数器的值*/

    TIM6->CNT = 0;

    

    TIM6->PSC = psc;  //预分频值 (8400)

    TIM6->ARR = arr;  //重装载值 (1s钟定时)

    

    TIM6->CR1 = 0;      //将控制寄存器1清空

    

    TIM6->CR1 |= 1<<2;    //设置事件更新请求源

    

    /*设置无缓冲功能*/

    TIM6->CR1 &= ~(1<<7);    

    

    /*设置循环模式*/

    TIM6->CR1 &= ~(1<<3);

    

    /*允许更新中断使能*/

    TIM6->DIER |= 1<<0;

    

    /*使能基本定时器中断*/

    NVIC_EnableIRQ(TIM6_DAC_IRQn);

    

    /*开启计数器使能*/

    TIM6->CR1 |= 1<<0;

}

 

/*

函数功能:基本定时器终端服务函数

返回值:无

形参:无

*/

void TIM6_DAC_IRQHandler(void)

{

    if(TIM6->SR & (1<<0))      //溢出中断

    {

        TIM6->SR &= ~(1<<0);  //清除中断标志位

        //执行相应操作

        LED2 = !LED2;

    }

}

main.c


#include "led.h"

#include "tim6.h"

 

int main(void)

{


led_init();

timer6_init(5000-1, 8400-1); //重装载值:5000-1, 分频8400-1

}

推荐阅读

史海拾趣

台湾岱恩(DAIN)公司的发展小趣事

以下是关于台湾岱恩(DAIN)电子工业股份有限公司在电子行业中发展起来的五个相关故事,每个故事都基于事实进行描述,避免主观褒贬:

  1. 创业初期的专注与坚持

岱恩电子工业股份有限公司成立于1989年,初期专注于薄膜电容器的研发与生产。公司凭借对技术的深入研究和对品质的严格把控,迅速在薄膜电容器领域崭露头角。在创业初期,岱恩电子就明确了以技术创新和品质保证为核心竞争力的战略定位,为公司的长远发展奠定了坚实的基础。

  1. 品质管理的建立与提升

岱恩电子始终将品质管理作为企业发展的重中之重。自成立之初,公司就引进了ISO9001国际品质认证体系,并在随后的几年中不断完善和提升。通过严格的质量控制流程和持续的品质改进活动,岱恩电子的产品品质得到了客户的广泛认可,并在市场上建立了良好的口碑。

  1. 环保理念的贯彻与实践

随着全球环保意识的不断提高,岱恩电子积极响应环保号召,将环保理念贯穿于企业发展的全过程。公司不仅取得了ISO14001环境管理系统认证,还严格遵守RoHS及Reach等欧盟环保标准,确保产品从原材料采购到生产过程的环保性。此外,岱恩电子还积极推广绿色制造技术,努力降低生产过程中的能源消耗和废弃物排放。

  1. 产品创新的突破与引领

在薄膜电容器领域,岱恩电子一直致力于产品创新和技术突破。公司不断投入研发资源,推出了一系列具有高性能、高可靠性和长寿命特点的薄膜电容器产品。其中,X2电容作为公司的明星产品之一,凭借其优异的电气性能和稳定性,赢得了众多客户的青睐。同时,岱恩电子还积极拓展产品线,将业务范围扩展至发光二极体等领域,进一步提升了公司的市场竞争力。

  1. 全球市场的拓展与布局

为了更好地服务全球客户,岱恩电子在中国大陆和台湾设立了完整的销售体系,并积极拓展海外市场。公司通过与全球知名企业的合作与交流,不断提升自身的品牌影响力和市场占有率。同时,岱恩电子还注重本地化服务,根据不同地区的市场需求和文化特点,提供定制化的产品和服务解决方案,赢得了客户的信任和赞誉。

远阳(FLYOUNG)公司的发展小趣事

国光新业深知技术创新是企业发展的核心动力。截至目前,公司已拥有授权专利78项,其中发明专利30项,实用新型专利48项,还有数十项专利正在实质审查中。这些专利的积累,不仅彰显了公司在电容器领域的深厚技术底蕴,更为公司产品的持续升级与市场竞争力的提升提供了有力保障。公司还主导起草了两项该类高分子电容器国家标准,进一步巩固了其在行业内的领先地位。

Crowd_Supply__Inc.公司的发展小趣事

Crowd Supply Inc.深知社区是其发展的核心动力。因此,公司不仅在产品开发上积极吸纳社区意见,还在市场推广、技术支持等方面与社区紧密合作。通过举办线上线下的技术交流活动、设立社区奖励机制等方式,公司成功吸引并留住了一批忠实的社区成员。这些成员不仅为公司带来了稳定的用户基础,还通过口碑传播扩大了公司的品牌影响力。

FLEX LTD公司的发展小趣事

在电子行业的众多初创公司中,Crowd Supply Inc.以其独特的理念和模式崭露头角。公司成立之初,便聚焦于开放式硬件和社区驱动的产品开发,这在当时的行业环境中还是一个较为新颖的概念。创始人团队由一群富有热情和创新精神的电子工程师和产品开发专家组成,他们通过线上平台汇聚了一群同样对电子硬件感兴趣的爱好者和开发者。初期,公司面临资金短缺、市场认可度低等挑战,但通过不断试错和社区反馈,逐渐找到了自己的发展方向。

驰兴电感(Coilank)公司的发展小趣事

随着电子行业的快速发展,驰兴电感紧跟市场趋势,不断拓展产品应用领域。除了传统的消费电子和通讯领域外,驰兴电感还成功将产品应用于汽车电子、网络通讯、智能家居等新兴领域。这些领域的拓展不仅为公司带来了更广阔的市场空间,也进一步提升了驰兴电感在电子行业中的地位。

ACI [Applied Concepts, Inc.]公司的发展小趣事

在电子行业的激烈竞争中,ACI公司凭借其卓越的技术创新能力脱颖而出。公司研发团队不断攻克技术难关,推出了一系列具有竞争力的电子产品。这些产品不仅性能卓越,而且设计独特,满足了消费者的多样化需求。通过技术创新,ACI成功打开了市场,赢得了消费者的青睐。

问答坊 | AI 解惑

电视监控系统组成

闭路监控系统主要组成部分是:前端部分(产生图像的摄像机或成像装置),传输部分(图像的传输),控制部分,显示记录部分。如图所示。 1、 前端部分 CCTV的前端设备是直接完成现场图像捕捉功能的设备及其辅助设备,主要有一体化智能快球、固定 ...…

查看全部问答>

基于STM32的μC/OS Ⅱ移植例程

例程大小:1583K 例程说明: 1.改移植和模板工程不包括操作系统核ucosⅡ的源代码,如需使用请向操作系统的供应商联系或者网上下载免费的源代码。 2.本移植使用的是 ucosⅡ 2.83版本,需要在OS文件夹下添加的操作系统源代码包括如下文件: os_fla ...…

查看全部问答>

单片机外围电路设计

在用单片机设计的过程中,难免要进行一些外围电路设计。这里我收集了一本不错的单片机外围电路设计的电子书,特的拿出来和大家一起分享!!!!!!!!!…

查看全部问答>

请教我读一读这个密码锁程序

在网上找了个密码锁程序来学习,用KEIL编译,开始不能生成HEX文件,后来找到原因了,有些是数字0打成了字母O,有些是漏了冒号! 现在想问一下,这个程序应该怎样读?密码是如何设置的?刚学,搞不懂. org 0000h AJMP START ORG 0030H START:ACALL BP ...…

查看全部问答>

S3C2440+ADS+H-JTAG+AXD无法调试

在AXD中Load Image后无法正常加载,加载后的程序如下                __main        [0x00000000]   andeq    r0,r0,r0        ...…

查看全部问答>

片内flash和片外flash?

刚接触开发板, 不清楚什么是片内RAM和片外RAM,以及片内Flash和片外Flash. 请大家解释一下, 我用的是philips的板子. 难道LPC2214处理器内部也有ARM和Flash吗? …

查看全部问答>

【编程】请教磁盘数据如何擦除

最近需要开发一个擦除硬盘的工具,实现的功能就是将一整块硬盘挂到一台机器上,比如说是Windows系统的机器上,然后利用该工具将整块硬盘的数据清除,而且清除后不可以再恢复。并且这块硬盘不管它是在什么系统下用的硬盘(比如AIX、HP、SCO等等), ...…

查看全部问答>

大侠,能给个Finsh shell移植到stm32的例子吗

或者给个移植的文档也行啊,radio里的东西感觉有点乱啊,谢谢了…

查看全部问答>

关于ADC转换使用DMA的问题!

ADC配置为一次转换6个通道,使用DMA传送, SCAN位为0  CONT位为零.外部触发使用软件触发. 出现一个问题是,转换只能在最后一通道转换完成后产生DMA传送,前面5通道全部丢失.  SCAN位置1也一样!…

查看全部问答>

为什么UC3843驱动MOS管的波形,只有几个周期有波形,其它时间没有?

我现在用UC3843控制MOS管来做boost升压电路,测量UC3843的6脚输出波形发现,只有几个周期有波形,其它时间输出波形一直为低。24VDC升压到120VDC,0.25A,开关频率为220K。请问这是为什么? …

查看全部问答>