商城网站建设系统,网站前端设计外包公司,paypal网站做外贸,手机网站发布页电脑版一、介绍
硬件定时器的工作原理基于时钟信号源提供稳定的时钟信号作为计时器的基准。计数器从预设值开始计数#xff0c;每当时钟信号到达时计数器递增。当计数器达到预设值时#xff0c;定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中每当时钟信号到达时计数器递增。当计数器达到预设值时定时器会触发一个中断信号通知中断控制器处理相应的中断服务程序。在中断服务程序中可以执行一些预定的操作。硬件定时器通常由晶体振荡器、计数器、预设值寄存器和中断控制器等关键组成部分构成晶体振荡器提供稳定的时钟信号源计数器使用时钟信号进行计数预设值寄存器用于设置定时器的初始值中断控制器处理定时器产生的中断信号。
二、定时器类型
定时器通常根据计时方式和功能特点进行分类。
按计时方式分类 向上计数定时器Up Counter从初始值开始逐渐增加计数直到达到目标值或计时结束。向上计数定时器的基本寄存器计数寄存器比较寄存器当计数寄存器和比较寄存器数值一致的时候可以用来触发中断 向下计数定时器Down Counter从初始值开始逐渐减少计数直到计数器的值为零或计时结束。 向下计数定时器基本寄存器计数寄存器重载寄存器当计数为0时候计数寄存器被赋予重载寄存器重复下一次定时
按功能特点分类 基本定时器提供基本的计时和中断功能适用于简单的时间控制需求。 通用定时器/计数器具备更多的功能和灵活性如多通道输出、输入捕获、编码器接口等 三、内部原理
可编程高级控制定时器的主要部分是一个16位计数器和与其相关的自动装载寄存器。这个计数 器可以向上计数、向下计数或者向上向下双向计数。此计数器时钟由预分频器分频得到。 计数器、自动装载寄存器和预分频器寄存器可以由软件读写即使计数器还在运行读写仍然有 效。 时基单元包含 ● 计数器寄存器(TIMx_CNT) ● 预分频器寄存器 (TIMx_PSC) ● 自动装载寄存器 (TIMx_ARR) ● 重复次数寄存器 (TIMx_RCR) 基本定时器 通用定时器 高级定时器 3.1自动装载寄存器介绍
自动装载寄存器是预先装载的写或读自动重装载寄存器将访问预装载寄存器。根据在 TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置预装载寄存器的内容被立即或在 每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当 TIMx_CR1寄存器中的UDIS位等于0时产生更新事件。更新事件也可以由软件产生。随后会详 细描述每一种配置下更新事件的产生。3.2计数器介绍
计数器由预分频器的时钟输出CK_CNT驱动仅当设置了计数器TIMx_CR1寄存器中的计数器使 能位(CEN)时 CK_CNT才有效。 (更多有关使能计数器的细节请参见控制器的从模式描述)。 注意在设置了TIMx_CR寄存器的CEN位的一个时钟周期后计数器开始计数。
3.3预分频器介绍 预分频器可以将计数器的时钟频率按1到65536之间的任意值分频。它是基于一个(在TIMx_PSC 寄存器中的)16位寄存器控制的16位计数器。因为这个控制寄存器带有缓冲器它能够在运行时 被改变。新的预分频器的参数在下一次更新事件到来时被采用。. •计数器计数频率CK_CNT CK_PSC / (PSC 1) 四、输出比较OC,Output Compare模式
输出比较可以通过比较CNT与CCR寄存器值的关系来对输出电平进行置1、置0或翻转的操作用于输出一定频率和占空比的PWM波形。每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能。
每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器)包括捕获的输入部分 (数字滤波、多路复用和预分频器)和输出部分(比较器和输出控制)。 下面几张图是一个捕获/比较通道概览。 输入部分对相应的TIx输入信号采样并产生一个滤波后的信号TIxF。然后一个带极性选择的 边缘检测器产生一个信号(TIxFPx)它可以作为从模式控制器的输入触发或者作为捕获控制。该 信号通过预分频进入捕获寄存器(ICxPS)。 五、输入捕获(IC,Input Capture模式
在输入捕获模式下当检测到ICx信号上相应的边沿后计数器的当前值被锁存到捕获/比较寄存 器(TIMx_CCRx)中。当捕获事件发生时相应的CCxIF标志(TIMx_SR寄存器)被置’1’如果使能 了中断或者DMA操作则将产生中断或者DMA操作。
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32的定时器除了TIM6、TIM7其他的定时器都有输入捕获的功能。每个高级定时器和通用定时器都拥有4个输入捕获通道可配置为PWMI模式同时测量频率和占空比可配合主从触发模式实现硬件全自动测量。 六、实例
使用stm32定时器的输入捕获测频率
配置输入捕获
#include stm32f10x.h // Device header/*** 函 数输入捕获初始化* 参 数无* 返 回 值无*/
void IC_Init(void)
{/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //开启TIM3的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA6引脚初始化为上拉输入/*配置时钟源*/TIM_InternalClockConfig(TIM3); //选择TIM3为内部时钟若不调用此函数TIM默认也为内部时钟/*时基单元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 65536 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 72 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM3, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM3的时基单元/*输入捕获初始化*/TIM_ICInitTypeDef TIM_ICInitStructure; //定义结构体变量TIM_ICInitStructure.TIM_Channel TIM_Channel_1; //选择配置定时器通道1TIM_ICInitStructure.TIM_ICFilter 0xF; //输入滤波器参数可以过滤信号抖动TIM_ICInitStructure.TIM_ICPolarity TIM_ICPolarity_Rising; //极性选择为上升沿触发捕获TIM_ICInitStructure.TIM_ICPrescaler TIM_ICPSC_DIV1; //捕获预分频选择不分频每次信号都触发捕获TIM_ICInitStructure.TIM_ICSelection TIM_ICSelection_DirectTI; //输入信号交叉选择直通不交叉TIM_ICInit(TIM3, TIM_ICInitStructure); //将结构体变量交给TIM_ICInit配置TIM3的输入捕获通道/*选择触发源及从模式*/TIM_SelectInputTrigger(TIM3, TIM_TS_TI1FP1); //触发源选择TI1FP1TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset); //从模式选择复位//即TI1产生上升沿时会触发CNT归零/*TIM使能*/TIM_Cmd(TIM3, ENABLE); //使能TIM3定时器开始运行
}/*** 函 数获取输入捕获的频率* 参 数无* 返 回 值捕获得到的频率*/
uint32_t IC_GetFreq(void)
{return 1000000 / (TIM_GetCapture1(TIM3) 1); //测周法得到频率fx fc / N这里不执行1的操作也可
}配置PWM产生频率信号
#include stm32f10x.h // Device header/*** 函 数PWM初始化* 参 数无* 返 回 值无*/
void PWM_Init(void)
{/*开启时钟*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //开启TIM2的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //开启GPIOA的时钟/*GPIO重映射*/
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //开启AFIO的时钟重映射必须先开启AFIO的时钟
// GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE); //将TIM2的引脚部分重映射具体的映射方案需查看参考手册
// GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //将JTAG引脚失能作为普通GPIO引脚使用/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; //GPIO_Pin_15;GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure); //将PA0引脚初始化为复用推挽输出 //受外设控制的引脚均需要配置为复用模式 /*配置时钟源*/TIM_InternalClockConfig(TIM2); //选择TIM2为内部时钟若不调用此函数TIM默认也为内部时钟/*时基单元初始化*/TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量TIM_TimeBaseInitStructure.TIM_ClockDivision TIM_CKD_DIV1; //时钟分频选择不分频此参数用于配置滤波器时钟不影响时基单元功能TIM_TimeBaseInitStructure.TIM_CounterMode TIM_CounterMode_Up; //计数器模式选择向上计数TIM_TimeBaseInitStructure.TIM_Period 100 - 1; //计数周期即ARR的值TIM_TimeBaseInitStructure.TIM_Prescaler 720 - 1; //预分频器即PSC的值TIM_TimeBaseInitStructure.TIM_RepetitionCounter 0; //重复计数器高级定时器才会用到TIM_TimeBaseInit(TIM2, TIM_TimeBaseInitStructure); //将结构体变量交给TIM_TimeBaseInit配置TIM2的时基单元/*输出比较初始化*/TIM_OCInitTypeDef TIM_OCInitStructure; //定义结构体变量TIM_OCStructInit(TIM_OCInitStructure); //结构体初始化若结构体没有完整赋值//则最好执行此函数给结构体所有成员都赋一个默认值//避免结构体初值不确定的问题TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; //输出比较模式选择PWM模式1TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; //输出极性选择为高若选择极性为低则输出高低电平取反TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; //输出使能TIM_OCInitStructure.TIM_Pulse 0; //初始的CCR值TIM_OC1Init(TIM2, TIM_OCInitStructure); //将结构体变量交给TIM_OC1Init配置TIM2的输出比较通道1/*TIM使能*/TIM_Cmd(TIM2, ENABLE); //使能TIM2定时器开始运行
}/*** 函 数PWM设置CCR* 参 数Compare 要写入的CCR的值范围0~100* 返 回 值无* 注意事项CCR和ARR共同决定占空比此函数仅设置CCR的值并不直接是占空比* 占空比Duty CCR / (ARR 1)*/
void PWM_SetCompare1(uint16_t Compare)
{TIM_SetCompare1(TIM2, Compare); //设置CCR1的值
}/*** 函 数PWM设置PSC* 参 数Prescaler 要写入的PSC的值范围0~65535* 返 回 值无* 注意事项PSC和ARR共同决定频率此函数仅设置PSC的值并不直接是频率* 频率Freq CK_PSC / (PSC 1) / (ARR 1)*/
void PWM_SetPrescaler(uint16_t Prescaler)
{TIM_PrescalerConfig(TIM2, Prescaler, TIM_PSCReloadMode_Immediate); //设置PSC的值
}主函数使用定时器的捕获功能开始测量频率
#include stm32f10x.h // Device header
#include Delay.h
#include OLED.h
#include PWM.h
#include IC.hint main(void)
{/*模块初始化*/OLED_Init(); //OLED初始化PWM_Init(); //PWM初始化IC_Init(); //输入捕获初始化/*显示静态字符串*/OLED_ShowString(1, 1, Freq:00000Hz); //1行1列显示字符串Freq:00000Hz/*使用PWM模块提供输入捕获的测试信号*/PWM_SetPrescaler(720 - 1); //PWM频率Freq 72M / (PSC 1) / 100PWM_SetCompare1(50); //PWM占空比Duty CCR / 100while (1){OLED_ShowNum(1, 6, IC_GetFreq(), 5); //不断刷新显示输入捕获测得的频率}
}参考
定时器的基本原理概念以及应用_①定时器的原理是什么?怎么计时的?-CSDN博客 STM32——输入捕获_stm32 定时器 捕获-CSDN博客
cubemx STM32F103R8T输入捕获配制_mob64ca14095513的技术博客_51CTO博客 文章转载自: http://www.morning.wslr.cn.gov.cn.wslr.cn http://www.morning.crhd.cn.gov.cn.crhd.cn http://www.morning.jcrfm.cn.gov.cn.jcrfm.cn http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn http://www.morning.zlhcw.cn.gov.cn.zlhcw.cn http://www.morning.pzss.cn.gov.cn.pzss.cn http://www.morning.lwwnq.cn.gov.cn.lwwnq.cn http://www.morning.ydxg.cn.gov.cn.ydxg.cn http://www.morning.pmftz.cn.gov.cn.pmftz.cn http://www.morning.gtxrw.cn.gov.cn.gtxrw.cn http://www.morning.ftwlay.cn.gov.cn.ftwlay.cn http://www.morning.dwyyf.cn.gov.cn.dwyyf.cn http://www.morning.khxwp.cn.gov.cn.khxwp.cn http://www.morning.bbtn.cn.gov.cn.bbtn.cn http://www.morning.pmwhj.cn.gov.cn.pmwhj.cn http://www.morning.jqtb.cn.gov.cn.jqtb.cn http://www.morning.jljwk.cn.gov.cn.jljwk.cn http://www.morning.zthln.cn.gov.cn.zthln.cn http://www.morning.fyglr.cn.gov.cn.fyglr.cn http://www.morning.mhwtq.cn.gov.cn.mhwtq.cn http://www.morning.brnwc.cn.gov.cn.brnwc.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.fkwp.cn.gov.cn.fkwp.cn http://www.morning.qypjk.cn.gov.cn.qypjk.cn http://www.morning.zhoer.com.gov.cn.zhoer.com http://www.morning.jzmqk.cn.gov.cn.jzmqk.cn http://www.morning.plgbh.cn.gov.cn.plgbh.cn http://www.morning.pbtdr.cn.gov.cn.pbtdr.cn http://www.morning.lmcrc.cn.gov.cn.lmcrc.cn http://www.morning.cxlys.cn.gov.cn.cxlys.cn http://www.morning.jtybl.cn.gov.cn.jtybl.cn http://www.morning.rqrxh.cn.gov.cn.rqrxh.cn http://www.morning.mkyxp.cn.gov.cn.mkyxp.cn http://www.morning.nlkhr.cn.gov.cn.nlkhr.cn http://www.morning.nssjy.cn.gov.cn.nssjy.cn http://www.morning.srgwr.cn.gov.cn.srgwr.cn http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn http://www.morning.jqbpn.cn.gov.cn.jqbpn.cn http://www.morning.bpmfr.cn.gov.cn.bpmfr.cn http://www.morning.gwjsm.cn.gov.cn.gwjsm.cn http://www.morning.fbhmn.cn.gov.cn.fbhmn.cn http://www.morning.hqbk.cn.gov.cn.hqbk.cn http://www.morning.xdfkrd.cn.gov.cn.xdfkrd.cn http://www.morning.xnqjs.cn.gov.cn.xnqjs.cn http://www.morning.pymff.cn.gov.cn.pymff.cn http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.rxdsq.cn.gov.cn.rxdsq.cn http://www.morning.mzcrs.cn.gov.cn.mzcrs.cn http://www.morning.jwgnn.cn.gov.cn.jwgnn.cn http://www.morning.yxbrn.cn.gov.cn.yxbrn.cn http://www.morning.wrdpj.cn.gov.cn.wrdpj.cn http://www.morning.trrhj.cn.gov.cn.trrhj.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.rmlz.cn.gov.cn.rmlz.cn http://www.morning.lhgkr.cn.gov.cn.lhgkr.cn http://www.morning.xmpbh.cn.gov.cn.xmpbh.cn http://www.morning.ysckr.cn.gov.cn.ysckr.cn http://www.morning.qqhersx.com.gov.cn.qqhersx.com http://www.morning.snygg.cn.gov.cn.snygg.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn http://www.morning.ftmzy.cn.gov.cn.ftmzy.cn http://www.morning.lchtb.cn.gov.cn.lchtb.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.yckwt.cn.gov.cn.yckwt.cn http://www.morning.chtnr.cn.gov.cn.chtnr.cn http://www.morning.npxht.cn.gov.cn.npxht.cn http://www.morning.mtsck.cn.gov.cn.mtsck.cn http://www.morning.dwfxl.cn.gov.cn.dwfxl.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.bfybb.cn.gov.cn.bfybb.cn http://www.morning.qypjk.cn.gov.cn.qypjk.cn http://www.morning.rgksz.cn.gov.cn.rgksz.cn http://www.morning.lpmlx.cn.gov.cn.lpmlx.cn http://www.morning.zkzjm.cn.gov.cn.zkzjm.cn http://www.morning.rgxf.cn.gov.cn.rgxf.cn http://www.morning.hypng.cn.gov.cn.hypng.cn http://www.morning.ppllj.cn.gov.cn.ppllj.cn http://www.morning.jcnmy.cn.gov.cn.jcnmy.cn