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

2023-05-16

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分区首地址
/* partition table */
#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开始的程序并没变化,芯片可能还会锁住,所以正确的操作是“擦除芯片”,这样就不会出问题了。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 聊聊ChatGPT

    ChatGPT 这几周科技圈最火的当属ChatGPT xff0c 自媒体中十篇有九篇都是关于ChatGPT的 ChatGPT上可知天文 xff0c 下可知地理 xff0c 还可写论文 搞代 写小说 xff0c 可谓 全能型选手 自从去年11
  • 修改简历有用吗

    看情况 xff0c 一般都是很有用哒 xff01 简历修改会突出你的重点和优点 xff0c 优化你的简历内容 xff0c 让面试官一眼看到简历就被吸引了 xff01 如以上图片所示
  • 运行Python时出现SyntaxError: EOL while scanning string literal解决方法

    当运行Python时 xff0c 出行SyntaxError EOL while scanning string literal 一般是语法出现错误 xff0c 看一下是不是哪里忘记添加符号或是分号 xff1a 这些没打
  • 数据结构选择练习题(有解析)

    前言 已经到期末了 xff0c 昨天进行了一次马原考试 xff0c 那时候挺紧张的 xff0c 那时候虽然写完了试卷 xff0c 但是有4道题是乱写的 xff0c 因为我刚好没有背 xff0c 希望不会挂科吧 然后今天呢 xff0c 就开始
  • 论文阅读_异常检测综述

    英文题目 xff1a Anomaly Detection A Survey 中文题目 xff1a 异常检测综述 论文地址 xff1a https readpaper com paper 2122646361 领域 xff1a 异常检测 发表
  • 解决Mybatis-Plus分页插件无效

    1 导入依赖 span class token tag span class token tag span class token punctuation lt span dependencies span span class token
  • 一、FreeRTOS任务调度相关函数详解

    文章目录 1 FreeRTOS任务调度及相关函数分析1 1 任务创建过程分析1 1 1 任务创建函数分析1 1 2 任务初始化函数分析1 1 3 任务堆栈初始化分析1 1 4 添加任务到就绪列表 1 2 任务删除过程分析1 3 任务挂起过程
  • linux的exit和_exit

    进程退出 退出一个进程有多种方式 xff1a 正常退出 xff1a 在main函数里return 在进程里面调用exit exit 在进程的最后一个子线程调用pthread exit 异常退出 xff1a 被信号 xff08 9 15 xf
  • 三、任务切换之PendSV异常

    文章目录 PendSV异常1 没有PendSV异常的任务切换2 有PendSV异常的任务切换2 1 系统调用引起的任务切换2 2 systick中断引起任务切换2 3 PendSV异常处理函数2 4 寻找下一个要运行的任务2 5 时间片调度
  • Cortex-M系列中断和异常(一)

    文章目录 1 中断与异常1 1 异常的类型1 2 异常及中断的管理1 2 1 中断的一般使用方法 1 3 优先级的定义1 4 向量表和向量表的重定义1 4 1 向量表重定向的应用场景 1 5 中断输入和挂起行为1 5 1 中断请求的类型 1
  • Cortex-M系列中断和异常(三)

    文章目录 Cortex M系列中断和异常1 1 SCB中的寄存器1 1 1 中断控制和状态寄存器 xff08 SCB gt ICSR xff09 1 1 2 向量表偏移寄存器 xff08 SCB gt VTOR xff09 1 1 3 应用
  • Cortex-M系列中断和异常(四)

    文章目录 1 中断及异常的注意事项1 1 中断及异常的优先级配置1 2 中断与栈空间的关系1 3 向量表重定向情况1 4 软件中断1 5 ARM架构及中断 2 函数调用与异常处理的过程2 1 函数调用过程2 2 异常处理过程2 2 1 栈帧
  • Cortex-M芯片低功耗开发

    文章目录 芯片的低功耗1 1 低功耗的测量数据1 2 低功耗的系统特性1 3 低功耗的系统需求1 3 1 Cortex M3和Cortex M4处理器的低功耗特点 1 4 低功耗系统特性1 4 1 休眠模式1 4 2 系统控制寄存器 xff
  • Keil 启动文件详解

    文章目录 1 启动文件详解1 1 启动文件的主要任务1 2 启动文件中的汇编指令1 3 启动代码讲解1 3 1 栈的初始化1 3 2 堆的初始化1 3 3 向量表初始化1 3 4 复位程序1 3 5 中断服务程序1 3 6 用户堆栈初始化
  • TiveC微控制器基础练习1.1源码

    基础练习1 1 软件延时实现LED闪烁 硬件描述 LED2 蓝色 PF0 LED3 绿色 PA4 LED4 红色 PD6 使用这个引脚 注意事项 引脚PF0和PD7比较特殊 默认是保护的 要重新编程操作的话 需要先解锁 小技巧 通过SysC
  • git-lfs filter-process: git-lfs: command not found

    最初是认为网络不稳定 xff0c 或者git版本过低 开始自己的git版本是1 20 xff0c 后续升级为1 32仍旧存在这个问题 之后安装了git lfs xff0c 问题解决 不知道为什么其他同事没有出现该问题 brew instal
  • gazebo和rviz有具体的区别吗?哪个更好用?

    文章来源 xff1a 企鹅号 古月居 https www zhihu com question 268658280 answer 340190866 简单来讲 xff0c 两者的主要功能不同 xff0c 没办法比较哪个更好用 xff0c 如
  • Ubuntu下好用的录屏和视频格式转换工具

    xff08 1 xff09 Ubuntu录屏工具 kazam 安装 sudo apt get install kazam 安装完之后 xff0c 命令行中输入 xff1a kazam 就可以启动工具了 xff0c 可以看到工具界面如下 xf
  • linux的fork和vfork

    fork和vfork 区别 fork函数和vfork函数都可以用来创建一个子进程 他们有什么区别呢 xff1f 首先是fork xff1a 内核会给子进程分配虚拟内存空间和id xff0c 但不会分配物理内存子进程一开始是共享父进程的物理空
  • 经典卷积神经网络(一):LeNet-5和AlexNet

    本节介绍几种广泛使用的典型深层卷积神经网络 LeNet 5 LeNet 5 LeCun et al 1998 虽然提出的时间比较早 xff0c 但是是一个非常成功 的神经网络模型 基于LeNet 5的手写数字识别系统在90年代被美国很多银行

