STM8 TIM1 PWM输入捕获学习
- 格式:pdf
- 大小:177.81 KB
- 文档页数:8
S T M教程S T M S定时器模块及其应用实例集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]第十三章 STM8S207 定时器模块及其应用实例这一节,我们将向大家介绍如何使用 STM8 的定时器中的基本定时功能,STM8 的定时器功能十分强大,有 TIM1 高级定时器,也有 TIM2、TIM3 等通用定时器,还有TIM4 基本定时器。
在 STM8S 参考手册里面,定时器的介绍占了 1/3 的篇幅,足见其重要性。
这一节,我们分别介绍 TIM1 到 TIM4 定时器中的基本定时功能。
例程一、16 位高级控制定时器(TIM1)简介:TIM1 由一个 16 位的自动装载计数器组成,它由一个可编程的预分频器驱动。
TIM1 有 4 个通道,分别是 1 到 4。
分别对应于四个不同的捕获/比较通道。
高级控制定时器适用于许多不同的用途:基本的定时测量输入信号的脉冲宽度(输入捕获)产生输出波形(输出比较,PWM 和单脉冲模式)对应与不同事件(捕获,比较,溢出,刹车,触发)的中断与 TIM5/TIM6 或者外部信号(外部时钟,复位信号,触发和使能信号)同步高级控制定时器广泛的适用于各种控制应用中,包括那些需要中间对齐模式PWM 的应用,该模式支持互补输出和死区时间控制。
高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。
这一节我们实现的功能是基本的定时,关于 PWM 的编程留下以后的章节中。
还有建议大家研究更为深入的功能TIM1 的时基单元包括,如下图所示:● 16 位向上/向下计数器● 16 位自动重载寄存器●重复计数器●预分频器16 位计数器,预分频器,自动重载寄存器和重复计数器寄存器都可以通过软件进行读写操作。
自动重载寄存器由预装载寄存器和影子寄存器组成。
可在在两种模式下写自动重载寄存器:●自动预装载已使能(TIM1_CR1 寄存器的 ARPE 位置位)。
带你学习STM8自带输入捕获功能
最近在用STM8的过程中需要用到一个频率检测的功能,还好
STM8S207的定时器中自带有输入捕获功能,之前还想着用定时器计数方式来实现的,但既然人家提供了该功能,那就试试吧,由于硬件里面接的是PC1引脚就只看了Timer1,其他的定时器应该也是类似的,看了资料之后发现STM8的输入捕获其实与STC12C5A60S2中的PCA捕获模式很类似,但是看资料没有后者清晰易懂。
在捕获模式中,基本上只用到了读进程,在STM8中有一个影子寄存器,但对于我们来说是看不到的,我们仅操作预装载寄存器即可。
而且需要注意的是无论是计数器还是捕获/比较寄存器都是先读/写高8位,后读/写低8位数据。
在文档中给出了一个输入捕获模式的流程
[cpp] view plain copyTIM1_CCER1 &= (unsigned char)~0x02;//上升沿或者高电平触发。
STM8学习笔记——PWM模块首先将管脚配置为推挽输出。
下面以向上计数模式为例来讲述PWM 产生的原理:TIMx 开始向上计数,TIMx_CNT 为计数值,计数一次加1,TIMx_ARR 确定了计数的上限,达到上限后计数器从0 开始重新计数,所以一次PWM 频率就由TIMx_ARR 来确定了,即计数器时钟*(TIMx_ARR-1),频率确定了,接下来就是占空比。
占空比是由TIMx_CCRx 来确定的,PWM模式1 下当TIMx_CNT=TIMx_CCRx 时,输出OCiREF 无效电平,至于有效电平是0 还是1,要设置TIMx_CCERx,这样产生了一个PWM 波形,可以说配置非常灵活,当TIMx_CCRx 为0 时,占空比就为0,当TIMx_CCRx 大于TIMx_ARR 时,就一直输出高电平(占空比100%)。
下图是个例子:以下是我写的一个参考程序,测试通过void TIM1_Init(void){//定时器1 初始化CLK_PCKENR1|=0x80;//开启定时器1 外设时钟TIM1_EGR=0x01;//重新初始化TIM1 TIM1_EGR|=0x20;//重新初始化TIM1 TIM1_ARRH=0x00;//设定重装载值TIM1_ARRL=254; TIM1_PSCRH=0;//预分频TIM1_PSCRL=9; TIM1_CR1=0;//边沿对齐,向上计数} void TIM1_PWM_Init(){ //TIM1_CCER1=0x03;//低电平有效//TIM1_CCMR1=0x70;//PWM 模式2TIM1_CCER1=0x01;//高电平有效TIM1_CCMR1=0x60;//PWM 模式1TIM1_CCR1H=0;//占空比TIM1_CCR1L=50; TIM1_CR1|=0x01;//向上计数,无缓存,使能TIM1_BKR=0x80;//开启刹车}tips:感谢大家的阅读,本文由我司收集整编。
PWM输入捕获频率学习笔记陈宏敏2013-5-251、PWM:脉冲宽度调制,英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。
简单一点,就是对脉冲宽度的控制。
2、STM32的定时器除了TIM6和TIM7。
其他的定时器都可以用来产生PWM输出。
其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出。
而通用定时器也能同时产生多达4路的PWM输出,这样STM32最多可以同时产生30路PWM输出!等下我用TIM2的CH2产生一路PWM输出和PWM输入。
3、要使STM32的通用定时器TIMx产生PWM输出,我们会用到3个寄存器,来控制PWM。
这三个寄存器分别是:捕获/比较模式寄存器(TIMx_CCMR1/2)、捕获/比较使能寄存器(TIMx_CCER)、捕获/比较寄存器(TIMx_CCR1~4)。
(注意,还有个TIMx的ARR寄存器是用来控制pwm的输出频率)。
首先是捕获/比较模式寄存器(TIMx_CCMR1/2),该寄存器总共有2个,TIMx _CCMR1和TIMx _CCMR2。
TIMx_CCMR1控制CH1和2,而TIMx_CCMR2控制CH3和CH4。
其次是捕获/比较使能寄存器(TIMx_CCER),该寄存器控制着各个输入输出通道的开关。
最后是捕获/比较寄存器(TIMx_CCR1~4),该寄存器总共有4个,对应4个输通道CH1~4。
4个寄存器都差不多,说的简单一点,这个寄存器就是用来设置pwm的占空比。
4、具体看STM芯片手册。
TIMx_ARR寄存器的值怎么样来确定PWM的频率?TIM_Period(即是TIMx_ARR寄存器的值)的大小实际上表示的是需要经过TIM_Period次计数后才会发生一次更新或中断。
接下来需要设置时钟预分频数TIM_Prescaler,这里有个公式,我们举例来说明:例如系统频率是72MHz,TIM_Prescaler=71,那么PWM的时钟频率是72MHz/(71+1)=1MHz。
PWM输入捕获(只使用一路定时器通道)PWM(Pulse Width Modulation)输入捕获是一种用于测量外部信号的技术,它基于定时器的工作原理。
在PWM输入捕获中,只使用一路定时器通道来实现信号测量。
下面将详细介绍PWM输入捕获的原理和实现方法。
一、PWM输入捕获原理PWM输入捕获的基本原理是通过测量定时器通道引脚上的高电平脉冲的宽度来计算外部信号的周期和占空比。
通常,定时器会以固定的频率进行计数,并将计数值存储在特定的寄存器中。
当检测到外部信号的上升沿时,定时器开始计数,当检测到下降沿时,定时器停止计数。
停止计数后,可以通过读取定时器寄存器的值获取外部信号的宽度。
通过测量多个周期的宽度,可以计算出信号的周期和占空比。
二、PWM输入捕获的实现方法以下是一种使用单通道定时器实现PWM输入捕获的步骤:1.配置定时器模式和通道首先,需要将定时器配置为输入捕获模式和单通道工作模式。
可以根据具体的硬件平台和需求选择适合的定时器和通道。
2.配置定时器时钟和频率根据需要,设置定时器的时钟源和频率。
定时器的频率应与外部信号的频率匹配或适当倍频。
这样可以确保定时器的计数能够准确地测量外部信号的周期和宽度。
3.配置输入捕获触发源选择合适的外部引脚作为输入捕获触发源,并将其连接到定时器的通道引脚。
通常,触发源可以是外部信号上的上升沿或下降沿。
4.配置中断和寄存器启用定时器的输入捕获中断,并设置适当的中断优先级。
还需要配置定时器寄存器以存储捕获到的计数值。
5.中断服务函数当定时器捕获到外部信号时,会触发定时器的输入捕获中断。
可以编写相应的中断服务函数来处理捕获事件。
在中断服务函数中,可以读取定时器寄存器的值,并进行相应的后续计算和处理。
6.数据处理和应用获取到外部信号的周期和占空比后,可以进行相应的数据处理和应用。
例如,可以将测量结果用于控制系统的反馈控制、信号发生器、信号分析等应用。
7.循环测量根据需要,可以设置定时器为重复测量模式,以定期测量外部信号的周期和占空比。
STM8S做输入捕获STM8S做输入捕获希望我这个对正在用STM8S做输入捕获,测频的有帮助!-->问卷调查,答题有礼第一部:内部时钟 CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //16M第二步:配置IO口我用的是STM8S103k3t6GPIO_Init(GPIOB , GPIO_PIN_0 , GPIO_MODE_IN_PU_NO_IT); //TIM1_CH1 PB0端口第三步:TIM1初始化,注意:tim1 分频是16000000/1600 =10000那计数一下的时间是!1/10000 S向上计数 0到20000 的时间是2Svoid TIME1_INIT(void){TIM1_DeInit();TIM1_TimeBaseInit(1600, TIM1_COUNTERMODE_UP, 20000, 0);TIM1_ICInit( TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI , TIM1_ICPSC_DIV8, 0x0);TIM1_ITConfig( TIM1_IT_CC1 , ENABLE);TIM1_ClearFlag(TIM1_FLAG_CC1);TIM1_Cmd(ENABLE);}第四步: TIM4用来产生溢出中断用的!void TIME4_INIT(void){TIM4_TimeBaseInit(TIM4_PRESCALER_32 ,250);TIM4_ARRPreloadConfig(ENABLE);TIM4_PrescalerConfig(TIM4_PRESCALER_32,TIM4_PSCRELO ADMODE_IMMEDIATE);TIM4_SetAutoreload(250);TIM4_Cmd(ENABLE);TIM4_ITConfig(TIM4_IT_UPDATE,ENABLE);}第五步: TIM1的中断程序连续进入两次中断,两次计数的值乘第三步中计数一下的时间就是脉宽// if(TIM1_GetFlagStatus(TIM1_FLAG_CC1))if(TIM1_GetITStatus(TIM1_FLAG_CC1) != RESET){switch(temp){case 0: ICValue1=TIM1_GetCapture1();temp=1;break;case 1: ICValue2=TIM1_GetCapture1();temp=2;break;default:TIM1_CCxCmd(TIM1_CHANNEL_1, DISABLE);TIM1_ITConfig(TIM1_IT_CC1, DISABLE);temp=3;break;}TIM1_ClearITPendingBit(TIM1_IT_CC1);TIM1_ClearFlag(TIM1_FLAG_CC1);}第六步:TIM4的中断程序if(temp==3){temp=0;if(ICValue2>ICValue1){disvalue=ICValue2-ICValue1;}else if(ICValue2<ICValue1){//disvalue=0xffff+ICValue2-ICValue1;disvalue=20000+ICValue2-ICValue1; //防止计数到末端的时候重新计数}val[i0++] = disvalue;if(i0>10) i0=0;display();TIM1_CCxCmd(TIM1_CHANNEL_1, ENABLE);TIM1_ITConfig(TIM1_IT_CC1, ENABLE);}else{display();}TIM4_ClearITPendingBit(TIM4_IT_UPDATE);。
2016.4.17PWM 输入 ◆ STM32 输入捕获工作过程(通道1为例)一句话总结工作过程:通过检测TIMx_CHx 上的边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的捕获/比较寄存器(TIMx_CCRx)里面,完成一次捕获。
● 步骤1:设置输入捕获滤波器(TIMx 捕获/比较模式寄存器 1 (TIMx_CCMR1))位 7:4 IC1F :输入捕获 1 滤波器 (Input capture 1 filter)此位域可定义 TI1 输入的采样频率和适用于 TI1 的数字滤波器带宽。
数字滤波器由事件计数器组成,每 N 个事件才视为一个有效边沿:0000:无滤波器,按 fDTS 频率进行采样1000:fSAMPLING=fDTS/8, N=60001: fSAMPLING=fCK_INTN=21001: fSAMPLING=fDTS/8, N=80010: fSAMPLING=fCK_INTN=41010: fSAMPLING=fDTS/16, N=50011: fSAMPLING=fCK_INTN=81011: fSAMPLING=fDTS/16, N=60100: fSAMPLING=fDTS/2N=61100:fSAMPLING=fDTS/16,N=80101: fSAMPLING=fDTS/2N=8 1101: fSAMPLING=fDTS/32,N=50110: fSAMPLING=fDTS/4N=6 1110: fSAMPLING=fDTS/32, N=6 0111: fSAMPLING=fDTS/4N=8 1111: fSAMPLING=fDTS/32, N=8注意:在当前硅版本中,当ICxF[3:0]= 1、 2 或 3 时,将用CK_INT 代替公式中的f DTS。
●步骤2:设置输入捕获极性 (TIMx 捕获/比较使能寄存器(TIMx_CCER))CC1 通道配置为输出:0: OC1 高电平有效1: OC1 低电平有效CC1 通道配置为输入:该位选择是IC1还是IC1的反相信号作为触发或捕获信号00:非反相/上升沿触发10:保留,不使用此配置。
STM8教程实验8-定时器TIM1例程⼋ TIM1这⼀节,我们将向⼤家介绍如何使⽤STM8的定时器中的基本定时功能,STM8的定时器功能⼗分强⼤,有TIM1⾼级定时器,也有TIM2、TIM3等通⽤定时器,还有TIM4基本定时器。
在STM8S参考⼿册⾥⾯,定时器的介绍占了1/3的篇幅,⾜见其重要性。
这⼀节,我们分别介绍TIM1的基本定时功能16位⾼级控制定时器(TIM1)简介:TIM1由⼀个16位的⾃动装载计数器组成,它由⼀个可编程的预分频器驱动。
TIM1有4个通道,分别是1到4。
分别对应于四个不同的捕获/⽐较通道。
⾼级控制定时器适⽤于许多不同的⽤途:基本的定时测量输⼊信号的脉冲宽度(输⼊捕获)产⽣输出波形(输出⽐较,PWM和单脉冲模式)对应与不同事件(捕获,⽐较,溢出,刹车,触发)的中断与TIM5/TIM6或者外部信号(外部时钟,复位信号,触发和使能信号)同步⾼级控制定时器⼴泛的适⽤于各种控制应⽤中,包括那些需要中间对齐模式PWM的应⽤,该模式⽀持互补输出和死区时间控制。
⾼级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进⾏选择。
TIM1的时基单元包括,如下图所⽰:● 16位向上/向下计数器● 16位⾃动重载寄存器●重复计数器●预分频器16位计数器,预分频器,⾃动重载寄存器和重复计数器寄存器都可以通过软件进⾏读写操作。
⾃动重载寄存器由预装载寄存器和影⼦寄存器组成。
可在在两种模式下写⾃动重载寄存器:●⾃动预装载已使能(TIM1_CR1寄存器的ARPE位置位)。
在此模式下,写⼊⾃动重载寄存器的数据将被保存在预装载寄存器中,并在下⼀个更新事件(UEV)时传送到影⼦寄存器。
●⾃动预装载已禁⽌(TIM1_CR1寄存器的ARPE位清除)。
在此模式下,写⼊⾃动重载寄存器的数据将⽴即写⼊影⼦寄存器。
更新事件的产⽣条件:●计数器向上或向下溢出。
●软件置位了TIM1_EGR寄存器的UG位。