STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

   日期:2020-07-01     浏览:491    评论:0    
核心提示:STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程项目及配置描述这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt-thread.com/生成的STM32F103VExx用bootloader;分区表配置如下: 分区名 所处设备 偏移地址 大小 app 片内flash 0x40_stm32单片机程序烧录不进去

STM32片内FLASH烧写错误导致ST-LINK烧不进程序的问题解决过程

项目及配置描述

这个问题是在做bootloader OTA测试时出现的,其中bootloader由http://iot.rt-thread.com/生成的STM32F103VExx用bootloader;

分区表配置如下:

分区名

所处设备

偏移地址

大小

app

片内flash

0x40000

128kb

download

片内flash

0x20000

128kb

F1 系列片内 Flash 的地址是从 0x8000000 开始的。填写 app 分区偏移地址为 0x20000 时,表示 app 分区实际从片内 Flash 的 0x8020000 地址开始。由于 Bootloader 存储在 0x8000000 起始的地址中,因此在进行分区配置时要为 Bootloader 固件预留足够的空间,例如偏移地址为 0x8000,表示为其预留了 32K 空间。

app固件使用RT-Thread Studio 1.0.6制作,固件包含 OTA 下载器功能,需要用到两个软件包ota_downloader latest和fal v0.5.0,ota_downloader使能Ymodem OTA,fal分区表配置如下:

#define RT_APP_PART_ADDR 0x08040000 //app分区首地址

#define FAL_PART_TABLE                                                               \
{                                                                                    \
    {FAL_PART_MAGIC_WORD,        "bl",     "stm32_onchip",         0,   128*1024, 0}, \
    {FAL_PART_MAGIC_WORD,       "app",     "stm32_onchip",   256*1024,  128*1024, 0}, \
    {FAL_PART_MAGIC_WORD, "easyflash", NOR_FLASH_DEV_NAME,         0, 1024*1024, 0}, \
    {FAL_PART_MAGIC_WORD,  "download", "stm32_onchip", 128*1024, 128*1024, 0}, \
}

bootloader分区“bl” -- 偏移地址0,大小128kb,

app分区“app” -- 偏移地址256*1024=0x40000,大小128kb,

download待升级固件分区“download” -- 偏移地址128*1024=0x20000,大小128kb

 

烧写描述

使用STM32 ST-LINK Utility v3.1.0分别烧写bootloader和app固件,烧写起始地址分别为0x08000000和0x08040000

 

问题描述

烧写bootloader后程序运行正常,结果打印如下:

 

接着烧写app固件,从地址0x08040000烧写,打印结果如下:

 

程序卡在这里,之后就发现ST-LINK连接不上了,结果如下:

 

这个结果,我从网上搜了大量资料,发现可能的原因是芯片休眠和自锁,先要擦除芯片,然后再烧正常的程序即可,网上有说使用FlyMcu按复位键重新烧程序的,有说在keil下在setting里面Debug选项中,connect & reset options 中connect 选择with Pre-reset来解决的,这几种方法我都试过,不可行,首先这些方法的前因后果描述都不够明确,其次使用flymcu需要基于串口ISP一键下载,需要用到“复位”操作,第二种方法也需要用到复位操作,此时我发现问题的关键在能够使MCU“复位”,但我的板子是量产产品没预留复位按键,只能手动改了,而且ST-LINK Utility报错也有提示让在“connect under reset”模式下尝试解决,于是设置成“connect under reset”后按“复位”惊喜发现ST-LINK连上了,但提示芯片在复位模式下“Core is held in reset”让切换到“normal”或“hot plug”模式,意思就是好了呗,果断切到“normal”模式下,果然,好了!但此时一定要注意,因为我出错是在0x08040000烧写程序出错的,如果此时只从0x08000000烧写程序,而0x08040000开始的程序并没变化,芯片可能还会锁住,所以正确的操作是“擦除芯片”,这样就不会出问题了。

 

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服