当前位置: 首页 > news >正文

嵌入式开发--STM32G431无法正常运行程序,BOOT0与CAN冲突

故障现象

今天开发STM32G431时遇到一个问题,板子打样回来后,焊接完成,可以烧程序,可以读FLASH,却死活不能运行,也不能进仿真调试。

故障定位

经过排查,发现将隔离芯片π121M31拆除,MCU可以进入正常工作状态,可以进仿真调试。所以确定故障与相关引脚有关。

原理图如下:
在这里插入图片描述
用到的引脚是PB8和PB9。
PB8是兼用于BOOT0,所以将PB8用一个100K的电阻下拉到地,这个方式以前用过没有问题。

CAN相关的电路如下:
在这里插入图片描述
这个电路以前也用过,也没有问题。

由此基本可以确定故障是由于BOOT0的电平变高,导致MCU进入了内部BOOTLOAD模式或SRAM模式,这个就没有深究了,可以确定的是没有运行FLASH的程序。

测量U9的4脚输出为高电平,由此确定故障原因,就是BOOT0脚在复位时处于高电平状态,导致MCU不能进入FLASH程序运行。

问题解决

尝试将PB8连接的下拉电阻改为10K,无效。
尝试U8的1脚断开,MCU可以正常工作。于是考虑将U8的供电改为缓启动方式。
在这里插入图片描述
电源缓启动是解决了,MCU还是不能正常工作。
原因也很简单,上电复位的RC电路时间常数和这个一模一样,这就导致缓启动没有产生效果。
于是再改电路,将电阻改为36K,电容改为20uF,时间常数从原先的0.1秒变为0.72秒,多出来的0.62秒就是实际的缓启动时间。
在这里插入图片描述
更改之后,电路正常工作,可以正常启动进调试,缓启动后,U8上的电压也能达到正常的3.3V。
需要注意的是,软件中需要增加一个延时,不然的话,在缓启动期间收发数据,就会造成数据丢失。

再次改进

按上图虽然可以正常启动,但是只能在上电时工作一次。在带电调试时,需要频繁的按复位键和进Debug,这时上面的电路就不能工作了。因为当按下复位键时,+3.3V电源依然存在,RC充电电路并没有一个放电的过程。继续改进如下:
在这里插入图片描述

按下复位键时,RESET被拉低到地,这时PQ3导通,将PC17放电,松开复位键后,RESET电压上升 ,PQ3逐渐截止,PC17和PR7就开始了重新充电的过程,这样+3.3_DELAY就会有一个低电平的持续时间,此时PC17和PR7的取值可以变小,时间常数可以按图取到0.1秒甚至更小。

其他类似的不启动问题,也可以参照这个解决方法。

CAN参数配置

顺便记录一下CAN的参数配置,主时钟频率160M,CAN波特率为1MHz
在这里插入图片描述

相关文章:

  • 第五十五节:综合项目实践-实时人脸美化滤镜
  • (独家)SAP WIP生产订单结算报错:没有估算额;不可能结算
  • lto.o
  • 78. Subsets和90. Subsets II
  • Claude 4对比Claude 3.7全面评测:2025最新AI模型实测对比
  • Femap许可证与网络安全策略
  • APP广告变现,开发者如何判断对接的广告SDK安全合规?
  • 注意力机制模块代码
  • windows中Redis、MySQL 和 Elasticsearch启动并正确监听指定端口
  • 实时数仓flick+clickhouse启动命令
  • 聊一聊 .NET Dump 中的 Linux信号机制
  • Spark SQL进阶:解锁大数据处理的新姿势
  • 编程规范Summary
  • C++ STL stack容器使用详解
  • 2025 年江西研究生数学建模竞赛题A题电动汽车充电桩共享优化与电网安全协同模型完整思路 模型代码 结果 成品分享
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • C++11 中引入的`final` 关键字作用。
  • python处理signal(信号)
  • 8种使用克劳德4的方法,目前可用随时更新!
  • Map集合(双列集合)
  • 网站建设是做什么的/南京网站设计
  • 公司做网站哪家好/海淀区seo多少钱
  • 有后台的网站/中国最权威的网站排名
  • 能登上日本网站的代理服务器/seo职业
  • 大连政府建设工程信息网站/seo的基本步骤包括哪些
  • 南京哪家公司做网站/免费学生网页制作成品代码