第6章 STM32通用定时器2

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

退出嵌入式单片机原理及应用电气工程学院仪器科学与工程系1ARM嵌入式系统概述2STM32单片机结构和最小系统3基于标准外设库的C语言程序设计基础4STM32通用输入输出GPIO5STM32外部中断6STM32通用定时器7STM32通用同步/异步收发器USART8直接存储器存取DMA9STM32的模数转换器ADC10STM32的集成电路总线I2C11STM32的串行外设接口SPI第6章STM32通用定时器6.1STM32定时器的组成结构6.2通用定时器相关寄存器6.3通用定时器的功能及工作方式6.4通用定时器应用设计退出STM32定时器类型按功能划分2个高级控制定时器TIM1TIM8可分配6个通道的三相PWM发生器(多用于电机控制)4个通用定时器TIM2TIM3TIM4TIM5每个定时器有4个输入捕获/输出比较/PWM/脉冲计数2个基本定时器TIM6TIM7主要用于产生DAC触发信号6.1STM32定时器的组成结构●2个看门狗定时器——独立看门狗窗口看门狗●系统时基定时器SysTick24位递减计数器自动重加载常用于产生延时us级ms级6.1STM32定时器的组成结构6.1STM32定时器的组成结构STM32系列芯片最多包含8个定时/计数器。其中:TIM6和TIM7为基本定时器;TIM2~TIM5为通用定时器TIM1和TIM8为高级控制定时器,功能最强。主要功能高级定时器通用定时器基本定时器内部时钟源(8MHz)●●●带16位分频的计数单元●●●更新中断和DMA●●●计数方向向上、向下、双向向上、向下、双向向上外部事件计数●●○其它定时器触发或级联●●○4个独立输入捕获输出比较通道●●○单脉冲输出方式●●○正交编码器输入●●○霍尔传感器输入●●○输出比较信号死区产生●○○刹车信号输入●○○基本概念高速的PWM驱动信号在达到功率元件的控制极时,往往会由于各种原因产生延迟的效果,造成某个半桥元件在应该关断时没有关断,造成功率元件烧毁。死区就是在上半桥关断后,延迟一段时间再打开下半桥或在下半桥关断后,延迟一段时间再打开上半桥,从而避免功率元件烧毁。这段延迟时间就是死区。刹车信号:控制电机用,需要紧急停止时类似能耗制动的方式让电机刹车6.1STM32定时器的组成结构基本定时器(TIM6,TIM7):基本定时器TIM6和TIM7各包含一个16位自动装载计数器,由各自的可编程预分频器驱动。它们可以作为通用定时器提供时间基准,可以为数模转换器(DAC)提供时钟。通用定时器(TIM2-TIM5),通用定时器要比基本定时器复杂,它除了基本的定时器的功能外,还具有测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。6.1STM32定时器的组成结构时钟源时钟单元捕获比较通道6.1STM32定时器的组成结构高级定时器(TIM1,TIM8):高级定时器不但具有基本,通用定时器的所有功能,还具有控制交直流电动机的功能,比如它可以输出6路互补带死区的信号,刹车功能等等6.2通用定时器相关寄存器定时器的功能是通过操作相应寄存器实现的,寄存器包括:1.计数寄存器(16位):计数器(TIMx_CNT)预分频器(TIMx_PSC)自动重载寄存器(TIMx_ARR)计数器可以向上计数、向下计数或者向上向下双向计数。2.控制寄存器(16位):4个捕捉/比较寄存器(TIMx_CCR1、TIMx_CCR2、TIMx_CCR3和TIMx_CCR4)计数器寄存器:TIMx_CNT16位的计数器,设定值从1~655356.2通用定时器相关寄存器计数器模式向上计数模式:计数器从0计数到设定的数值,然后重新从0开始计数并且产生一个计数器溢出事件。向下计数模式:计数器从设定的数值开始向下计数到0,然后自动从设定的数值重新向下计数,并产生一个向下溢出事件。中央对齐模式(向上/向下计数):计数器从0开始计数到设定的数值-1,产生一个计数器溢出事件,然后向下计数到1并且产生一个计数器下溢事件;再从0开始重新计数。预分频器寄存器:TIMx_PSC预分频器可以将计数器的时钟频率(CK_PSC)按1到65536之间的任意值分频,它是一个16位寄存器。这个寄存器带有缓冲区,它能够在工作时被改变。新的预分频器参数在下一次更新事件到来时被采用。6.2通用定时器相关寄存器什么是“更新事件(UEV)”?“更新事件(UEV)”:当计数器溢出的时候产生一次UEV事件,另外还可以在事件寄存器TMx_EGR中的UG位软件写入产生一次事件更新;当UEV事件来临时,所有影子寄存器载入寄存器中的值,从而实现所有带影子寄存器的同步更新;而不启用影子寄存器的情况下,只能实现写那个寄存器更新那个寄存器,这可能造成相关联的寄存器产生冲突矛盾。什么是“影子寄存器”?在图中,可以看到PSC、ARR、CCRx,这三类寄存器框框下都有个黑影有阴影的寄存器,表示在物理上这个寄存器对应2个寄存器,一个是程序员可以写入或读出的寄存器,称为preloadregister(预装载寄存器),另一个是程序员看不见的、但在操作中真正起作用的寄存器,称为shadowregister(影子寄存器);当程序在运行中改写PSC时,写入的值可能会大于或小于目前正在运行的寄存器中的数值,真实运行的正是这个影子寄存器中的值,而程序写入的是可访问的预装载寄存器,只有当产生一个更新事件时影子寄存器才会读入访问寄存器中的值,这样就可以防止突然修改而产生的非正常中断或不会中断等异常问题。自动装载寄存器:TIMx_ARR自动装载寄存器是预先装载的(要在使能定时器之前设定好),根据在TIMx_CR1寄存器中自动装载使能位(ARPE)的设置,立即或者在每次更新事件时传送到计数器。STM32定时器的工作频率CK_CNT表示定时器工作频率TIMx_PSC表示分频系数则定时器的工作频率计算公式为:CK_CNT=定时器时钟频率/(TIMx_PSC+1)由此我们可得到STM32单片机1个时钟周期为:T=1/CK_CNT例如普通定时器模块的时钟为72MHz,分频比(PSC)为7199,那么我们想要得到一个1秒钟的定时,定时计数器(ARR)的值需要设定为:TIMx_ARR=10000因为72000000/(7199+1)=10KHz时钟周期T=1/10KHz=100us100us×10000=1S结论:分频比7199定时计数器的值10000该寄存器用来标记当前与定时器相关的各种事件/中断是否发生。具体每位的含义,请参考中文参考手册。状态寄存器(TIMx_SR)控制寄存器:TIMx_CR1控制寄存器:TIMx_CR1控制寄存器:TIMx_CR16.3通用定时器的功能及工作方式6.3通用定时器的功能及工作方式6.3.1时钟的选择内部时钟(CK_INT);外部时钟模式1(外部输入脚TIx);外部时钟模式2(外部触发输入ETR);内部触发输入(ITR,使用一个定时器作为另一个定时器的预分频器,如配置定时器Timer1作为定时器Timer2的预分频器)。通用定时器的基本功能是定时和计数。当可编程定时/计数器的时钟源来自内部系统时钟时可以完成精密定时;当时钟源来自外部信号时可完成外部信号计数。6.3通用定时器的功能及工作方式通用定时器的计数器时钟:内部时钟(CK_INT)6.3通用定时器的功能及工作方式通用定时器(TIM2-5)的时钟不是直接来自APB1,而是通过APB1的预分频器和倍频器以后才到达定时器模块。当APB1的预分频器系数为1时,这个倍频器就不起作用了,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1时钟频率的两倍。假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。6.3通用定时器的功能及工作方式有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,正是因为有了这个定时器的倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也是设计这个倍频器的初衷。6.3通用定时器的功能及工作方式1、内部时钟6.3通用定时器的功能及工作方式2、外部时钟源模式16.3通用定时器的功能及工作方式2、外部时钟源模式26.3.2时基单元时基单元是设置定时器/计数器计数时钟的基本单元:计数器寄存器(TIMx_CNT);预分频器寄存器(TIMx_PSC);自动装载寄存器(TIMx_ARR)。根据实际需要,由软件设置预分频器寄存器,可以得到定时器/计数器的计数时钟。6.3.3计数模式1.向上计数模式:当控制寄存器TIMx_CR1中CMS=00,DIR=0时选择为向上计数模式。2.向下计数模式:当控制寄存器TIMx_CR1中CMS=00,DIR=1时选择为向下计数模式。3.中央对齐计数模式:当控制寄存器TIMx_CR1中CMS=01、10、11时选择为中央对齐模式。定时器时序1定时器时序26.4通用定时器应用设计6.4.1通用定时器常用库函数STM32标准库中提供了几乎覆盖所有TIM操作的函数,所有TIM相关函数均在stm32f10x_tim.c和stm32f10x_tim.h中定义和声明。教程表6-16TIM库函数6.4.2通用定时器使用流程1.NVIC设置:NVIC用来完成中断分组、中断通道选择、中断优先级设置及使能中断的功能声明NVIC结构体NVIC_InitTypeDefS选择中断分组NVIC_PriorityGroupConfig()选择中断通道S.NVIC_IRQChannel设置抢占优先级S.NVIC_IRQChannelPreemptionPriority设置响应优先级S.NVIC_IRQChannelSubPriority中断使能S.NVIC_IRQChannelCmd调用函数完成配置NVIC_Init()2.定时器中断配置:用来配置定时器时基及开启中断声明TIM时基结构体TIM_TimeBaseInitTypeDefT开启TIM时钟RCC_APB2PeriphClockCmd()设置时钟预分频T.TIM_Period设置计数模式T.TIM_CounterMode设置计数值T.TIM_Period完成时基设置TIM_TimeBaseInit()清除中断标志TIM_ClearFlag()使能TIM中断源TIM_ITConfig开启TIMTIM_Cmd()Prescaler3.中断服务程序:用来配置定时器时基及开启中断进入中断检测定时中断请求TIM_GetITStatus()清除定时中断标志TIM_ClearITPendingBit中断处理内容Func()中断返回6.4.3通用定时器设计实例对第4章的GPIO控制LED实例,采用定时器3定时功能,使LED每1秒亮灭1次。PA8驱动LED。为了使LED亮一秒灭一秒,只要设置定时器1s产生一次中断,在中断函数中对延时时间进行计数即可实现任意秒延时。6.4.3通用定时器设计实例intmain(void){LED_Config();//GPIO-LED配置TIM3_NVIC_Config();//TIM3_NVIC配置TIM3_Config();//TIM3配置GPIO_ResetBits(GPIOA,GPIO_Pin_8);//低电平,点亮LEDwhile(1){}}6.4.3通用定时器设计实例vo

1 / 70
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功