目录

  • 问题描述
  • 定位过程
  • 问题解决
  • 总结

问题描述

在调试程序透传功能时发现,使用J-Link下载程序后功能正常。拔掉J-Link,电源供电,APP端无法收到数据,功能异常。使用J-Link进入仿真模式运行,则功能又恢复正常。
主芯片:STM32F103RC
RTOS:RT-Thread

定位过程

  1. 刚开始怀疑电源供电,主芯片程序没有运行。从主芯片与电池之间的串口交互看,主芯片确实没有转发出指令。
    增加了一个闪灯线程,电源供电下,灯没有闪烁。怀疑硬件电源部分问题,但验证硬件的流水灯程序可以正常运行,仍然从软件查找。
  2. 使用点亮LED的方式查找,逐渐调整点亮的位置,最终发现是启动main线程后运行出错。
  3. 熟悉了下程序,打开程序的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线程一启动就错误了。

  4. 继续查找,发现是HAL_GetDEVID返回0导致。

问题解决

  1. 怀疑是电源不稳定,在上电初始化之前增加大概3S延时- -无效。
  2. 重复读取,每次读取中间增加延时- -无效。
  3. 继续测试,发现上电后,使用J-Link RTT Viewer V7.52d连接。此时硬复位,即可恢复正常。推测与J-Link有关。
  4. 查看手册《STM32_MANUAL_CN》:
  5. 看起来没什么问题。更改关键字DBGMCU_IDCODE搜索,最终发现只能在调试模式下访问, 不能通过用户软件操作。对应下载了勘误手册:
    这也对应解释了第3条的现象。

总结

这样看来,此芯片不能通过HAL_GetDEVID来获取ID,然后得到芯片资源空间。解决问题占用了较多时间,一直想尽快定位解决,以后需要注意:

  1. 调试前熟悉当前的程序框架,一些实现机制。
  2. 适当更换关键字
  3. 官方手册使用,勘误手册第一次用到。

STM32重上电后,HAL_GetDEVID返回0相关推荐

  1. 关于Access数据库执行Update语句后,不报错,但影响行数总是返回0的问题

    最近碰到一个奇怪的问题,使用Access数据库执行Update语句后,不报错,但影响行数总是返回0. 因为是第一次碰到这个问题,纠结了半天.后来在网上搜索得到解决方案: SQL语句传参数的顺序和语句中 ...

  2. (194)FPGA上电后IO的默认状态(ISE软件默认为0)

    (194)FPGA上电后IO的默认状态(ISE软件默认为0) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(ISE软件默认为0) 5) ...

  3. (191)FPGA上电后IO的默认状态(Vivado软件默认为0)

    (191)FPGA上电后IO的默认状态(Vivado软件默认为0) 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA上电后IO的默认状态(Vivado软件默认 ...

  4. STM32 MDK编译后生成的 .map文件深入分析

    .map文件是STM32开发中非常重要的一个文件,在该文件中可以详细的查看单个文件.函数及用户定义的全局变量等的占用RAM和ROM(一般为片内FLASH)的空间大小,通过了解这些信息可以很方便的进行代 ...

  5. 从零开始写STM32平衡小车代码,从0到1

    从零开始写STM32平衡小车代码,从0到1 教你从零开始写STM32平衡小车代码 前言: 本人也是学生,只是分享一下自己的设计思路与代码教学. 这次STM32平衡小车是基于STM32CubeMX软件生 ...

  6. 【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模块) ...

  7. android linker重定位后初始化

    Linker重定位后初始化 linker重定位后,进行一系列初始化工作,这个阶段,linker已经可以引用外部的符号和全局变量了. 源码 /** This code is called after t ...

  8. 视图的getWidth()和getHeight()返回0

    我正在动态创建我的android项目中的所有元素. 我正在尝试获取按钮的宽度和高度,以便可以旋转该按钮. 我只是想学习如何使用android语言. 但是,它返回0. 我做了一些研究,发现需要在onCr ...

  9. ***CI新增记录成功后的返回值判断,是用isset还是empty

    Q: 新增记录插入成功后,加了一个return $this->db->insert_id(); $digg_id = $this->m_feed_digg->create(js ...

最新文章

  1. 报名 | 第三期医工结合系列研讨会:科研领域的知识产权保护
  2. 解决:delphi7 license is invalid or has expired
  3. 简单的openssh自动升级脚本
  4. html5画布 文本无法显示,淡出HTML5画布中的文本效果
  5. CheckStyle使用手册(一)
  6. Python学习笔记——Python的下载与安装
  7. thinkphp mysql 密码加密_thinkphp微信开发(消息加密解密)
  8. 程序员分析一线城市 1000 +岗位招聘需求,告诉你如何科学找工作
  9. LeetCode Map Sum Pairs
  10. RJ45口线序的理解
  11. mysql bootstrap pxc_MYSQL PXC
  12. Vscode信任问题
  13. Springboot项目启动异常 org.springframework.beans.factory.UnsatisfiedDependencyException
  14. TaHomA:一套让你在iPad上控制房子,将其变身智能房屋的神奇系统
  15. VB中关于UBOUND和LBOUND含义
  16. 《软件开发工具》(第二章)
  17. 安装python卡到不动了_pip卡住不动的解决方案
  18. 网格布局(grid布局)
  19. python 拆分excel工作表_Python合并拆分excel
  20. linux centos7 iso镜像下载,CentOS Linux 7.9 (2009) iso镜像下载

热门文章

  1. python csv数据所在行_使用python获取csv文本的某行或某列数据的实例
  2. 统计正数和负数的个数然后计算这些数的平均值_计算机中的二进制原来是这样:原码、反码和补码
  3. 在WSL下安装MYSQL的实验报告_Linux(wsl)安装docker和mysql主从搭建
  4. taro 小程序转h5之后报错_原生小程序转H5
  5. python线程池传入多个参数_python线程池问题
  6. shiro-cas------自定义登录页面
  7. python pytorch自定义_Pytorch 实现自定义参数层的例子
  8. android 画圆角背景颜色,android圆角矩形有背景颜色
  9. 开了立体声混音仍然不能内录_相位表是如何为你的混音工作带来帮助的
  10. mysql jdbc官方,mysql_jdbc