历史上的今天
返回首页

历史上的今天

今天是:2024年09月28日(星期六)

2021年09月28日 | STM8无法跳出TIM2更新中断

2021-09-28 来源:eefocus

刚学STM8,把如何解决调试过程中出现的问题记录下来。


芯片采用的是STM8S103F3P6,准备做一个刷卡模块,其中delay函数是用tim2定时器实现的。在网上下的例程,delay函数的单位是1ms,我觉得间隔时间有点长了,准备改成10us,使用HSE外部晶振8MHz,8分频,计10个数产生更新中断。再做一个ms的延时函数,100个10us延时函数实现。


问题现象:


在运行的过程中,发现timer2初始化,打开中断函数enableinterrupts后,程序无法跳出。


问题分析步骤:


1.我先进行了调试,发现程序在tim2的中断服务函数里无法跳出,一开始我认为可能是清除中断标志位的代码没有执行,或是清除中断标志位应该放在进入中断服务函数之后就立即执行,把代码移到中断服务函数中第一句,再运行,还是不行;


2.打开寄存器显示窗口,对照着stm8s的中文手册,找到tim2的寄存器相关内容,单步调试,发现TIM2->SR1的清除中断位有被置0,但是隔几步就又会被置1,我先分析可能是某一处代码的问题,但是重新开始了四五次,发现置1的时机是不固定的。这时我才注意到CNTRL这个寄存器,好像是每次都是在这个寄存器的值变成0x09之后SR1置1的。这才反应过来,可能是tim2的中断服务函数在处理的过程中,又有一个更新中断进来,把SR1的更新中断位重新置1,也就是说我的tim2的定时时间过短。


问题解决:


在延长了定时器的更新时间(100us)后,问题解决了。


总结:

在调试的过程中,发现了查看寄存器的威力,这是一种能够更快解决问题的方法。之前使用stm32的时候由于网上资源丰富,基本上哪种问题都能搜索到,一开始上手也是学的库函数版本,所以对寄存器调试使用不多,多是用watch窗口看变量值的方法。但是stm8网上资源较少,更多还需要自己动手,这才体现出查看寄存器值的优势。从发现问题到解决问题一共用时三小时左右。

推荐阅读

史海拾趣

Chip Quik公司的发展小趣事

随着市场的反馈和技术的不断进步,Chip Quik公司对初始产品进行了多次优化。公司不断改进焊接材料的性能,提高焊接速度和稳定性,同时降低操作难度。这些改进使得Chip Quik的产品在电子维修领域获得了更广泛的应用,公司也逐渐扩大了市场份额。

Analog Modules Inc公司的发展小趣事

在不断发展壮大的过程中,Chip Quik公司始终注重品牌建设和持续创新。公司加大了对研发部门的投入,不断推出新技术和新产品,以满足市场的不断变化。同时,公司还通过加强品牌宣传和推广,提高了品牌知名度和美誉度,为公司的长远发展奠定了坚实的基础。

这些故事虽然基于假设和一般性的行业趋势,但它们可以反映出一家电子行业中类似公司可能经历的发展路径和挑战。希望这些故事能够为您了解Chip Quik公司或其他电子行业公司的发展提供一定的参考。

GSG公司的发展小趣事
具备自动校准、自动补偿、自动报警等智能化功能,降低了人工干预的需求。
Eby Company公司的发展小趣事

为了提供更好的物流服务,eBay推出了国际运送计划(eBay International Shipping)。该计划允许卖家将来自同一订单的多件物品合并在一个包裹中运送,从而减少了买家支付的运费。这一举措不仅提高了物流效率,也增加了买家的购买意愿。eBay还与其他物流公司合作,提供更快捷、更可靠的配送服务。

Abbatron公司的发展小趣事

Abbatron公司深知合作的重要性,积极寻求与业内其他企业的合作机会。通过与某知名电子制造商的合作,Abbatron公司成功将其创新技术应用于实际产品中,进一步扩大了市场份额。这种合作模式不仅促进了双方的发展,也为整个电子行业带来了更多的可能性。

A-BRIGHT公司的发展小趣事

随着技术创新的成功,A-BRIGHT公司开始积极寻求市场拓展。公司首先瞄准了欧洲市场,通过参加国际电子展会和建立销售网络,成功将产品打入欧洲市场。随后,A-BRIGHT又进军北美市场,通过与当地的大型电子分销商合作,进一步扩大了市场份额。这些市场拓展的成功为A-BRIGHT的快速发展奠定了坚实基础。

问答坊 | AI 解惑

宝莱汽车CAN总线全剖析

 宝莱车采用两条CAN总线,即驱动系统CAN总线和车身系统CAN总线,这两总线完全能够满足ISO的定义。驱动系统CAN总线,其通信速率为500kbps,被称为高速CAN,其连接对象为汽车动力和传动机构的控制单元等。汽车发动机控制单元、自动变速器控制单 ...…

查看全部问答>

关于写wince6的spi应用,如何配置deviceiocontrol来初始呢?急求!!!

小弟最近在写wince6一些设备的测试应用, createfile打开spi设备后,该如何初始化spi的基本配置呢? 用deviceiocontrol吗?但是不知道设置哪些参数来初始化 请各位帮帮忙!…

查看全部问答>

诚心救助?帮忙看一下!

各位嵌入式爱好者网友:     我先说一下,我今年27了,一直在做vb的开发,老感觉待不下去了,想去做一些事情,例如创业。我一直是搞技术的,希望通过技术开发一款产品,这点我可以找合作伙伴一起做。 后来就找到了嵌入式开发这里。我要 ...…

查看全部问答>

为何调用PsTerminateSystemThread不能结束创建的线程?

我在驱动程序的DriverEntry里创建一个线程,用来读取文件。 但是在线程函数里读取文件完毕后用PsTerminateSystemThread结束线程,但是我发现线程并没有被关闭,仍然在不断地进入线程函数。请问该如何结束线程? 部分代码如下: VOID CreateLoadP ...…

查看全部问答>

c#用playsound函数为什么没声音

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace soundpdatest {     public partial class Form ...…

查看全部问答>

汇编语言中的浮点数相加

如何实现汇编中的6.2+3.1?各位大哥,帮帮忙,课程设计啊 …

查看全部问答>

宏里面再定义宏可以嘛?可以举一个例子?

宏里面再定义宏可以嘛?可以举一个例子? …

查看全部问答>

急!西南电子业行情如何?XDJM们给点建议啊

9月初的(成都)电子展的规模据说近五百家,我们的两个主要的竞争对手都第一次参加了,我们老大想参加,但实际上我们目前在西南的客户很少。不太了解那边的状况(我们公司提供电子生产制造中用的一种高精度测试设备,目前的主要客户在沿海地区)。 ...…

查看全部问答>

####不这样做,还真学不到这些东西呢!

学习  STM32 无非两个方面, 1.  软件  例如是IAR CM3 软件编写程序2。 硬件,STM32和CM3核而且   软件 中已经 描述、表达了  硬件!这就是  ...…

查看全部问答>

STM32BootMode几个问题

1 最高波特率是多少?手册上说:1.5.2 Maximum baud rateBHigh is the highest baud rate for which the deviation still does not exceed the&n ...…

查看全部问答>