历史上的今天

今天是:2024年11月10日(星期日)

正在发生

2021年11月10日 | 解决STM8定时器首次进入中断时间不对

发布者:HarmoniousPeace 来源: eefocus关键字:STM8  定时器  中断时间 手机看文章 扫描二维码
随时随地手机看文章

以定时器2为例,定时器初始化后,发现第一次进入中断的时间不是定时时间到后才进入的,似乎是20多us 就立即进入了中断。以后的中断时间就正常了。这个可以通过在中断里关闭定时器,只让定时器运行一次,来发现这个问题。


这个还不知道是怎么回事。由于我是要每次定时器只定时一次,只能是在中断里判断进入两次后再关闭定时器。


解决办法是,开启定时器后,先不开中断,死等中断标志,清除标志后再开中断即可。
定时器计数初值由TIM2_EGR 初始化,他会引起更新事件中断,所以第一次中断是不准确的。这和51单片机不同。

/********设置定时器2,是向上计数的,自动和装载值比较******/
void SetTimer2(unsigned short val)
{
   
   TIM2_IER=0x00;    //禁止中断
   TIM2_SR1=0x00;
   TIM2_PSCR=0x01;  //2分频 内部RC是16M,默认CLK_DIVR分频8  2M/2= 1M   
   
   //TIM2_CNTRH=val/256;//设置计数器寄存器初值
   //TIM2_CNTRL=val%256;//这里寄存器根本不用初始化, 下面有初始化计数器TIM2_EGR=0X01; 会自动装载,并引起中断
   TIM2_ARRH=val/256;  //设置自动装载寄存器
   TIM2_ARRL=val%256;  //这个值就是计数最大值
   TIM2_CR1=0x01;   //启动定时器
   TIM2_EGR=0x01;    //重新初始化计数器,产生新事件,这会引起中断
   while((TIM2_SR1&0x01)==0);//第一次更新事件标志会立即进入,所以第一次计数不准,这里等待他
   if(TIM2_SR1)
   TIM2_SR1=0x00;//清除第一次无效中断
   TIM2_IER = 0x01; //开中断

}

/*******************定时器2初始化,比较计数值,自动重装**************************/
void Init_Tim2(void)
{
TIM2_CR1=0x00;    //关闭定时器
TIM2_SR1=0x00;
TIM2_PSCR=0x01;  //2分频 内部RC是16M,默认CLK_DIVR分频8  2M/2= 1M
  
TIM2_CNTRH=65530/256;  //设置计数器寄存器初值
TIM2_CNTRL=65530%256;//这两个寄存器根本不用初始化,和51不同,由TIM2_EGR 初始化,他会引起中断,所以第一次不准确
TIM2_ARRH=65530/256;  //设置自动装载寄存器
TIM2_ARRL=65530%256;  //这个值就是计数最大值
TIM2_CR1=0x01;
TIM2_EGR=0x01;    //重新初始化计数器,产生新事件

TIM2_IER=0x01;    //开启中断
}


/****************定时器2中断****************************/
@far @interrupt void TIM2_UPD_OVF_IRQHandler (void)
{

TIM2_SR1=0x00;
Tim2Cnt++;
if(Tim2Cnt>=2)
{
   TIM2_IER=0x00;
   TIM2_CR1=0x00;    //关闭定时器
   PA1_ODR=!PA1_ODR;
   Tim2Cnt=0;
   AllowSetTim2=1;
}
return;
}

关键字:STM8  定时器  中断时间 引用地址:解决STM8定时器首次进入中断时间不对

上一篇:STM8定时器初始化和GPIO初始化顺序导致GPIO动作不正确
下一篇:STM8定时器TIM1-TIM6使用详解与实验程序

推荐阅读

        在此次双十一期间,京东上线了手机销量排行榜,并且实时刷新销量数据,可以清晰了解手机的品牌销量、品牌销售额和单品销量,方便消费者比较查询。  11月8日京东手机单品销量排行榜最抢眼的要属苹果手机,iPhone XR和iPhone X实力霸榜冠亚军,iPhone XR凭借A12处理器和新品的优势,再加上京东白条12期免息的巨大优惠,带来绝对的竞争...
