STM8S定时器和计数器的区别重复计数器有什么用途

21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 7006|回复: 10
关于STM8S定时器时间计算问题?
&&已结帖(10)
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
主题帖子积分
专家等级:结帖率:94%
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
请教下各位高手,以下这段STM8S003F3P单片机定时器计算有没问题,为什么每次计算出来&&时间都差一倍,还是资料没看懂,求指教:附定时器初始化代码!
& && && && &&&{
& && && && && & CLK_CMSR=0xE1;//内部HSI震荡选择
& & & & & & & & CLK_CKDIVR = 0x08;//HSI内部8M震荡
& & & & & & & & TIM1_CR1 = 0x00;//定时器计数方式控制寄存器
& & & & & & & & TIM1_IER = 0x01;//允许中断
& & & & & & & & TIM1_PSCRH = 0x01;//定时器预分频高8位
& & & & & & & & TIM1_PSCRL = 0x8f;//定时器预分频低8位f=8M/399+1=20000
& & & & & & & & TIM1_ARRH = 0x00;& & & & //定时器初始上限值高8位(0/50)
& & & & & & & & TIM1_ARRL = 0x01;//定时器初始上限值低8位(50US进中断)
& & & & & & & & TIM1_CR1 = 0x01;//开定时器1
& && && && & }
本来想定个50us的,然后弄成1秒,实际出来时间是计算的2倍...
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
/*******************************************
* 名称:& &&&TIM4_Init
* 功能:& &&&TIM4初始化
* 入口参数: 无
* 出口参数: 无
* 说明:& &&&定时时间是250us
& & & & & & & & & & & & & & & & & & & & & & & &&&TIM4_ARR值 =& & & & t*fmaster/分频系数
& & & & & & & & & & & & & & & & & & & & & & & &&&t--定时时间,单位是秒
& & & & & & & & & & & & & & & & & & & & & & & &&&f_master单位是HZ
& & & & & & & & & & & & & & & & & & & & & & & &&&分频系数=2的TIM4_PSCR[2:0]的次方
********************************************/
void TIM4_Init()
& & & && & TIM4_IER = 0x00;&&// 禁止中断
& &&&TIM4_EGR = 0x01;&&//允许产生更新事件
& & & & & & & &&&TIM4_PSCR=0X04;& &//分频系数是16
& & & & & & & &&&TIM4_ARR=250;& &&&//定时时间是250us
& & & & & & & &&&TIM4_CNTR=250;
& & & & & & & &&&TIM4_IER=0X01;& & //开定时器中断
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
我用的是外部晶振16MHZ,故在程序开始要选择if(CLK_CMSR != 0XB4)
& & & & & & & &&&
& &&&CLK_SWCR |= 0X02;& & //SWEN置1,使能切换
& &&&CLK_SWR=0XB4;& && &&&//目标时钟源--0XB4指HSE& & & & & & & & & & & && &
& &&&while((CLK_SWCR&0X08)==0); //等待,直到切换成
& && && && && && && && && && &&&功,SWIF被置1
& &&&CLK_SWCR = 0;& && &&&//消除标志位
& &&&CLK_CSSR |= 0X01;& & //打开时钟安全系统CSS
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
助理工程师, 积分 1376, 距离下一级还需 624 积分
/*******************************************
* 名称:& &&&TIM2_Init
* 功能:& &&&TIM2初始化
* 入口参数: 无
* 出口参数: 无
* 说明:& &&&定时时间是1ms
& & & & & & & & & & & & & & & & & & & & & & & &&&TIM1_ARR值 =& & & & t*fmaster/分频系数
& & & & & & & & & & & & & & & & & & & & & & & &&&t--定时时间,单位是秒
& & & & & & & & & & & & & & & & & & & & & & & &&&f_master单位是HZ
& & & & & & & & & & & & & & & & & & & & & & & &&&分频系数=2的TIM2_PSCR[3:0]的次方
********************************************/
void TIM2_Init()
& &&&TIM2_IER = 0x00;& && &//禁止中断
& &&&TIM2_EGR = 0x01;& && &//允许产生更新事件
& & & & & & & &&&
& &&&TIM2_PSCR=0X04;& && & //分频系数是16
& &&&TIM2_ARRH =0x03;& && &//定时时间数值
& &&&TIM2_ARRL =0xE8;
& & & & & & & &&&
& &&&TIM2_CNTRH=0X03;
& &&&TIM2_CNTRL=0XE8;
& & & & & & & &&&
& &&&TIM2_IER=0X01;& && &&&//开定时器中断
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
主题帖子积分
专家等级:结帖率:94%
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
hopewise 发表于
/*******************************************
* 名称:& &&&TIM4_Init
* 功能:& &&&TIM4初始化
我这个是定时器1& &每次计算的和实际的都差一倍& & 每次定时都要用LED先测试过才敢用&&o(︶︿︶)o 唉
主题帖子积分
主题帖子积分
专家等级:结帖率:100%打赏:0.00受赏:43.00
主题帖子积分
尛舞icc 发表于
我这个是定时器1& &每次计算的和实际的都差一倍& & 每次定时都要用LED先测试过才敢用&&o(︶︿︶)o 唉 ...
可以按你楼上的程序,改成定时器4,8分频试下;
欢迎进入21IC ST、机器人等版块
电子工程师群(深圳):
电子工程师群1:1897584;
物联网群:;智能机器人群:; AGV及立体仓库群:;
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
主题帖子积分
专家等级:结帖率:94%
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
mmuuss586 发表于
可以按你楼上的程序,改成定时器4,8分频试下;
主题帖子积分
中级技术员, 积分 239, 距离下一级还需 61 积分
中级技术员, 积分 239, 距离下一级还需 61 积分
主题帖子积分
专家等级:结帖率:60%
主题帖子积分
中级技术员, 积分 239, 距离下一级还需 61 积分
中级技术员, 积分 239, 距离下一级还需 61 积分
你是没有进去做口线翻转,否则就会发现不是时间间隔那么简单,我的帖子就知道了,我避开了但是为什么这样也没搞清楚,看来真正搞清楚的人不多
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
主题帖子积分
专家等级:结帖率:94%
主题帖子积分
高级技术员, 积分 537, 距离下一级还需 463 积分
高级技术员, 积分 537, 距离下一级还需 463 积分
mingjiezhong 发表于
你是没有进去做口线翻转,否则就会发现不是时间间隔那么简单,我的帖子就知道了,我避开了但是为什么这样也 ...
没听懂& &你说的是什么...&&刚接触这个单片机 不久呢& &有些地方不太理解
主题帖子积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
* 说明: Timer定时1MS 计算
& && && &使用外部24MHz:& & 1/(主晶体/分频值PSC)*(计数器ARP值+1益出)=定时时间
& && && &基准值BaseTime_Max=1/(68)*(.478s&&
& && && &基准值BaseTime_Min=1/+1)=0.083us
& && && &使用内部部16MHz& &1/(主晶体/分频值PSC)*(计数器ARP值+1益出)=定时时间
& && && &基准值BaseTime_Max=1/(68)*(4.217s
& && && &基准值BaseTime_Min=1/+1)=0.125us
主题帖子积分
实习生, 积分 31, 距离下一级还需 19 积分
实习生, 积分 31, 距离下一级还需 19 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 31, 距离下一级还需 19 积分
实习生, 积分 31, 距离下一级还需 19 积分
时间类勋章
技术领袖奖章
人才类勋章
时间类勋章
坚毅之洋流
发帖类勋章
荣誉元老奖章
等级类勋章
技术新星奖章
人才类勋章查看: 6192|回复: 18
STM8 TIM1重复计数器 RCR
影子寄存器
本帖最后由 wshrww 于
21:48 编辑
刚接触STM8不久,这两天遇到TIM1_RCR,它是重复计数器寄存器,刚开始没弄懂啥意思,后来读了会用户手册才明白。其中重复计数器意思指的是对计数器溢出(包括上溢和下溢)的次数进行计数,是递减的,每到达0时才会产生一个更新事件。而TIM1_RCR就是重复计数器减为0时重新从TIM1_RCR(重复计数器寄存器)的值开始计数。
比如说,你的定时器预装载计数器TIM1_ARR的值为125,那么TIM1_CNT计数器每到达125都会产生溢出,那么重复计数器中的值就会减1,如果重复计数器的值为0那么就会立即产生一个UEV更新事件,如果为1,那就是每隔一个溢出产生一个UEV更新事件,其他依次都类似。
情况如下图所示:
更新事件发生之后如果ARPE位被使能(即置为1),那么预装载寄存器中的值就会被更新到对应的影子寄存器。那么影子寄存器都是什么呢?
影子寄存器在这里实际上才是在比较的时候起作用的,也就是为预装载寄存器做缓冲,目的是为了当预装载寄存器ARR中的值更新后,影子寄存器仍然保持原来的值(这是在ARPE=1的情况下),参与比较操作的是影子寄存器,所以这样不会影响到计数器的工作误差。它在更新事件发生之后影子寄存器的值才从ARR寄存器那里获得更新,它也有同步的作用,使所有的相关寄存器数值都同时更新。
当ARPE为0时,影子寄存器是立即更新的,不等待更新事件 的发生。
说明:这些只是针对STM8的定时器说的,对于其他还不清楚。这也只是本人的一点点心得,请各位大侠多多指点。
本帖子中包含更多资源
才可以下载或查看,没有帐号?
挺好的,顶一下
很受启发。顶一个
同意楼主的看法!
可以用重复计数器,来实现PWM脉冲数可调不呢?
顶楼主。说明白了。
可以呀,不过只有8位
你好,重复计数器RCR可以读吗,会自动重装载吗
ZHAOBO10375 发表于
你好,重复计数器RCR可以读吗,会自动重装载吗
STM32里面RCR是可读的,自动重载的
猪儿粑 发表于
可以用重复计数器,来实现PWM脉冲数可调不呢?
可以,但是PWM的脉宽不能变。
笑笑我笑了& &STM32里面RCR是可读的,自动重载的,读去来是自己设定的值,不是计数过程的值.
写的非常不错!!!!!!!!!
楼主赞一个!
写的很清楚啊&&赞一下
楼主,你好,我想请教下,如果我需要用TIM1输出PWM,然后任意控制PWM的脉冲数,我应该怎么配置》?
请教楼主,我也正在学习这个。我设置了RCR=0x10,为什么还是每个溢出都产生更新事件,就像RCR=0x10时的一样?
我的问题有答案了。。。原来keil的软件仿真有bug。。。实测信号输出,发现rcr是起作用的,rcr为了才产生中断。软件仿真缺似乎忽略了rcr。。。
先标记一下
阿莫电子论坛, 原"中国电子开发网"21ic官方微信-->
后使用快捷导航没有帐号?
ST MCU Finder
安装免费手机应用,
寻找理想的ST MCU
请完成以下验证码
查看: 8581|回复: 13
《STM8 TIM 定时器使用要点》
&&已结帖(0)
主题帖子积分
资深技术员, 积分 395, 距离下一级还需 105 积分
资深技术员, 积分 395, 距离下一级还需 105 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
资深技术员, 积分 395, 距离下一级还需 105 积分
资深技术员, 积分 395, 距离下一级还需 105 积分
STM8 TIM 定时器使用要点:
STM8的定时器功能很强大,给使用上带来不少麻烦。初学STM8,总结了以下《STM8 TIM 定时器使用要点》,如有不正确之处,请指正。
TIM1 可以在(1~65536)之间任意分频:
Fck_cnt=Fck_psc/(PSCR[15:0]+1)
先写高字节,后写低字节,更新事件后生效。
TIM2/TIM3/TIM5 可以在(1~32768)之间以2的幂分频:
Fck_cnt=Fck_psc/(2^(PSCR[3:0]))
更新事件后生效。
2、预装载:
ARR/OCiR预装载允许时(ARPE=1 OCiPE=1),写入的寄存器值不会直接进入影子寄存器,需要发生一次更新事件后,才生效。
ARR/OCiR预装载禁止时(ARPE=0 OCiPE=0),写入的寄存器值直接进入影子寄存器,立即生效,因此可能造成第一次的波形不正常。
置位TIMx_EGR的UG位可以软件生成一个更新事件。
向上计数方式时,CNT从ARR跳变到0时产生更新事件。
向下计数方式时,CNT从0跳变到ARR时产生更新事件。
向上/向下计数方式时(中央对齐模式),OCRi寄存器的值是比较值(OCiREF的有效时间)的一半,ARR寄存器的值是 实际周期值(不用-1)的一半,CNT从ARR-1增加到ARR时产生上溢事件,CNT从1减少到0时产生下溢事件。
安全使用中央对齐模式的计数器的方法是在启动计数器之前先用软件(置位TIM1_EGR寄存器的UG位)产生一个更新事件,并且不在计数器计数时修改计数器的值。
4、PWM模式:
PWM边沿对齐PWM1模式,向上计数时,CCRx正确取值范围为(0~ARR):
CCRx=0& & 时,产生全无效电平(产生占空比为0%的PWM波形)。
CCRx&=ARR 时,产生CCRx个有效电平(产生占空比为 CCRx/(ARR+1)*100% 的PWM波形)。
CCRx&ARR&&时,产生全有效电平。
PWM边沿对齐PWM1模式,向下计数时,CCRx正确取值范围为(0~ARR):
CCRx=0& & 时,不能产生占空比 0% 的PWM波形(产生占空比为1/(ARR+1)*100%的PWM波形)。
CCRx&=ARR 时,产生CCRx+1个有效电平(产生占空比为 (CCRx+1)/(ARR+1)*100% 的PWM波形)。
CCRx&ARR&&时,产生全有效电平。
5、单脉冲模式
这种模式允许计数器响应一个激励,并在一个程序可控的延时之后产生一个脉宽可控的脉冲。
仅当比较值与计数器的初始值不同时,才能产生一个脉冲。启动之前(当定时器正在等待触发),必须如下配置:
向上计数方式:计数器CNT & CCRi ≤ ARR,
向下计数方式:计数器CNT & CCRi。
6、捕获脉冲:
自动复位计数器方式下的PWM输入信号测量(参见RM0016 英文版P167/中文版P132):
在该模式下,可以方便地测试输入信号的周期(频率/转速)和占空比。
TIMx_CCR1的 寄存器值+1 就是周期计数值,TIMx_CCR2的 寄存器值+1 就是高电平计数值。
占空比=(TIMx_CCR2+1)/(TIMx_CCR1+1)*100%
★★★需要注意的是,使用这种方法时,TIMx的溢出周期时间必须大于待测信号的最大周期。
例如:16M HSI内部振荡,16分频(TIM1_PSCR=16-1),TIM1 定时时基为 1us,则 TIM1 可测最大信号周期为 65536 us(最大可捕获值65535+1)。信号周期如果超过这个时间,捕获值就不是周期和占空比了。
7、其它捕获方式:
可以用不复位计数器的方式对输入信号进行捕获。数据处理上稍麻烦一点。
主题帖子积分
资深工程师, 积分 10265, 距离下一级还需 9735 积分
资深工程师, 积分 10265, 距离下一级还需 9735 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
资深工程师, 积分 10265, 距离下一级还需 9735 积分
资深工程师, 积分 10265, 距离下一级还需 9735 积分
总结的不错
主题帖子积分
技术达人, 积分 8584, 距离下一级还需 1416 积分
技术达人, 积分 8584, 距离下一级还需 1416 积分
主题帖子积分
专家等级:结帖率:8%
主题帖子积分
技术达人, 积分 8584, 距离下一级还需 1416 积分
技术达人, 积分 8584, 距离下一级还需 1416 积分
对STM8的初学者很有帮助
主题帖子积分
技术达人, 积分 8128, 距离下一级还需 1872 积分
技术达人, 积分 8128, 距离下一级还需 1872 积分
主题帖子积分
专家等级:结帖率:33%
主题帖子积分
技术达人, 积分 8128, 距离下一级还需 1872 积分
技术达人, 积分 8128, 距离下一级还需 1872 积分
不错的经验,鼓励共享
主题帖子积分
技术达人, 积分 9594, 距离下一级还需 406 积分
技术达人, 积分 9594, 距离下一级还需 406 积分
主题帖子积分
专家等级:结帖率:5%
主题帖子积分
技术达人, 积分 9594, 距离下一级还需 406 积分
技术达人, 积分 9594, 距离下一级还需 406 积分
多总结还是很有好处的
主题帖子积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 15, 距离下一级还需 35 积分
实习生, 积分 15, 距离下一级还需 35 积分
捕获中断设置请问STM8S103中设置捕获PC6的信号,这样设置可以吗?高低电平时间都要捕获
请问这样设置捕获可以吗?
TIM1_DeInit();
&&TIM1-&PSCRH=0X03;
TIM1-&PSCRL=0X1F;//设置分频=800,计800/16=50us记数周期
TIM1-&CCER1&=0XFE;//禁止输入捕获1
TIM1-&CCMR1|=0X01;//PC6(CH1)到ti1fp1
TIM1-&CCER1&=0XEC;//CH1 上升沿触发
TIM1-&IER|=0X02;//势能中断CH1
TIM1-&CCER1|=0X01;//使能输入捕获1
TIM1_Cmd(ENABLE);//使能计数
&&rim();& && && && && & // 允许CPU全局中断
中断中的程序如下:
if(TIM1_GetITStatus(TIM1_IT_CC1))
& &TIM1_ClearITPendingBit(TIM1_IT_CC1);
if(GPIOC-&IDR&0x40) TIM1-&CCER1|=0X02;//ch1 下降沿触发
else TIM1-&CCER1&=0XEC;//ch1 上升沿触发
tmpcntr=TIM1_GetCapture1();
TIM1_Cmd(ENABLE);//使能计数
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
谢谢楼主,受教了!
主题帖子积分
高级工程师, 积分 7676, 距离下一级还需 324 积分
高级工程师, 积分 7676, 距离下一级还需 324 积分
主题帖子积分
专家等级:结帖率:32%
主题帖子积分
高级工程师, 积分 7676, 距离下一级还需 324 积分
高级工程师, 积分 7676, 距离下一级还需 324 积分
呵呵,这个定时器确实有点繁杂,需要认真对待了。谢谢你的共享。
主题帖子积分
高级技术员, 积分 684, 距离下一级还需 316 积分
高级技术员, 积分 684, 距离下一级还需 316 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
高级技术员, 积分 684, 距离下一级还需 316 积分
高级技术员, 积分 684, 距离下一级还需 316 积分
不错的经验,支持,顺便学习了。
主题帖子积分
初级工程师, 积分 2154, 距离下一级还需 846 积分
初级工程师, 积分 2154, 距离下一级还需 846 积分
主题帖子积分
专家等级:结帖率:93%打赏:0.00受赏:3.00
主题帖子积分
初级工程师, 积分 2154, 距离下一级还需 846 积分
初级工程师, 积分 2154, 距离下一级还需 846 积分
这个必须赞
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:33%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
刚接触定时器 还云来雾里滴
主题帖子积分
助理工程师, 积分 1178, 距离下一级还需 822 积分
助理工程师, 积分 1178, 距离下一级还需 822 积分
主题帖子积分
专家等级:结帖率:81%打赏:0.00受赏:42.00
主题帖子积分
助理工程师, 积分 1178, 距离下一级还需 822 积分
助理工程师, 积分 1178, 距离下一级还需 822 积分
:handshake
主题帖子积分
中级技术员, 积分 153, 距离下一级还需 147 积分
中级技术员, 积分 153, 距离下一级还需 147 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
中级技术员, 积分 153, 距离下一级还需 147 积分
中级技术员, 积分 153, 距离下一级还需 147 积分
z18497 发表于
我也在做这个,一直解决不了,你解决了吗? 能给我发一份吗? 谢谢
主题帖子积分
助理工程师, 积分 1162, 距离下一级还需 838 积分
助理工程师, 积分 1162, 距离下一级还需 838 积分
主题帖子积分
专家等级:结帖率:33%
主题帖子积分
助理工程师, 积分 1162, 距离下一级还需 838 积分
助理工程师, 积分 1162, 距离下一级还需 838 积分
时间类勋章
技术高手奖章
人才类勋章
技术新星奖章
人才类勋章
无冕之王奖章
等级类勋章
奔腾之江水
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
时间类勋章
欢快之小溪
发帖类勋章
社区建设奖章
等级类勋章
技术导师奖章
人才类勋章
涓涓之细流
发帖类勋章
希望之星奖章
等级类勋章
时间类勋章
时间类勋章

我要回帖

更多关于 单片机定时器计数器 的文章

 

随机推荐