STM32重上电后,HAL_GetDEVID返回0
目录
- 问题描述
- 定位过程
- 问题解决
- 总结
问题描述
在调试程序透传功能时发现,使用J-Link下载程序后功能正常。拔掉J-Link,电源供电,APP端无法收到数据,功能异常。使用J-Link进入仿真模式运行,则功能又恢复正常。
主芯片:STM32F103RC
RTOS:RT-Thread
定位过程
- 刚开始怀疑电源供电,主芯片程序没有运行。从主芯片与电池之间的串口交互看,主芯片确实没有转发出指令。
增加了一个闪灯线程,电源供电下,灯没有闪烁。怀疑硬件电源部分问题,但验证硬件的流水灯程序可以正常运行,仍然从软件查找。 - 使用点亮LED的方式查找,逐渐调整点亮的位置,最终发现是启动main线程后运行出错。
- 熟悉了下程序,打开程序的
RT_USING_CONSOLE
宏,通过J-Link RTT Viewer V7.52d查看log。电源供电时,程序进入了hard_fault。但实际刚上电时已经出错,rt_system_heap_init
设置线程堆栈时,结束地址比起始地址还小:mem init, error begin address 0x20001a18, and end address 0x20000000
可以看出因为线程堆栈异常,导致main线程一启动就错误了。
- 继续查找,发现是HAL_GetDEVID返回0导致。
问题解决
- 怀疑是电源不稳定,在上电初始化之前增加大概3S延时- -无效。
- 重复读取,每次读取中间增加延时- -无效。
- 继续测试,发现上电后,使用J-Link RTT Viewer V7.52d连接。此时硬复位,即可恢复正常。推测与J-Link有关。
- 查看手册《STM32_MANUAL_CN》:
- 看起来没什么问题。更改关键字
DBGMCU_IDCODE
搜索,最终发现只能在调试模式下访问, 不能通过用户软件操作。对应下载了勘误手册:
这也对应解释了第3条的现象。
总结
这样看来,此芯片不能通过HAL_GetDEVID来获取ID,然后得到芯片资源空间。解决问题占用了较多时间,一直想尽快定位解决,以后需要注意:
- 调试前熟悉当前的程序框架,一些实现机制。
- 适当更换关键字
- 官方手册使用,勘误手册第一次用到。
STM32重上电后,HAL_GetDEVID返回0相关推荐
- 关于Access数据库执行Update语句后,不报错,但影响行数总是返回0的问题
最近碰到一个奇怪的问题,使用Access数据库执行Update语句后,不报错,但影响行数总是返回0. 因为是第一次碰到这个问题,纠结了半天.后来在网上搜索得到解决方案: SQL语句传参数的顺序和语句中 ...
- (194)FPGA上电后IO的默认状态(ISE软件默认为0)
(194)FPGA上电后IO的默认状态(ISE软件默认为0) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(ISE软件默认为0) 5) ...
- (191)FPGA上电后IO的默认状态(Vivado软件默认为0)
(191)FPGA上电后IO的默认状态(Vivado软件默认为0) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(Vivado软件默认 ...
- STM32 MDK编译后生成的 .map文件深入分析
.map文件是STM32开发中非常重要的一个文件,在该文件中可以详细的查看单个文件.函数及用户定义的全局变量等的占用RAM和ROM(一般为片内FLASH)的空间大小,通过了解这些信息可以很方便的进行代 ...
- 从零开始写STM32平衡小车代码,从0到1
从零开始写STM32平衡小车代码,从0到1 教你从零开始写STM32平衡小车代码 前言: 本人也是学生,只是分享一下自己的设计思路与代码教学. 这次STM32平衡小车是基于STM32CubeMX软件生 ...
- 【STM32】 硬件IIC 驱动SSD1302(0.96 OLED模块) -- 3/4 OLED的命令表 学习
书接上回 文章1:[STM32] 硬件IIC 驱动SSD1306(0.96 OLED模块) – 1/4 库函数 学习 文章2:[STM32] 硬件IIC 驱动SSD1302(0.96 OLED模块) ...
- android linker重定位后初始化
Linker重定位后初始化 linker重定位后,进行一系列初始化工作,这个阶段,linker已经可以引用外部的符号和全局变量了. 源码 /** This code is called after t ...
- 视图的getWidth()和getHeight()返回0
我正在动态创建我的android项目中的所有元素. 我正在尝试获取按钮的宽度和高度,以便可以旋转该按钮. 我只是想学习如何使用android语言. 但是,它返回0. 我做了一些研究,发现需要在onCr ...
- ***CI新增记录成功后的返回值判断,是用isset还是empty
Q: 新增记录插入成功后,加了一个return $this->db->insert_id(); $digg_id = $this->m_feed_digg->create(js ...
最新文章
- 报名 | 第三期医工结合系列研讨会:科研领域的知识产权保护
- 解决:delphi7 license is invalid or has expired
- 简单的openssh自动升级脚本
- html5画布 文本无法显示,淡出HTML5画布中的文本效果
- CheckStyle使用手册(一)
- Python学习笔记——Python的下载与安装
- thinkphp mysql 密码加密_thinkphp微信开发(消息加密解密)
- 程序员分析一线城市 1000 +岗位招聘需求,告诉你如何科学找工作
- LeetCode Map Sum Pairs
- RJ45口线序的理解
- mysql bootstrap pxc_MYSQL PXC
- Vscode信任问题
- Springboot项目启动异常 org.springframework.beans.factory.UnsatisfiedDependencyException
- TaHomA:一套让你在iPad上控制房子,将其变身智能房屋的神奇系统
- VB中关于UBOUND和LBOUND含义
- 《软件开发工具》(第二章)
- 安装python卡到不动了_pip卡住不动的解决方案
- 网格布局(grid布局)
- python 拆分excel工作表_Python合并拆分excel
- linux centos7 iso镜像下载,CentOS Linux 7.9 (2009) iso镜像下载
热门文章
- python csv数据所在行_使用python获取csv文本的某行或某列数据的实例
- 统计正数和负数的个数然后计算这些数的平均值_计算机中的二进制原来是这样:原码、反码和补码
- 在WSL下安装MYSQL的实验报告_Linux(wsl)安装docker和mysql主从搭建
- taro 小程序转h5之后报错_原生小程序转H5
- python线程池传入多个参数_python线程池问题
- shiro-cas------自定义登录页面
- python pytorch自定义_Pytorch 实现自定义参数层的例子
- android 画圆角背景颜色,android圆角矩形有背景颜色
- 开了立体声混音仍然不能内录_相位表是如何为你的混音工作带来帮助的
- mysql jdbc官方,mysql_jdbc