问题描述
客户反馈通过PC软件Flashloader不能够跟STM32 MCU自带Bootloader连接。并且系统运行一段时间后异常复位。
系统分析
检测原理图
延续之前的项目,进行的一些软硬件简单修改。
上电、放电的时序也是正常。
BOOT0 拉高,BOOT1 拉低,
测量工作时的电压正常(2.5v)。
检测所有相关的硬件软件都是没有问题,他们的BOOT脚,以及之前的PDR_ON是通过外围的FPGA单元控制,我们一开始怀疑这些上电时序,以及PDR逻辑出错。尝试让他们全部断开逻辑,测试整个上电,掉电过程都是没有什么问题。
测量波形
检测他们的串口工具
能正常在PC上发现他们的串口工具,数据的发送正常。
但是串口的到PCB板上没有任何的输出,所以并不能跟板子通讯。
使用一个新的串口工具,当产品连接到PC后,重新上电,能够正常升级软件,到这里似乎问题得到解决,但是当他们恢复到之前的系统,通过控制Reset和BOOT引脚进入的时候,仍然时灵时不灵,当不能进入BOOT的时候,他们测量我们的复位管脚电压时发现在复位脚上以一个3.6MHz的频率不停的复位MCU。
功能测试
客户又发现如果给MCU上电,PC快速打开Flashloader,并且连接串口,工作正常。但是,如果慢速这样操作,就连不上了,真是神奇的事情再次发生,他们再次确认发现,在复位脚上,在上电一段时间后,会有不停的有一个复位信号产生,百思不得解。
确认手册
我们打开AN2606,发现在Bootloader的流程图中有一个系统Reset的过程,难道是这里产生的吗?
我们让客户断开所有的外设再次确认问题,他们发现在断开外围的时候,这个连续的复位信号不再产生。从这个流程来看,只有在用到DFU或者CAN升级的会在检测不到HSE的时候会系统Reset,但据他们说,他们并不使用这两个功能,那就奇怪了,然后就让他们试做去恢复外设功能,最后发现在恢复到一个SPI的时候,重现这个问题。
系统确认
我再次跟他们沟通他们的系统框图如下:
他们进一步调查发现,当FPGA,在上电初始化后,会不停的发送一些命令给到MCU,数据线正好跟CAN的RX引脚共用,所以只有第一次上电后,也就是在FPGA给MCU发送数据之前,Flashloader能够正常连接MCU,过了这段时间就不能连接了。从这些实验和最后的结果我们可以看出,如果我们在芯片上电,且在FPGA给MCU发送数据之前,连接串口,这个时候MCU就能顺利地通过UART启用Bootloader,而不受FPGA发送的数据影响,而过了这段时间之后,FPGA会不停的发送数据给MCU,而MCU错误的检测到CAN FRAME(跟ST欧洲的应用部门确认,我们的CAN 检测只是简单的确认一个下降沿,一个上升沿,再检测到一个下降沿),而进入CAN Bootloader但是又不能正确检测到HSE,或者不能在3ms内检测到正常的CAN FRAME,从而导致MCU复位。在屏蔽掉SPI的时候,一切正常。
关键字:STM32 Bootloader 异常复位
引用地址:
STM32 Bootloader异常复位如何解决
推荐阅读最新更新时间:2024-11-09 16:57
【STM32】STM32F407 + DHT11
一、DHT11简介 DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~+60℃。 ——来自百度百科 测量范围:湿度 5~95%RH, 温度 -20~+60℃ 测量精度:湿度 ±5%RH, 温度 ±2℃ 供电电压:3.3~5.5V DC 输 出:单总线数字信号 分辨率:湿度1%RH, 温度0.1℃ 关于单总线协议可以查看这篇文章:【STM32】stm32f407 + DS18B20 碰出不一样的火花 二、编程思路 温湿度传感器 DHT11 和 温度传感器 DS18B20 均采用 单总线协议,因此两者的编程思路很相似,不过 DHT11 增加了湿度
[单片机]
STM32串口使用
STM32的串口大多数情况下会预留USART1作为烧录接口或者调试接口。 通常做法是调用 stdio.h 将串口的输入输出重新定向,可以直接调用printf. 代码如下: /** ****************************************************************************** * 文件名程: bsp_usartx.c * 版 本: V1.0 * 编写日期: * 功 能: 串口底层驱动程序 */ /* 包含头文件 ----------------------------------------------------------------*
[单片机]
基于STM32的平衡小车设计过程
一、简介 接触STM32开发一段时间了,想用STM32做一个有意思的项目,经历了无数的调参调参再调参,终于让它站稳了,接一下就一步步的跟大家介绍一下,项目的整体实现过程— 二、项目介绍 STM32平衡小车是一种基于STM32芯片的智能小车,它可以通过自动控制来保持平衡,使其可以在不同的地形上稳定行驶。其使用范围非常广泛。需要用到一些基本的硬件组件,例如电机、轮子、陀螺仪、加速度计、电池等。通过设计的电路板进行连接,组成一个完整的系统。 三、硬件设计 根据上述需求,我进行了电路图设计 四、软件设计 4.1电机驱动编写 4.1.1电机引脚说明 编码电机 引脚说明: M1电机电源线(12V) GND编码器地线 C
[单片机]
STM32串口的理解
串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能,GPIO 时钟使能 2) 串口复位 3) GPIO 端口模式设置 4) 串口参数初始化 5) 开启中断并且初始化 NVIC(如果需要开启中断才需要这个步骤) 6) 使能串口 7) 编写中断处理函数 淡蓝色是以串口1举例,深蓝色是以结构体函数,可拿结构体复制到Keil5中,右键 仔细看结构体里要求的模式等 1.串口时钟使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1); 2.串口复位: void USART_DeInit(USART_TypeDef* USARTx);//串口复位 假设,复位串口 1: U
[单片机]
STM32 TImer几种模式
输入捕获模式 库函数例程位置: STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32F10x_StdPeriph_ExamplesTIMInputCapture 在输入捕获模式下,当检测到ICx信号上相应的边沿后,计数器的当前值被锁存到捕获/比较寄存器(TIMx_CCRx)中。当捕获事件发生时,相应的CCxIF标志(TIMx_SR寄存器)被置’1’,如果使能了中断或者DMA操作,则将产生中断或者DMA操作。 在捕获模式下,捕获发生在影子寄存器上,然后再复制到预装载寄存器中。 PWM输入模式 库函数例程位置 :STM32F10x_StdPeriph_Lib_V3.3.0ProjectSTM32
[单片机]
基于STM32的外设的GPIO外设设置总结
1、背景 外设驱动的寄存器设置对于外设功能正常运行异常重要。现在对GPIO的配置进行总结。 2、GPIO的配置总结 复用GPIO配置 GPIO设置为输出或者是复用模式时,需要设置输出速度;而无论设置为什么模式,都要对GPIO的内部上下拉进行设置。 注意:在输入模式(普通输入/模拟输入)下,OTYPE和OSPEED参数无效!!
[单片机]
STM32驱动LCD的原理介绍
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 ▲驱动流程 01 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD
[单片机]
STM32 实现 IAP与APP文件合并
;以下为合并程序的配置文件,请注意APP的偏移地址为0x2000...全部文件夹请参考我的资源贴。 ;只针对小于64K的FLASH,需要更大容量的将在后续推出。 ;--------------------------------------------------------------------------------------------------------------------- ;CONSOLEBIN 2015.12.25 ;Info2.ini 文件与ConsoleBin.exe 放置在同级目录 ;引导程序文件,命名规则为 引导+文件+pre.bin leadFile=STM32F10XX6_
[单片机]