随机推荐

  • FreeRTOS中打开关闭任务切换

    本文介绍FreeRTOS中解决多任务之间互相影响的两种方法 1 基本临界区 基本临界区是指宏 taskENTER CRITICAL 与taskEXIT CRITICAL 之间的代码区间 xff0c 下面是一段范例代码 Critical Se
  • 嵌入式八股文汇总

    1 C C 43 43 1 1 关键字 xff08 参考 嵌入式及Linux那些事 以及众多帖子汇总而成 xff09 volatile 当声明指向设备寄存器的指针时一定要用volatile xff0c 它会告诉编译器不要对存储在这个地 址的
  • 嵌入式面试常考问题

    面试经验 c c 43 43 1 malloc与new的区别 1 new是操作符 xff0c malloc是函数 2 new使用时先分配内存 xff0c 再调用构造函数 xff0c 释放时调用析构函数 3 new只能分配实例所占类型的整数倍
  • 神经网络应用较多的算法,图卷积神经网络应用

    神经网络原理及应用 神经网络原理及应用1 什么是神经网络 xff1f 神经网络是一种模拟动物神经网络行为特征 xff0c 进行分布式并行信息处理的算法 这种网络依靠系统的复杂程度 xff0c 通过调整内部大量节点之间相互连接的关系 xff0
  • K8S api接口详解

    一 创建管理员用户 xff0c 授权 xff0c 获取token值 1 创建用户 编写CreateServiceAccount yaml文件 span class token key atrule apiVersion span span
  • OpenStack floating IP

    1 弹性公网IP 私有IP 浮动IP 虚拟IP之间区别 弹性公网IP是可以直接访问Internet的IP地址 一个弹性公网IP只能给一个ECS使用 私有IP是公有云内网所使用的IP地址 xff0c 用于内网通信 xff0c 私有IP不能访问
  • 修改apt-get源为国内镜像源

    span class token comment 备份 span span class token function cp span etc apt sources list etc apt sources list bak span cl
  • Ubuntu安装aptitude

    安装aptitude xff0c 利用aptitude对依赖关系进行智能处理 span class token function sudo span span class token function apt get span span c
  • ubuntu桌面出现问题,重启x桌面方法

    ubuntu默认有7个console xff0c ctr 43 alt 43 xff08 F1 F7 xff09 可以切换控制台 xff0c 其中F7是图形界面 xff0c 其余都是字符界面 X window出现问题 xff0c 需要进入字
  • Linux-KVM虚拟机的创建和快照命令

    KVM xff1a Kernel based Virtual Machine的简称 xff0c 是一个开源的系统虚拟化模块 xff0c 自Linux 2 6 20之后集成在Linux的各个主要发行版本中 安装虚拟机脚本 xff1a 虚拟机的
  • 浅谈stm32的低功耗模式

    stm32标准库实现低功耗 一 概述 stm32不同系列芯片支持的低功耗模式各有差异 xff0c 本文以F103系列芯片为例 xff0c 简单讲解不同低功耗模式的特点和使用方法 二 低功耗 简述 默认情况下 xff0c 系统或电源复位后 x
  • Vncservice多用户登陆

    1 修改 etc sysconfig vncserver 添加一个 longgangtest 的用户 2 在系统中新建一个 longgangtest的用户 adduser longgangtest 然后执行 好像需要执行 xff0c 测试的
  • 使用正点原子资料点亮野火linux开发板LED

    64 TOC
  • 斜杠、反斜杠的区别

    我们在写程序时候经常会混淆 和 xff0c 经常听到别人讲 斜杠 xff0c 反斜杠 xff0c 那么怎么区分它们呢 xff1f 还有它们各在什么样的场景下使用呢 xff1f 本篇文章是来区别这两个符号和总结使用它们的情形 1 区分 是斜杠
  • 七月在线机器学习

    异方差性ID3算法中文分词HMM非参数统计和参数统计切比雪夫不等式条件熵K L变换和主成分分解生成模型和判别模型非抽样误差径向基函数线性回归的基本假设最大熵SVM中的C和gamma参数距离度量牛顿法和拟牛顿法拉灯问题铺瓷砖问题哈夫曼编码树最
  • ros2串口通信

    目录 前期准备新建工程添加头文件添加源文件添加节点源文件修改package xml和CMakeLists txt安装依赖编译执行打开虚拟串口打开发布者打开订阅者打开监听 xff0c 查看是否有数据接收 前期准备 登录github下载代码ht
  • 产品化思维

    1 1 产品的本质 能够供给市场 xff0c 被人们使用和消费 xff0c 并能满足人们某种需求的任何东西 xff0c 包括有形的物品 无形的服务 组织 观念或它们的组合 定义 xff1a 市场是提供给买卖双方交易的平台 xff0c 而人在
  • Orcad生成BOM包含封装信息的方法

    在使用ORCAD开发后期 xff0c 总少不了导出BOM xff0c 根据BOM备料的过程 但是ORCAD默认的生成BOM方式并不能直接包含封装等信息 xff0c 这就需要在生成BOM的过程中做一些改动了 首先就如生成BOM界面 而后在需要
  • linux防恶意软件防病毒 防护工具

    保持Linux系统的安全 抵御Linux恶意软件和Linux病毒 据大多数估计 xff0c 目前互联网上超过50 的网络服务器正在运行某种版本的Linux或者相关的 nix系统 这应该足以让你认识到 xff0c 分析 识别 根除Linux系
  • STM32片内FLASH烧写错误导致ST-LINK烧录不进程序的问题解决过程

    STM32片内FLASH烧写错误导致ST LINK烧不进程序的问题解决过程 项目及配置描述 这个问题是在做bootloader OTA测试时出现的 xff0c 其中bootloader由http iot rt thread com 生成的S