历史上的今天
今天是:2025年04月22日(星期二)
2021年04月22日 | STM32单片机常见的工作异常现象分析及解决方案
2021-04-22 来源:eefocus
贴了两块样板,烧写同样的固件。其中一块工作正常,但是另外一块出现了很奇怪的现象:在线调试正常;每次烧写完后工作正常;重新上电有时候工作正常,有时候工作不正常;工作不正常时,按下复位按键,恢复正常。
工作异常现象:main函数中的系统运行指示灯不闪烁,但是初始化过程中点的一个灯是亮的!说明程序运行一段时间后,不工作了。
由于在线调试模式,板子工作正常,无法通过在线调试的方式判断程序运行的异常状态。
分析可能的原因:
1、初始化过程中,程序陷入死循环。但程序初始化过程中,没有while(1)死循环的代码。
2、板子上电后不断复位,导致无法进入main函数中的while(1)循环。
问题查找:
硬件:
1、确认BOOT0管脚接10kΩ欧电阻下拉到地;
2、RC上电延时复位电路中,R为10kΩ,C由0.1uF改为10uF,现象依旧;
3、MCU3.3V电源纹波很小,排除电源问题。
好像从硬件上查不出什么问题。只能从板子上唯一点亮的灯下手了。
软件:
1、好像跟硬件复位没什么关系,为了确认板子是不是在不停复位,在点亮的那个灯前加了100ms延时,如果是在复位,那灯就应该不停闪烁。但那个灯还一直是亮的,说明是程序运行出错,不运行了。
2.不断修改led灯在初始化代码中的位置,最终定位到导致运行出错的代码:配置一个GPIO为外部中断,跳变沿触发,上拉。把上拉改为NOPULL,工作一切正常。
问题定位:配置为外部中断的GPIO悬空导致。之前工作正常的样板是一直有连接到那个IO脚的外接模块,这个工作不正常的没有接,导致IO管脚电平不确定。由于电平的不确定,在初始化的瞬间有一个跳变沿,导致程序进入外部中断服务函数。在中断服务函数中,要读取一个定时器的寄存器的值,但是要读取的定时器可能还没有完成初始化,导致读取失败,程序运行异常。
解决办法:1、PULL模式有PULLRISING改为NOPULL;
2、timer在这个外部中断之前进行初始化。
上一篇:STM32--MDK固件库配置
下一篇:STM32与SD卡通信分层思考
史海拾趣
|
做芯片这行好几年,各种技术会议也参加了不少,只是飞思卡尔的技术论坛还没有去过。一直想参加,毕竟属于行业的老大啊!可是哪有那么容易! 今年的飞思卡尔大学生智能车赛开办了一个博客大赛,参与投票的工程师就有机会参加技术论坛。赶紧去投 ...… 查看全部问答> |
|
四川省大学生电子设计竞赛西南科技大学赛区竞赛题目-远程温湿度测量系统 本帖最后由 paulhyde 于 2014-9-15 04:20 编辑 电子竞赛题目-远程温湿度测量系统 一、电子竞赛题目任务: 制作一个远程温湿度测量仪,该测试仪具有温湿度测量和远程显示等功能。其结构框图如下: 二、电子竞赛题目要求: 1、基本要求 ( ...… 查看全部问答> |
|
关于AGC(Automatic Gain Control)和ADC “100分哦” 请教各位达人,我想找一款内置AGC功能的ADC,ADC最好为12bit,20MSPS 我网络上找了一些资料都没有发现有这样的ADC,许多电路都是内置模拟AGC再加一个ADC来实现的 谁能告诉我有没有这样的ADC啊?有的话提供型号,最好能有PDF文档,立即送100分… 查看全部问答> |
|
C167CR是汽车电子行业应用比较广泛的一种单片机,我正在做相关项目,在这里介绍一下其存储器及外部总线,和大家分享。 (第四点是针对评估板kitCCON-167评估板所作的相关寄存器配置) 1.最大寻址空间是16M 2.片内存储器 &nb ...… 查看全部问答> |
|
因工作繁忙,本人现转让一全新的ARM7开发板:EasyARM2131开发平台 地点:上海市闵行区 电话:13681848395 清单如下: 1.EasyARM2131开发实验板 1 台 2.EasyJTAG-H 1 只 3.SD CARD PACK 1 块 4.杜邦-1P测试线 9 条 5.20P仿真电缆 1 条 6.R ...… 查看全部问答> |
|
STM32的USB2.0的速度可以到多少?12Mor480M? 手册上说: USB 2.0 full speed interface但是文件又说:The STM32F103xC, STM32F103xD and STM32F103xE performance line embed a USBdevice peripheral c ...… 查看全部问答> |




