历史上的今天
今天是: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网上资源较少,更多还需要自己动手,这才体现出查看寄存器值的优势。从发现问题到解决问题一共用时三小时左右。
上一篇:STM8S中断系统
史海拾趣
|
宝莱车采用两条CAN总线,即驱动系统CAN总线和车身系统CAN总线,这两总线完全能够满足ISO的定义。驱动系统CAN总线,其通信速率为500kbps,被称为高速CAN,其连接对象为汽车动力和传动机构的控制单元等。汽车发动机控制单元、自动变速器控制单 ...… 查看全部问答> |
|
关于写wince6的spi应用,如何配置deviceiocontrol来初始呢?急求!!! 小弟最近在写wince6一些设备的测试应用, createfile打开spi设备后,该如何初始化spi的基本配置呢? 用deviceiocontrol吗?但是不知道设置哪些参数来初始化 请各位帮帮忙!… 查看全部问答> |
|
各位嵌入式爱好者网友: 我先说一下,我今年27了,一直在做vb的开发,老感觉待不下去了,想去做一些事情,例如创业。我一直是搞技术的,希望通过技术开发一款产品,这点我可以找合作伙伴一起做。 后来就找到了嵌入式开发这里。我要 ...… 查看全部问答> |
|
为何调用PsTerminateSystemThread不能结束创建的线程? 我在驱动程序的DriverEntry里创建一个线程,用来读取文件。 但是在线程函数里读取文件完毕后用PsTerminateSystemThread结束线程,但是我发现线程并没有被关闭,仍然在不断地进入线程函数。请问该如何结束线程? 部分代码如下: VOID CreateLoadP ...… 查看全部问答> |
|
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 ...… 查看全部问答> |
|
9月初的(成都)电子展的规模据说近五百家,我们的两个主要的竞争对手都第一次参加了,我们老大想参加,但实际上我们目前在西南的客户很少。不太了解那边的状况(我们公司提供电子生产制造中用的一种高精度测试设备,目前的主要客户在沿海地区)。 ...… 查看全部问答> |
|
学习 STM32 无非两个方面, 1. 软件 例如是IAR CM3 软件编写程序2。 硬件,STM32和CM3核而且 软件 中已经 描述、表达了 硬件!这就是  ...… 查看全部问答> |
|
1 最高波特率是多少?手册上说:1.5.2 Maximum baud rateBHigh is the highest baud rate for which the deviation still does not exceed the&n ...… 查看全部问答> |




