嵌入式系统—08-定时器原理及应用.pdf
- 文档编号:18633782
- 上传时间:2023-08-23
- 格式:PDF
- 页数:37
- 大小:1.46MB
嵌入式系统—08-定时器原理及应用.pdf
《嵌入式系统—08-定时器原理及应用.pdf》由会员分享,可在线阅读,更多相关《嵌入式系统—08-定时器原理及应用.pdf(37页珍藏版)》请在冰点文库上搜索。
1、嵌入式系统概述、嵌入式系统概述2、Cotex-M3体系结构体系结构3、STM32最小系统最小系统4、STM32程序设计程序设计5、GPIO原理及应用原理及应用6、EXTI原理及应用原理及应用7、USART原理及应用原理及应用8、定时器原理及应用、定时器原理及应用9、DMA原理及应用原理及应用10COS-II程序设计基础程序设计基础11、uCOS-II在在STM32上的移植上的移植STM32嵌入式系统课程内容嵌入式系统课程内容第八章定时器原理及应用2STM32嵌入式系统课程内容嵌入式系统课程内容3单片机中定时器的用途单片机中定时器的用途定时器作用:
延时、计数、输入捕获(解码和测量时间间隔)、输出比较(主要输出PWM波)、单脉冲输出、触发中断(对其他模块进行操作)PWM(PulseWidthModulation脉冲宽度调制)对模拟信号电平进行数字编码的方法,计算机只能输出0或5V的数字电压值而不能输出模拟电压,而我们如果想获得一个模拟电压值,则需通过使用高分辨率计数器,改变方波的占空比来对一个模拟信号的电平进行编码。
PWM理论基础面积等效原理面积等效原理冲量冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同效果基本相同。
冲量冲量窄脉冲的面积效果基本相同效果基本相同环节的输出响应波形基本相同形状不同而冲量相同的各种窄脉冲d)单位脉冲函数f(t)d(t)tOa)矩形脉冲b)三角形脉冲c)正弦半波脉冲tOtOtOf(t)f(t)f(t)OutSPWM波Out如何用一系列等幅不等宽的脉冲等幅不等宽的脉冲来代替一个正弦半波OutPWM理论基础面积等效原理面积等效原理若要改变等效输出正弦波幅值,按同一比例改变各脉冲宽度即可。
SPWM波Out如何用一系列等幅不等宽的脉冲等幅不等宽的脉冲来代替一个正弦半波OutOutPWM理论基础面积等效原理面积等效原理OwtUd-Ud对于正弦波的负半周,采取同样的方法,得到PWM波形,因此正弦波一个完整周期的等效PWM波为:
OwtUd-Ud根据面积等效原理,正弦波还可等效为下图中的PWM波,而且这种方式在实际应用中更为广泛。
PWM理论基础面积等效原理面积等效原理STM32PWM工作过程工作过程CCR1:
捕获比较捕获比较(值值)寄存器(寄存器(x=1,2,3,4):
设设置比较值。
置比较值。
CCMR1:
OC1M2:
0位:
位:
对于对于PWM方式下,用于设置方式下,用于设置PWM模式模式1【110】或者或者PWM模式模式2【111】CCER:
CC1P位:
输入位:
输入/捕获捕获1输出极性。
输出极性。
0:
高电平有效,高电平有效,1:
低电平有效。
:
低电平有效。
CCER:
CC1E位:
输入位:
输入/捕获捕获1输出使能。
输出使能。
0:
关闭,关闭,1:
打开。
:
打开。
STM32PWM工作过程工作过程通用定时器概述通用定时器概述STM32定时器定时器STM32F40x系列总共最多最多有14个定时器:
通用定时器概述通用定时器概述三种(三种(4)STM32定时器区别定时器区别定时器种类定时器种类位数位数计数器模式计数器模式产生产生DMA请求请求捕获捕获/比比较通道较通道互补输互补输出出特殊应用场景特殊应用场景高级定时器(TIM1,TIM8)16向上,向下,向上/下可以4有带可编程死区的互补输出通用定时器(TIM2,TIM5)32向上,向下,向上/下可以4无通用。
定时计数,PWM输出,输入捕获,输出比较通用定时器(TIM3,TIM4)16向上,向下,向上/下可以4无通用。
定时计数,PWM输出,输入捕获,输出比较通用定时器(TIM9TIM14)16向上没有2无通用。
定时计数,PWM输出,输入捕获,输出比较基本定时器(TIM6,TIM7)16向上,向下,向上/下可以0无主要应用于驱动DACSTM32的通用定时器可以被用于:
测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)等。
第八章定时器原理及应用12STM32F40xAlternateFunctionMapping通用定时器功能特点描述通用定时器功能特点描述STM3F4的通用的通用TIMx(TIM10、TIM11、TIM13和和TIM14)定时器功能特定时器功能特点包括:
点包括:
16位向上计数模式,自动装载计数器(TIMx_CNT)。
16位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为165535之间的任意数值。
4个独立通道(TIMx_CH14),这些通道可以用来作为:
输入捕获输出比较PWM生成(边沿对齐模式)单脉冲模式输出发生如下事件时生成中断:
更新:
计数器上溢、计数器初始化(通过软件)输入捕获输出比较这里需要纠正,通用这里需要纠正,通用定时器定时器9-14,有的有,有的有2个通道,有的只有一个通道,有的只有一个。
个。
通用定时器框图通用定时器框图(TIM10/11/13/14)计数器模式计数器模式通用定时器可以向上计数、向下计数、向上向下双向计数模式。
通用定时器可以向上计数、向下计数、向上向下双向计数模式。
向上计数模式向上计数模式:
计数器从:
计数器从00计数到自动加载值计数到自动加载值(TIMx_ARR)(TIMx_ARR),然后重新从,然后重新从00开开始计数并且产生一个计数器溢出事件。
始计数并且产生一个计数器溢出事件。
向下计数模式向下计数模式:
计数器从自动装入的值:
计数器从自动装入的值(TIMx_ARR)(TIMx_ARR)开始向下计数到开始向下计数到00,然后,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件。
从自动装入的值重新开始,并产生一个计数器向下溢出事件。
中央对齐模式(向上中央对齐模式(向上/向下计数)向下计数):
计数器从:
计数器从00开始计数到自动装入的值开始计数到自动装入的值-11,产生一个计数器溢出事件,然后向下计数到产生一个计数器溢出事件,然后向下计数到11并且产生一个计数器溢出事件;然并且产生一个计数器溢出事件;然后再从后再从00开始重新计数。
开始重新计数。
向上计数模式(时钟分频因子向上计数模式(时钟分频因子=1)定时器计数模式定时器计数模式定时器时钟来源定时器时钟来源定时器的时钟不是直接来自APBx,而是来自于输入为APBx的一个倍频器。
当APB的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB的频率;当APB的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB的频率两倍。
内部时钟选择内部时钟选择APBx时钟X1/X2F(CK_PSC)NCK_CNTCK_INT默认调用SystemInit函数情况下:
SYSCLK=168MAHB时钟=168MAPB1时钟=42MAPB2时钟=84M所以APBx的分频系数=AHB/APBx时钟=2/4所以,通用定时器时钟CK_INT=2*42M(84M)=84M/168M除非除非APBx的分频系数是的分频系数是1,否则通用定时器的时钟等于,否则通用定时器的时钟等于APBx时钟的时钟的2倍。
倍。
时钟计算方法:
时钟计算方法:
时基单元时基单元定时器的主要模块由一个16位计数器及其相关的自动重载寄存器组成。
计数器采用递增方式计数。
计数器的时钟可通过预分频器进行分频。
计数器、自动重载寄存器和预分频器寄存器可通过软件进行读写。
即使在计数器运行时也可执行读写操作。
时基单元包括:
计数器寄存器(TIMx_CNT)预分频器寄存器(TIMx_PSC)自动重载寄存器(TIMx_ARR)通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数计数器当前值寄存器计数器当前值寄存器CNT通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数预分频寄存器预分频寄存器TIMx_PSC通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数自动重装载寄存器(自动重装载寄存器(TIMx_ARR)通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数控制寄存器控制寄存器1(TIMx_CR1)通用定时器概述通用定时器概述DMA中断使能寄存器(中断使能寄存器(TIMx_DIER)通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数常用库函数常用库函数:
stm32f4xx_tim.c/.hvoidTIM_TimeBaseInit(TIM_TypeDef*TIMx,TIM_TimeBaseInitTypeDef*TIM_TimeBaseInitStruct);typedefstructuint16_tTIM_Prescaler;uint16_tTIM_CounterMode;uint16_tTIM_Period;uint16_tTIM_ClockDivision;uint8_tTIM_RepetitionCounter;TIM_TimeBaseInitTypeDef;TIM_TimeBaseStructure.TIM_Period=4999;TIM_TimeBaseStructure.TIM_Prescaler=7199;TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);定时器参数初始化:
定时器参数初始化:
通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数voidTIM_Cmd(TIM_TypeDef*TIMx,FunctionalStateNewState)定时器使能函数:
定时器使能函数:
定时器中断使能函数:
定时器中断使能函数:
voidTIM_ITConfig(TIM_TypeDef*TIMx,uint16_tTIM_IT,FunctionalStateNewState);状态标志位获取和清除状态标志位获取和清除FlagStatusTIM_GetFlagStatus(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);voidTIM_ClearFlag(TIM_TypeDef*TIMx,uint16_tTIM_FLAG);ITStatusTIM_GetITStatus(TIM_TypeDef*TIMx,uint16_tTIM_IT);voidTIM_ClearITPendingBit(TIM_TypeDef*TIMx,uint16_tTIM_IT);通用定时器常用寄存器和库函数通用定时器常用寄存器和库函数定时器中断实现步骤定时器中断实现步骤能定时器时钟。
能定时器时钟。
RCC_APB1PeriphClockCmd();初始化定时器,配置初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();开启定时器中断,配置开启定时器中断,配置NVIC。
NVIC_Init();使能定时器。
使能定时器。
TIM_Cmd();编写中断服务函数。
编写中断服务函数。
TIMx_IRQHandler();PWM输出库函数概述输出库函数概述PWM输出库函数输出库函数voidTIM_OCxInit(TIM_TypeDef*TIMx,TIM_OCInitTypeDef*TIM_OCInitStruct);typedefstructuint16_tTIM_OCMode;/PWM模式1或者模式2uint16_tTIM_OutputState;/输出使能OR失能uint16_tTIM_OutputNState;uint16_tTIM_Pulse;/比较值,写CCRxuint16_tTIM_OCPolarity;/比较输出极性uint16_tTIM_OCNPolarity;uint16_tTIM_OCIdleState;uint16_tTIM_OCNIdleState;TIM_OCInitTypeDef;TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;/PWM模式2TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;/比较输出使能TIM_OCInitStructure.TIM_Pulse=100;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;/输出极性:
TIM输出比较极性高TIM_OC2Init(TIM3,&TIM_OCInitStructure);/根据T指定的参数初始化外设TIM3OC2STM32PWM工作过程工作过程CCR1:
捕获比较捕获比较(值值)寄存器(寄存器(x=1,2,3,4):
设设置比较值。
置比较值。
CCMR1:
OC1M2:
0位:
位:
对于对于PWM方式下,用于设置方式下,用于设置PWM模式模式1【110】或者或者PWM模式模式2【111】CCER:
CC1P位:
输入位:
输入/捕获捕获1输出极性。
输出极性。
0:
高电平有效,高电平有效,1:
低电平有效。
:
低电平有效。
CCER:
CC1E位:
输入位:
输入/捕获捕获1输出使能。
输出使能。
0:
关闭,关闭,1:
打开。
:
打开。
PWM模式模式1&PWM模式模式2寄存器寄存器TIMx_CCMR1的的OC1M2:
0位来分析:
位来分析:
PWM输出库函数概述输出库函数概述设置比较值函数:
设置比较值函数:
voidTIM_SetCompareX(TIM_TypeDef*TIMx,uint16_tComparex);使能输出比较预装载:
使能输出比较预装载:
使能自动重装载的预装载寄存器允许位:
使能自动重装载的预装载寄存器允许位:
voidTIM_OCxPreloadConfig(TIM_TypeDef*TIMx,uint16_tTIM_OCPreload);voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);STM32PWMvoidTIM_OCxPreloadConfig(TIM_TypeDef*TIMx,uint16_tTIM_OCPreload);voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);自动重载的预装载寄存器自动重载的预装载寄存器voidTIM_ARRPreloadConfig(TIM_TypeDef*TIMx,FunctionalStateNewState);APRE=0,当ARR值被修改时,马上生效;APRE=1,当ARR值被修改时,必须在下一次事件UEV发生后才能更新影子寄存器的值;呼吸灯实验呼吸灯实验要求:
要求:
使用定时器使用定时器11的的PWM功能,输出占空比可变的功能,输出占空比可变的PWM波,用来驱动波,用来驱动LED灯,从而达到灯,从而达到LED【PF7亮亮度由暗变亮,又从亮变暗,如此循环。
度由暗变亮,又从亮变暗,如此循环。
PWM输出配置步骤:
输出配置步骤:
使能定时器使能定时器11和相关和相关IO口时钟。
口时钟。
使能定时器使能定时器11时钟:
时钟:
RCC_APB1PeriphClockCmd();使能使能GPIOF时钟:
时钟:
RCC_AHB1PeriphClockCmd();初始化初始化IO口为复用功能输出。
函数:
口为复用功能输出。
函数:
GPIO_Init();GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;/复用功能复用功能GPIOF7复用映射到定时器复用映射到定时器11GPIO_PinAFConfig(GPIOF,GPIO_PinSource7,GPIO_AF_TIM11);初始化定时器:
初始化定时器:
ARR,PSC等:
等:
TIM_TimeBaseInit();初始化输出比较参数初始化输出比较参数:
TIM_OC1Init();使能预装载寄存器:
使能预装载寄存器:
TIM_OC1PreloadConfig(TIM11,TIM_OCPreload_Enable);使能自动重装载的预装载寄存器允许位TIM_ARRPreloadConfig(TIM11,ENABLE);使能定时器。
使能定时器。
不断改变比较值不断改变比较值CCRx,达到不同的占空比效果,达到不同的占空比效果:
TIM_SetCompare1();voidTIM11_Mode_Config(u16arr,u16psc)GPIO_InitTypeDefGPIO_InitStructure;TIM_TimeBaseInitTypeDefTIM_TimeBaseInitStructure;TIM_OCInitTypeDefTIM_OCInitStructure;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);/*使能GPIOF时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM11,ENABLE);/*使能定时器11时钟*/GPIO_PinAFConfig(GPIOF,GPIO_PinSource7,GPIO_AF_TIM11);/*复用*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;/*复用*/GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;/*推挽输出*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;/*PF7*/GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;/*上拉*/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/*/GPIO_Init(GPIOF,&GPIO_InitStructure);/*初始化IO/*GPIO初始化*/TIM_TimeBaseInitStructure.TIM_Period=arr;/*自动重装载*/TIM_TimeBaseInitStructure.TIM_Prescaler=psc;/*预分频*/TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;/*向上计数*/TIM_TimeBaseInit(TIM11,&TIM_TimeBaseInitStructure);/*初始化*/TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;/*PWM模式1*/TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;/*输出*/TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;/*起始是低*/TIM_OC1Init(TIM11,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM11,TIM_OCPreload_Enable);/*输出比较预装载使能*/TIM_ARRPreloadConfig(TIM11,ENABLE);/*自动重载预装载使能*/TIM_Cmd(TIM11,ENABLE);/*计数使能*/*时基初始化*/*输出模式初始化*/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 08 定时器 原理 应用