一站式电子元器件采购平台

华强商城公众号

一站式电子元器件采购平台

元器件移动商城,随时随地采购

华强商城M站

元器件移动商城,随时随地采购

半导体行业观察第一站!

芯八哥公众号

半导体行业观察第一站!

专注电子产业链,坚持深度原创

华强微电子公众号

专注电子产业链,
坚持深度原创

电子元器件原材料采购信息平台

华强电子网公众号

电子元器件原材料采购
信息平台

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

来源:维库电子 发布时间:2018-10-26

摘要: 贴了两块样板,烧写同样的固件。其中一块工作正常,但是另外一块出现了很奇怪的现象:在线调试正常;每次烧写完后工作正常;重新上电有时候工作正常,有时候工作不正常;工作不正常时,按下复位按键,恢复正常。

贴了两块样板,烧写同样的固件。其中一块工作正常,但是另外一块出现了很奇怪的现象:在线调试正常;每次烧写完后工作正常;重新上电有时候工作正常,有时候工作不正常;工作不正常时,按下复位按键,恢复正常。

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

工作异常现象: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在这个外部中断之前进行初始化。


声明:本文观点仅代表作者本人,不代表华强商城的观点和立场。如有侵权或者其他问题,请联系本站修改或删除。

社群二维码

关注“华强商城“微信公众号

调查问卷

请问您是:

您希望看到什么内容: