极简STM32:基于HAL库与FreeRTOS的Arm Cortex-M4编程与开发 课件 第6章 定时器及其应用_第1页
极简STM32:基于HAL库与FreeRTOS的Arm Cortex-M4编程与开发 课件 第6章 定时器及其应用_第2页
极简STM32:基于HAL库与FreeRTOS的Arm Cortex-M4编程与开发 课件 第6章 定时器及其应用_第3页
极简STM32:基于HAL库与FreeRTOS的Arm Cortex-M4编程与开发 课件 第6章 定时器及其应用_第4页
极简STM32:基于HAL库与FreeRTOS的Arm Cortex-M4编程与开发 课件 第6章 定时器及其应用_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章

定时器及其应用第6章

定时器及其应用【实践案例6-1】基本定时器中断方式实现定时【照猫画虎6-1】基本定时器查询方式实现定时【实践案例6-2】PWM信号的产生和测量【照猫画虎6-2】

输入捕获和输出比较功能的应用来源:STM32Datasheet(数据手册)第6章

定时器及其应用第6章

定时器及其应用定时器在检测、控制领域有广泛应用,可作为应用系统运行的控制节拍,实现信号检测、控制、输入信号周期测量或电机驱动等功能。在很多的应用场合,都会用到定时器,因此定时器系统是现在微控制器中的一个不可缺少的组成部分。定时器有很多用途,包括基本定时功能、生成输出波形(输出比较、PWM和带死区插入的互补PWM)和测量输入信号的脉冲宽度(输入捕抓)等。第6章

定时器及其应用6.1定时器的基本特性分

类主要功能计数脉冲计数,使用外部时钟(PCLK)来计数。定时时间控制,通过对微控制器内部的标准时钟脉冲进行计数实现定时功能。输入捕获对输入信号进行捕获,实现对脉冲的频率测量,可用于对外部输入信号脉冲宽度的测量,比如测量电机转速。输出比较将计数器计数值和设定值进行比较,根据比较结果输出不同电平,用于控制输出波形,比如直流电机的调速。6.1定时器的基本特性主要特性6.1定时器的基本特性6.2基本定时器6.2.1功能框图

