历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-11-10 来源:eefocus

以定时器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;
}

推荐阅读

史海拾趣

DENWIRE公司的发展小趣事

以下是关于DENWIRE公司在电子行业中发展起来的五个相关故事,每个故事都遵循了字数和事实性的要求。

故事一:
DENWIRE公司起初只是一家小型的电线制造商,专注于生产低端音频线缆。然而,随着科技的进步和消费者对于音频质量的追求,公司创始人李先生看到了高品质音频线缆市场的潜力。他带领团队投入大量研发资源,成功开发出了一款具有极低信号损失和出色耐用性的音频线缆,赢得了市场的广泛认可。这款产品不仅让DENWIRE在音频线缆领域崭露头角,也为公司后续的发展奠定了坚实的基础。

故事二:
随着公司规模的扩大,DENWIRE逐渐涉足到了数据传输线缆的生产。在面对激烈市场竞争时,公司坚持创新驱动,注重产品质量。在一次与知名科技公司的合作中,DENWIRE凭借其出色的产品性能和可靠的品质,成功赢得了对方的信任,并签订了长期供货合同。这次合作不仅为DENWIRE带来了可观的收益,也进一步提升了公司在行业内的知名度。

故事三:
在新能源汽车行业蓬勃发展的背景下,DENWIRE敏锐地捕捉到了这一领域的商机。公司迅速调整战略方向,加大了对新能源汽车用线缆的研发和生产投入。经过多次试验和改进,DENWIRE成功开发出了一款符合新能源汽车高标准要求的线缆产品,并在市场上取得了良好的销售业绩。这一成就不仅彰显了DENWIRE的技术实力,也为公司未来的发展开辟了新的道路。

故事四:
面对全球化市场的挑战,DENWIRE积极寻求国际合作与拓展。公司先后与多个国家和地区的知名企业建立了战略合作关系,共同开发新产品、拓展新市场。通过国际合作,DENWIRE不仅学习到了先进的生产技术和管理经验,也进一步提升了自身的品牌影响力和市场竞争力。

故事五:
在环保和可持续发展成为全球共识的背景下,DENWIRE积极响应号召,致力于推动绿色生产和可持续发展。公司投入大量资金引进环保设备和工艺,优化生产流程,减少能源消耗和废弃物排放。同时,DENWIRE还积极参与社会公益活动,回馈社会。这些举措不仅提升了公司的社会形象,也为公司的长期发展注入了新的活力。

AZ Displays公司的发展小趣事

AZ Displays深知品质是企业生存的根本。因此,公司始终将质量控制放在首位,从原材料采购到生产工艺的每一个环节都进行严格把控。通过严格的质量管理体系和高效的供应链管理,AZ Displays的产品质量得到了客户的高度认可,逐渐在行业内建立了卓越的声誉。

浙江凡华(FANHAR)公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,AZ Displays始终保持着创新的活力。公司不断投入研发资源,推出具有创新性和领先性的产品。同时,AZ Displays还积极关注行业动态和新兴技术,不断调整和优化产品策略,以确保公司在市场中的领先地位。

这些故事展示了AZ Displays在电子行业中的发展历程和成就,体现了公司不断创新、追求卓越的精神。未来,随着科技的不断进步和市场需求的不断变化,AZ Displays将继续保持创新活力,为客户提供更优质的产品和服务。

Diode Laser Concepts公司的发展小趣事

为了拓展更广阔的市场,Diode Laser Concepts公司开始实施国际化战略。公司先是在亚洲和欧洲设立了办事处,随后又在美国等地建立了生产基地。通过与国际知名企业的合作,公司不仅将产品销售到了全球各地,还积累了丰富的国际经验,提升了品牌影响力。

中环(Central)公司的发展小趣事

2019年,中环公司发布了210mm尺寸G12超大硅片“夸父”系列产品。这一创新产品凭借其高效、高质的特点,迅速获得了市场的认可。G12超大硅片的推出不仅引领了光伏材料的发展方向,也进一步巩固了中环在光伏领域的领先地位。

宜源科技(ETERNAL)公司的发展小趣事

面对日益严峻的环境问题,宜源科技公司积极响应国家环保政策,致力于绿色环保和可持续发展。公司采用先进的生产工艺和设备,减少生产过程中的污染排放。同时,宜源科技还积极推动绿色产品的研发和推广,为客户提供更加环保、节能的电子产品解决方案。这些努力不仅有助于保护环境,也为公司的可持续发展奠定了基础。

问答坊 | AI 解惑

Mini2440 SDcard启动分析

mini2440驱动分析系列之 ---------------------------------------Mini2440 SD卡驱动程序分析 By JeefJiang July,25th,2009 Email:Jeefjiang1983@163.com                   &n ...…

查看全部问答>

请教高手-关于LM3S8962 电路设计的问题

LM3S8962的VDD与GND之间的电路问题: 1.\\一种设计方式,所有的GND短接接地,所有的VDD25短接,然后接电容接地;所有的VDD33短接,然后接电容接地。(美国原厂的电路图就是这样的)      2。另一种方式:在每个VDD与GND之间都 ...…

查看全部问答>

arm下GPRS拨号,能拨号上去,却不能通信。

PPP link to ppp0 terminated. [root@FriendlyARM ppp]# ./ppp-on Serial connection established. using channel 4 Using interface ppp0 Connect: ppp0 /dev/ttyS2 Warning - secret file /etc/ppp/pap-secrets has world and/or group ac ...…

查看全部问答>

keybd_event()函数可以在驱动里面应用吗?

keybd_event()函数可以在驱动里面应用吗?请大侠们多多指点啊!  现在菜鸟的日子很难过啊...呵呵…

查看全部问答>

如何用单片机采集差分输出数据

如何用单片机采集  拉力传感器 tjl—1 的差分输出数据…

查看全部问答>

大家有没有用Stellaris做电机驱动啊?

大家有没有用Stellaris!做各种电机驱动器啊? 比如步进。。。   带细分的。…

查看全部问答>

请问有个万利的带有1个CAN口板子,可以调试CAN么?

是不是至少有2个板子才能调试CAN啊?? 如果我的1个万利板子调试学习CAN,我要怎么做?? 多谢…

查看全部问答>

集成运算放大电路的误差分析及外围元件参数的选择

集成运算放大电路的误差分析及外围元件参数的选择…

查看全部问答>

关于MSP430FR5739开发板的两个想法(有msp430单片机电子书奉送!!)

话不多说,先上传几本MSP430的电子书,聊表我学好MSP430的决心!其实,我一直想用MSP430做一个简单一点的示波器,但是 430最高频率也就16Mhz,并且做示波器,单片机需要有高速的读写速度,这次的MSP430FR57XX系列单片机无疑是我这个计划的不二之选 ...…

查看全部问答>