(文章来源:中科罗伯特机器人学院) 工业机器人发展到现在已经不在局限于某一个行业或者是领域了,在我国工业机器人已经逐渐占领了各大流水线上的工作。随着人们生活质量的提高,传统的工业机器人作业方式已经不能满足人们对产品的需求,科技的进步会带动工业机器人进入到什么样的发展呢。 行业是现在仅次于汽车的第二大应用领域, 3C行业由于产品更...
昨晚,联想中国区手机业务部总经理陈劲在与网友互动时暗示,联想将重启乐檬品牌。此前,陈劲在接受采访时也表示,经过对产品线的梳理,今年年底到明年初,会有全新的、更完善的产品矩阵导入中国。未来,中高端的5G产品以Moto为主,联想拯救者则是终端高性能和游戏系列担当;在入门级产品,鉴于中国市场仍有非常大的需求,联想将于今年年底重启乐檬。据悉,...
苹果今日向 Apple Watch 用户推送了 watchOS 8.3 开发者预览版 Beta2 更新(内部版本号:19S5036d),本次更新距离上次发布隔了 1 周时间。  watchOS 8.3 开发者预览版 Beta2 主要是修复了几个开发的问题:在使用 StoreKit 测试的自动化测试中调用 expireSubscription (productIdentifier:) 后,订阅不再继续自动续订;al...

史海拾趣

问答坊 | AI 解惑

LPC2000微控器I2C软件包

LPC2000微控器I2C软件包…

查看全部问答∨

msi(微星) 电脑主板layout规范

要发就发精品! msi(微星) 电脑主板layout内部培训规范 很不错的资料,图文并茂,ppt格式…

查看全部问答∨

求助!想选一个大一点的ram,采用什么方案呀!

需求,一次信号周期20ms内采200个点,多路信号,需要把采来的数据存到ram里,一个信号大概需要1m左右的空间,我是初学单片机,刚学完51,现在会用ad采数据,和能过通串口上传数据,但不知道怎么选大点的ram,想用eeprom了,但又感觉他不是太适合,所 ...…

查看全部问答∨

c++初学者适合的书或视屏教程

我是c++初学者,只知道谭浩强的c程序设计。。。。。…

查看全部问答∨

uc/os-ii的OsTimeDly()如何使用

1:执行OsTimeDly()时CPU在干吗 2:OsTimeDly()里面的参数一般怎么设置,有何讲究。谢谢…

查看全部问答∨

急!vs2005做了个窗体在模拟wm5.0设备上中文字体显示不出来,显示成方框怎么办?

vs2005做了个窗体在模拟wm5.0设备上中文字体显示不出来,显示成方框怎么办? tahoma字体和宋体都不行! 都显示为方框!!!!!…

查看全部问答∨

花了一万元的PCB高级讲座课件(高频电路布线技巧)

这是射频与数模混合类PCB设计教程课件,希望对做高频电路的人们有所帮助 里面主要包括: 射频PCB布局与数模混合类PCB布局      无线终端PCB常用HDI工艺介绍􀂾 信号完整性(SI)的基础概念􀂾 射频PCB与数模 ...…

查看全部问答∨

对MSP430的C++编程

我们知道 MSP430支持 C++编程 但是书本上一般没有介绍他对C++编程的那些特征适合,是不是普通C++编程中能用的方式 他基本上也都是支持的??…

查看全部问答∨

学习电子的非常有用的网站集锦

本帖最后由 paulhyde 于 2014-9-15 08:58 编辑  …

查看全部问答∨

[原创]STM32 HD7279A接口程序

不知道为什么.网上好多人都说STM32 驱动不了7279.而且搜索不到一个例程.其实.对照数据手册.写好时序.这个接口是很容易的…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved