您的位置 首页 技术

STM32单片机常见的作业异常现象剖析及解决方案

STM32单片机常见的工作异常现象分析及解决方案-工作异常现象:main函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一段时间后,不工作了。

由于在线调试模式,板子工作正常,无法通过在线调试的方式判断程序运行的异常状态。

贴了两块样板,烧写相同的固件。其间一块作业正常,可是别的一块呈现了很古怪的现象:在线调试正常;每次烧写完后作业正常;从头上电有时候作业正常,有时候作业不正常;作业不正常时,按下复位按键,康复正常。

作业反常现象:main函数中的体系运转指示灯不闪耀,可是初始化进程中点的一个灯是亮的!阐明程序运转一段时间后,不作业了。

因为在线调试形式,板子作业正常,无法经过在线调试的方法判别程序运转的反常状况。

剖析或许的原因:

1、初始化进程中,程序堕入死循环。但程序初始化进程中,没有while(1)死循环的代码。

2、板子上电后不断复位,导致无法进入main函数中的while(1)循环。

问题查找:

硬件:

1、承认BOOT0管脚接10kΩ欧电阻下拉到地;

2、RC上电延时复位电路中,R为10kΩ,C由0.1uF改为10uF,现象仍旧;

3、MCU 3.3V电源纹波很小,扫除电源问题。

如同从硬件上查不出什么问题。只能从板子上仅有点亮的灯下手了。

软件

1、如同跟硬件复位没什么联系,为了承认板子是不是在不断复位,在点亮的那个灯前加了100ms延时,如果是在复位,那灯就应该不断闪耀。但那个灯还一向是亮的,阐明是程序运转犯错,不运转了。

2.不断修正led灯在初始化代码中的方位,终究定位到导致运转犯错的代码:装备一个GPIO为外部中止,跳变沿触发,上拉。把上拉改为NOPULL,作业一切正常。

问题定位:装备为外部中止的GPIO悬空导致。之前作业正常的样板是一向有连接到那个IO脚的外接模块,这个作业不正常的没有接,导致IO管脚电平不确定。因为电平的不确定,在初始化的瞬间有一个跳变沿,导致程序进入外部中止服务函数。在中止服务函数中,要读取一个定时器寄存器的值,可是要读取的定时器或许还没有完结初始化,导致读取失利,程序运转反常。

解决办法:1、PULL形式有PULLRISING改为NOPULL;

2、TImer在这个外部中止之前进行初始化。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/347174.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部