STM32 串口无法下载程序问题分析报告
一、 下载部分原理图
图 1 RS232 接口
图 2 下载接口
需要通过串口下载程序,BOOT0=3.3V,BOOT1=0V,复位芯片,进入 ISP 下
载模式,图中所示,只需短接 1、2 脚,3、4 脚,按复位键或重新上电,芯片
进入 ISP 下载模式,等待握手指令。注意 BOOT0 通过下拉电阻接地,防止芯
片平常启动时意外进入 ISP 下载模式。
二、 下载软件 Flash Loader Demonstrator
图 3 串口下载程序软件
三、 下载程序
一般情况下,短接图 2 下载接口的 1、2 脚和 3、4 脚,按复位键芯片进入 ISP
下载模式,打开 Flash Loader Demonstrator,选择串口相应端口,按下 next
键,若握手成功则可进入下一步。
四、 问题分析
操作提示无法识别芯片,软件与芯片无法通过握手,首先我们对硬件的基本条
件进行了排查,BOOT0=3.3V,BOOT1=0V,按复位键复位电平正常,电平上升坡
度时间大概为 15ms,由于该板能够使用 STLINK 下载程序,又做了一次接收数
据返回的程序,以验证串口及 RS232 均没有问题,验证均通过。为此,我们需
要做更深入分析,为此我们要准备一些工具,对于硬件来说,示波器是必不可
少的,对于端口数据来说,Usb Hound 是一个很好的分析端口数据工具,下面
我们借助工具来做进一步的分析。
五、 监视分析
图 4 Usb Hound 端口选择
图 5 Usb Hound 运行
Usb Hound 使用非常简单,在 Device 项选择相应端口打勾,回到 Capture 界
面,点击 Run 即对端口数据监视。此时我们打开 Flash Loader Demonstrator
并选择相应端口,采用 9600 波特率,短接下载接口的 1、2 脚和 3、4 脚,接
好 RS232 端子引脚,按复位键,然后按 next 键
图 6 Usb Hound 监视 Loader Demonstrator 与芯片握手信息
从数据分析发现,58us 即收到返回数据 00,按照波特率 9600 计算,该数据并非
芯片发出,为验证这一想法,我按住单片机复位键,再一次按下 next 键,得到
同样的监视数据,查阅 Bootloader 说明书,软件端发送 0x7F,芯片返回数据应该是为
0x79,如今监视到的数据却是 0x00,而且我们已经验证了 0x00 是硬件产生而非芯片
发出,而串口的硬件前面初步排查的时候已经提到过,通过程序的收发都没有问题,
这时我想到用串口软件来进行一次测试。
此时返回数据是正常的,同样的硬件,为什么不同的软件会接收到不同的数据
呢?带着这个疑问,我用示波器对单片机的 TXD1 引脚进行了监视:
监视发现,返回波形是一致的,但是为何两个软件解析出不同的数据?反复对
比两个软件,很快发现其中的区别:
串口数据有起始位、数据位、校验位、停止位,其中起始为为 0,停止为为 1,
我们不难发现 Flash Loader Demonstrator 没有停止位选择这一项,而从示波
器波形来看,复位进入 ISP 模式以后,TXD1 空闲状态保持低电平,所以当
Flash Loader Demonstrator 发送握手信息后,将芯片 TXD1 引脚的空闲状态解
读为数据 0x00,并以此为依据判断芯片无法识别,由此也解开了无法下载的谜
团。细心的朋友可能会有一个疑问,为什么前面提到过,使用 STLINK 下载程序
验证程序收发时候,为什么就没有这个问题呢?问题很简单,程序运行后,会
对端口进行配置,TXD1 内部配置上拉电阻,所以 TXD1 空闲状态为高电平。
六、 解决办法
加 10K 上拉电阻到 TXD1 引脚,使其空闲状况保持高电平。
七、 总结
开发的过程中我们总会与到这样那样的问题,当遇到问题的时候,我们更需要
的是掌握解决问题的思维办法,顺着这个思维,一步一步走下去找到问题的根
本;同时也需要在实践的过程中更多的去注意这些细节问题,一个小小的上拉
下拉可能都会给你造成不少的困扰,在开发的路上没有小问题,每一个问题都
需要认真对待,之所以把这样一个小问题用文字的表达出来,也是希望能够带
给你帮助或者启发,在这里要感谢我的一个朋友,翁工,是他在开发的路上给
了我很多启发。
2014-08-05