6.2.2基本定时器的初始化 6.2.3相关HAL库函数【实践案例6-1】基本定时器中断方式实现定时【照猫画虎6-1】基本定时器查询方式实现定时STM32F407有两个基本定时器TIM6和TIM7,其功能完全相同,资源相互独立,可以同时使用。这两个基本定时器的主要特性如下:16位自动重载递增计数器16位可编程预分频器预分频系数1~65536一般用于对计数器时钟频率进行分频,或者触发DAC的同步电路,以及生成中断请求等。6.2基本定时器6.2基本定时器6.2.1功能框图时钟源两个基本定时器挂载在APB1总线上,其计数时钟CK_INT由APB1总线时钟经过2倍频得到。一般在CubeMX的时钟树中配置APB1总线时钟为42MHz,因此基本定时器TIM6和TIM7的内部时钟CK_INT频率为84MHz。6.2基本定时器时基单元基本定时器的计数过程主要涉及到3个部件,即计数器CNT(Count)、预分频器PSC(Prescaler)和自动重载寄存器ARR(AutomaticReload)。这3个部件分别对应3个16位的寄存器,可设置的数值范围都为0~65535。3个寄存器合起来又称为时基单元(TimeBae)。6.2基本定时器PSC=1,ARR=36预分频器PSC的输入时钟CK_PSC来自于控制器,即84MHz的CK_INT时钟。不同的应用系统中所需要定时的时间长度或间隔不同,通过设置预分频器PSC的值可以非常方便地得到不同的计数时钟CK_CNT。PSC寄存器的输出时钟CK_CNT频率与输入时钟CK_PSC脉冲频率之间的关系为fCK_CNT=fCK_PSC/(PSC+1)在运行过程中可以修改PSC中的数值,但新的预分频数值必须在当前一轮计数结束时起作用。6.2基本定时器预分频寄存器在定时器使能时,计数器CNT在预分频器输出计数脉冲CK_CNT的作用下递增计数。当CNT=ARR时,将自动发出更新事件UEV(UpdateEvent),并将CNT的计数值清零,然后自动重新开始计数。对递增计数过程,当CNT中的计数值递增到与ARR中的计数值相同时,称为定时器上溢(Overflow)。通过设置预分频系数PSC和ARR中的计数值,可以控制发出更新事件的时间间隔。定时时间T的计算公式为T=(PSC+1)(ARR+1)/fCK_PSC。6.2基本定时器计数器与自动重载寄存器定时到,出现计数上溢时,定时器内部状态寄存器SR中最低位将被置位,该标志位称为更新事件中断标志位UIF(UpdateInterruptFlag)。如果将DMA/中断使能寄存器DIER的最低位UIE(UpdateInterruptEnable)置位,表示使能定时器中断,则当UIF位置位的同时,定时器将发出更新事件中断。6.2基本定时器6.2基本定时器6.2.2基本定时器的初始化CubeMX中的参数配置预分频系数计数模式定时间隔是否自动预重载6.2基本定时器typedefstruct{uint32_tPrescaler; /*预分频系数,取值范围0x0000~0xffff*/uint32_tCounterMode; /*计数模式*/uint32_tPeriod; /*定时间隔,取值范围0x0000~0xffff*/

uint32_tClockDivision; /*时钟分频系数*/uint32_tRepetitionCounter; /*重复计数值*/uint32_tAutoReloadPreload; /*自动重载计数值*/}TIM_Base_InitTypeDef;定时器初始化结构体基本定时器的初始化6.2基本定时器voidMX_TIM7_Init(void){TIM_MasterConfigTypeDefsMasterConfig={0};

htim7.Instance=TIM7;htim7.Init.Prescaler=8399;htim7.Init.CounterMode=TIM_COUNTERMODE_UP;htim7.Init.Period=9999;htim7.Init.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE;if(HAL_TIM_Base_Init(&htim7)!=HAL_OK){Error_Handler();}

……}CubeMX自动创建的定时器初始化函数6.2基本定时器voidHAL_TIM_Base_MspInit(TIM_HandleTypeDef*tim_baseHandle){if(tim_baseHandle->Instance==TIM7){__HAL_RCC_TIM7_CLK_ENABLE(); /*开启TIM7总线时钟

*/HAL_NVIC_SetPriority(TIM7_IRQn,0,0); /*设置TIM7中断优先级

*/HAL_NVIC_EnableIRQ(TIM7_IRQn); /*开TIM7中断

*/}}HAL_TIM_Base_Init()调用TIM_Base_SetConfig(),根据初始化配置参数,实现定时器的初始化,包括初始化时基单元及相关句柄。如果启用了定时器中断6.2基本定时器定时器结构体typedefstruct{__IOuint32_tCR1; /*控制寄存器1*/__IOuint32_tCR2; /*控制寄存器2*/……__IOuint32_tCNT; /*计数器寄存器*/__IOuint32_tPSC; /*预分频寄存器*/__IOuint32_tARR; /*自动重载寄存器*/……}TIM_TypeDef;6.2基本定时器typedefstruct{TIM_TypeDef Instance; /*寄存器基地址*/TIM_Base_InitTypeDef Init; /*定时器初始化结构体变量*/HAL_TIM_ActiveChannel Channel; /*定时器有效通道*/……__IOHAL_TIM_StateTypeDef State; /*定时器工作状态*/}TIM_HandleTypeDef;定时器句柄结构体6.2基本定时器定时器的启动和停止6.2.3相关HAL库函数6.2基本定时器如果以查询方式启动定时,则在程序中需要不断查询定时器的状态,以判断定时是否到。在stm32f4xx_hal_tim.h文件中,定义了宏函数__HAL_TIM_GET_FLAG(__HANDLE__,__FLAG__)

当入口参数__FLAG__为TIM_SR_UIF时,则读取定时器状态寄存器中的UIF标志位。当该标志位为1时,表示计数溢出和定时到。查询时,TIM_SR_UIF标志位不会自动清除,此时可以调用宏函数__HAL_TIM_CLEAR_FLAG(__HANDLE__,__FLAG__)清除UIF标志位。定时器状态的查询6.2基本定时器例如,如下语句

while(__HAL_TIM_GET_FLAG(&htim7,TIM_SR_UIF)==RESET){};

/*等待定时到*/在启动定时器TIM7(其中htim7为定时器TIM7的句柄结构体变量)后,不断检测其状态寄存器中的UIF标志位。如果该标志位为0,则重复读取并检测,从而实现查询等待定时到的功能。6.2基本定时器定时器更新事件中断如果以中断方式启动定时,则当定时器计数到定时溢出时,定时器将发出更新事件中断请求。在响应更新事件中断请求的过程中,将依次执行TIMx_IRQHandler()、HAL_TIM_IRQHandler()函数,最后进入到如下定时器更新事件回调函数:voidHAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef*htim)在应用程序中,只需要将上述回调函数重新定义在main.c文件中,并在该文件中编写事先具体功能的代码。6.2基本定时器【实践案例6-1】基本定时器中断方式实现定时使用基本定时器TIM7循环定时,每定时1s使红灯闪烁(亮/灭切换)一次。6.2基本定时器配置RCC时钟,特别注意配置APB1Timerclocks为84MHz配置PF6引脚为GPIO_Output,用户标签为LED_R,用于开发板中红色LED的显示。要求初始输出低电平,红色LED处于点亮状态。按照图6-3对TIM7进行模式和参数配置。根据参数设置,TIM7的定时时间为(8399+1)×(9999+1)/84M=1s。开启TIM7的全局中断(globalinterrup),并根据需要配置中断优先级。CubeMX中的配置6.2基本定时器6.2基本定时器应用程序的编写6.2基本定时器【照猫画虎6-1】基本定时器查询方式实现定时

使用基本定时器TIM7控制使开发板上的绿色LED每隔0.2s闪烁一次。要求采用查询方式检测定时是否到。6.3通用定时器6.3.1功能框图6.3.2时钟源和计数模式6.3.3输入捕获和比较输出6.3.4PWM信号的产生和测量【实践案例6-2】PWM信号的产生和测量【照猫画虎6-2】输入捕获和输出比较功能的应用6.3通用定时器通用定时器包括TIM2~TIM5和TIM9~TIM14,这几个定时器在基本定时器的基础上,添加了一些其他功能,例如输入捕获、输出比较、输出PWM和单脉冲模式等。除了更新和输入捕获、输出比较事件外,通用定时器TIM2~TIM5、TIM9和TIM12在出现计数器启动、停止、初始化或通过内部/外部触发计数等触发事件时也能发出中断请求。此外还可以工作在从模式,使用外部信号进行触发控制,并可实现多个定时器的级联和同步。6.3通用定时器6.3.1功能框图输入输出通道:实现输入捕获和比较输出等功能。6.3通用定时器两个输入输出通道触发事件6.3通用定时器4个输入输出通道外部时钟6.3.2时钟源和计数模式6.3通用定时器内部时钟源:APB1或APB2定时器时钟,84/168MHz外部时钟源:由TIMx_ETR引脚送入,对TIM2~TIM4,分别为PA0、PD2、PE0引脚的复用模式触发源:

ITR0~3,来自另一个定时器的输出,用于定时器的级联;

TI1F_ED、TI1FP1和TI2FP2:由捕获输入通道送入的外部脉冲TI1或TI2作为计数脉冲6.3通用定时器通用定时器的时基单元也包括计数器CNT、预分频器PSC和自动重载寄存器ARR。但TIM2~5的计数模式有3种计数模式,即递增(Up)、递减(Down)和中心对齐(CenterAligned)模式。在递增计数模式下,定时器会发出上溢事件。定时时间等于ARR+1个计数脉冲;在递减计数模式下,每送来一个计数脉冲,计数器就减1,直到计数值减到0时,出现定时器下溢事件,之后计数器又从设置的自动重载值(计数初值)开始继续递减计数。定时时间等于ARR+1个计数脉冲。6.3通用定时器在中心对齐模式下,计数器先从0开始递增计数,直到计数器的值等于计数初值减1时,定时器上溢,同时生成更新事件。之后,从计数初值开始递减计算,直到计数值等于1时,定时器下溢,并生成更新事件,然后又从0开始递增计数,依此循环。定时时间等于ARR个或2ARR个计数脉冲。设ARR=66.3通用定时器注

意每次计数上溢和下溢都会产生更新事件UEV,但不是都会更新中断标志位UIF置位,从而发出更新中断。通过配置计数模式为中心对齐模式1、中心对齐模式2和中心对齐模式3,可以设置在计数器下溢、上溢或者上溢/下溢时才将UIF标志位置位。6.3通用定时器6.3.3输入捕获和比较输出通用定时器增加了捕获/比较通道。每个捕获/比较通道都包括一个捕获/比较寄存器、一个捕获输入通道(输入滤波、边沿检测、多路复用开关和预分频器)和一个比较输出通道(比较器和输出控制电路)。输入捕获通道利用输入滤波器和边沿检测器对输入信号的上升沿或下降沿进行检测和捕捉,并通过预分频器控制捕获/比较寄存器数据的存取。比较输出通道利用捕获/比较寄存器和输出控制电路实现计数值的比较并输出相应的脉冲信号。输入捕获

6.3通用定时器工作过程

外部脉冲从定时器的外部引脚CH1~CH4进入,记为TI1~TI4,称为输入通道。这些输入引脚由GPIO指定的引脚工作在复用模式来提供,例如TIM9的第一输入通道CH1为复用的PE5引脚。基本原理:当捕获到输入信号跳变沿时,将计数器CNT中的计数值锁存到捕获寄存器CCR中。6.3通用定时器输入通道由输入滤波器、边沿检测器组成,检测和捕获信号的边沿,输出脉冲的第一边沿FP1、第二边沿FP2或双边沿ED(包括相邻的一个上升沿和一个下降沿)。这里的第一、第二边沿指的是计数器开始计数后输入脉冲的相邻两个边沿,两个边沿都可以配置为上升沿或下降沿。对一个连续的输入脉冲来说,如果配置第一边沿为上升沿,则第二边沿自动为下降沿。6.3通用定时器在图6-4到图6-6中,IC1~IC4表示4个捕获通道,每个捕获通道的输入可以是上述输入通道捕捉到的上升沿、下降沿或双边沿,也可以是内部触发信号ITR0~ITR3通过多路开关的选择输出信号TRC。捕获通道的输出信号经过预分频器后得到ICxPS信号,送到捕获/比较寄存器,实现捕获功能,也可用作从模式控制器的触发输入并作为计数脉冲。每个捕获通道都有对应的捕获/比较寄存器CCR1~CCR4。当捕获到输入脉冲的边沿时,计数器CNT的当前计数值被锁存到捕获寄存器中。

比较输出6.3通用定时器当计数器CNT的值与比较寄存器CCR中的预设值相等时,输出参考信号OCxREF的极性将发生改变,其中高电平为有效电平,低电平为无效电平。OCxREF再经过输出控制电路后成为实际的输出信号OCx。比较输出信号最终是通过定时器的外部IO引脚来输出的,分别为CH1~CH4。对同一个定时器的同一个通道,输入捕获和比较输出是同一个GPIO引脚。通过定时器的外部引脚对外输出控制信号,用于控制输出波形,或指示已经过某一时间段。6.3通用定时器6.3.4PWM信号的产生和测量基本原理PWM的全称是脉冲宽度调制(PulseWidthModulation),是利用微处理器输出的数字量对模拟电路进行控制的一种非常有效的技术,通常用于LED亮度调节、电动机转速控制等。PWM信号是周期宽度和占空比可以灵活调节的脉冲信号,利用定时器的输入捕获和比较输出功能,可以很方便地产生指定频率和宽度的PWM脉冲,也能对送入的PWM脉冲进行宽度和频率的测量。6.3通用定时器PWM信号的产生在STM32F407中提供了PWM1和PWM2两种工作方式,两种方式又可进一步分为边沿对齐和中心对齐两种工作模式,如表6-2所示。6.3通用定时器在计数脉冲的频率固定时,输出PWM脉冲的频率或周期由定时器中的自动重载寄存器ARR中设置的计数值决定,其占空比由捕获/比较寄存器CCR中的值决定。6.3通用定时器PWM信号的测量PWM脉冲宽度和频率的测量需要同时占用定时器的两个捕获通道。以输入通道TI1工作在PWM输入模式为例,PWM信号由输入通道TI1送入后分为两路,即TI1FP1和TI2FP2,分别送到两个捕获通道IC1和IC2。这两路可以分别设置为直接输入或非直接输入,并可分别设置触发极性(上升沿还是下降沿)。6.3通用定时器假设配置TI1FP1为直接输入触发信号、上升沿触发;配置TI1FP2为非直接输入、下降沿触发。PWM输入模式的工作时序和脉冲测量的基本原理如图6-11所示。

CCR1+1代表脉冲周期,CCR2+1代表脉宽6.3通用定时器PWM通道配置另外注意配置:配置PA5引脚为TIM2_CH1复用模式,作为TIM2的CH1通道输出PWM脉冲。6.3通用定时器图6-12

PWM输出模式和参数配置6.3通用定时器根据上述参数配置,通用定时器TIM2的预分频系数为83,计数脉冲的频率为84MHz/(83+1)=1MHz,输出脉冲的频率为1/(100-1+1)=10kHz,周期为0.1ms。TIM2的PWM产生通道1(PWMGenerationChannel1)配置为PWM1输出模式,设置Pulse参数为50,该参数与CounterPeriod参数值加1之比,即为输出PWM脉冲的占空比,这里等于50/(99+1)=50%。6.3通用定时器用通道1输入脉冲信号的第一边沿触发捕获6.3通用定时器图6-13

PWM输入模式和参数配置计数脉冲频率为168/(167+1)=1MHz在不发生上下溢的前提下能够获得的最长定时为0.1ms6.3通用定时器相关HAL库函数6.3通用定时器6.3通用定时器定时中断处理回调函数【实践案例6-2】PWM信号的产生和测量本案例要求

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论