IAP升级遇到的问题
文章目录
- 1. app程序在SystemClock_Config中跑飞
- 2. 程序HAL_Delay中卡死
- 3. 通过外部flash模拟的U盘没能被电脑识别
- 4. 将bin文件拷贝到片内flash中失败
- 5、APP程序跳转过后串口不能工作
这几天在STM32G473使用IAP升级的时候踩了不少坑
1. app程序在SystemClock_Config中跑飞
bootloade和app程序都是通过CubeMX配置,在bootloade引导之后进入app程序,然而在执行到SystemClock_Config
函数的时候失败;
经过debug后发现是SystemClock_Config
函数执行到以下代码的时候跑飞了
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}
程序执行进入到了Error_Handler()
,头一次在系统时钟初始化的时候跑飞(暴露了见识的短浅),通过在网上查询找到了原因,看了大佬的博客才明白,是因为bootloade使用了外部时钟,并且配置了PLL
,那么再app程序中再次进行配置的时候就出现了问题,大佬的博客中有对应的解决办法,下面就是链接:
STM32实战项目:HAL_RCC_OscConfig中程序卡死问题解决办法_觉皇嵌入式的博客-CSDN博客
我选择了最简单的方法,那就是bootloade不适用外部时钟,不配置PLL
,那么在app程序中就不会在SystemClock_Config
中跑飞了。
红色:
后来发现初始不成功的原因可能是两次时钟初始化的不同,我们可将bootloader和app程序的时钟设置相同,也就是各个参数设置为相同的
2. 程序HAL_Delay中卡死
app程序就是一个简答的led灯的闪烁,中间使用HAL_Delay
控制亮灭的时间
在程序进入到HAL_Delay
中之后就没有出来,查看了HAL_Delay
函数的介绍发现其是通过中断实现的,现在在HAL_Delay
中出问题极有可能是因为中断的原因,查看中断向量表的地址之后发现没有问题,后想到在bootloade中为了防止中断打断升级,所以通过__disable_irq
将中断全部关闭,但是在app程序中没有打开,所以没有中断没有执行。
解决办法:
在main的函数的开头加入开中断的语句
__enable_irq();
3. 通过外部flash模拟的U盘没能被电脑识别
通过bootloade引导的app程序不能被电脑识别,但是修改app程序的下载地址之后就能正常识别。
在main
函数中USB_DeviceStart
中启动了USB,USB的初始化也没有问题,通过bootloade引导的app程序和直接跑的app程序唯一的区别就是中断向量表的不同,再看打开中断和中断向量表切换的语句顺序,错误顺序
__enable_irq();SCB->VTOR = FLASH_BASE | 0x20000;
可能是使能的中断是bootloade的中断,但是bootloade中没有配置USB,所以导致U盘没有被识别,将上述语句的顺序调转一下就可以了,正确顺序:
SCB->VTOR = FLASH_BASE | 0x20000;__enable_irq();
4. 将bin文件拷贝到片内flash中失败
bootloade在将bin文件拷贝到片内flash中失败,拷贝过程中突然就HardFault_Handler
了 ,HardFault_Handler
产生大概率是堆栈越界了,然后看了启动文件,发现在CubeMX
配置的时候没有改堆栈的大小,将堆栈调大后发现成功了。
解决办法:
将堆栈的空间调大
5、APP程序跳转过后串口不能工作
在bootloader跳转到app程序之后,确定app的中断向量表已经偏移到指定的位置,其他的中断也能正常的执行,串口的空闲中断却不能使用。应该是在bootloader和app程序的串口配置的不同,但是在跳转到app程序后对串口的再次初始化并没有将其赋为相对应的值。
解决办法:
将app和bootloader使用到的相同的外设配置为相同的状态
这个真是个大坑,若是注意到这一点就能避开很多的麻烦,若是配置的不同很可能有很多隐藏的问题,并且还不容易找出来问题所在。这都是血和泪的教训。
Red>这个真是个大坑,若是注意到这一点就能避开很多的麻烦,若是配置的不同很可能有很多隐藏的问题,并且还不容易找出来问题所在。这都是血和泪的教训。
相关文章:
IAP升级遇到的问题
文章目录 1. app程序在SystemClock_Config中跑飞2. 程序HAL_Delay中卡死3. 通过外部flash模拟的U盘没能被电脑识别4. 将bin文件拷贝到片内flash中失败5、APP程序跳转过后串口不能工作 这几天在STM32G473使用IAP升级的时候踩了不少坑 1. app程序在SystemClock_Config中跑飞 boo…...
简单聊聊k8s,和docker之间的关系
前言 随着云原生和微服务架构的快速发展,Kubernetes和Docker已经成为了两个重要的技术。但是有小伙伴通常对这两个技术的关系产生疑惑: 既然有了docker,为什么又出来一个k8s? 它俩之间是竞品的关系吗? 傻傻分不清。…...

半小时学会HTML5
一、了解几个概念 1、HTML定义 HTML是(Hyper Text Markup Language)超文本标记语言,超文本包含:文字、图片、音频、视频、动画等。 2、W3C 是什么? W3C 即(World Wide Web Consortium) 万维…...

研报精选230421
目录 【行业230421南京证券】氢能行业:地缘政治加速绿色能源转型 【行业230421华安证券】AIGC行业研究框架与投资逻辑 【行业230421信达证券】工控行业深度报告:行业拐点将至,国产品牌加速崛起 【个股230421国信证券_华阳集团】聚焦汽车智能化…...

AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
Midjourney和Stable Diffusion都可以通过输入文本生成出令人惊叹的AI图像。 Midjourney是一个收费的在线服务,通过discord对话的形式来生图,局限性较大,但由于后台官方模型做得好,因此出图效果非常完美; Stable Diffus…...

人工智能论文的风格特点
搞清楚AI领域论文的风格特点是写出一篇高质量AI论文的前提,AI领域的论文有如下显著特点。 1. 论文的架构非常清晰且富有逻辑。一篇高质量的AI论文,读者通过大致扫一眼论文的各级标题就能够对论文的写作思路形成清晰的认识,明白论文各部分之间…...

成功上岸国防科大!
Datawhale干货 作者:王洲烽,太原理工大学,Datawhale成员 写在前面 相比较于一般的经验贴,我更想在这里讲述一下自己的故事。我一开始报考的是北理工,但很遗憾9月份北理改考408了,无缘京爷,所以…...

【C语言】输入输出、字符串操作、内存操作、文件操作函数
三对基本输入输出函数 1.gets(),puts() gets()从标准输入中获取一个字符串,到str(自己创建的char型数组)中,读到换行或输入末尾结束获取r; 成功返回str,失败返回空。 char *gets(char *str)…...

[golang gin框架] 25.Gin 商城项目-配置清除缓存以及前台列表页面数据渲染公共数据
配置清除缓存 当进入前台首页时,会缓存对应的商品相关数据,这时,如果后台修改了商品的相关数据,缓存中的对应数据并没有随之发生改变,这时就需要需改对应的缓存数据,这里有两种方法: 方法一 在管理后台操作直接清除缓存中的所有数据,当再次访问前台首页时,就会先从数据库中获取…...

文件夹改名,如何在改名之后批量复制文件夹名称
在日常时候中会遇到给文件夹改名的时候,那么我们又如何在改名之后批量复制文件夹名称?今天就由小编来给大家分享一下操作办法。 首先第一步,我们要进入文件批量改名高手,并在板块栏里选择“文件夹批量改名”板块。 第二步…...

汇编与内联 x86-64
机器字长 x86是32位系统 64是64位系统 这里的32和64,指的都是机器字长 机器字长是 能直接进行整数/位运算的大小指针的大小(索引内存的范围) 容易与机器字长混淆的概念:字 字 字存储字长 字是MDR寄存器的位数,代表每个主存存储体中的存储…...
OSCP-UT99(IRC、Unreal Tournament 99)
目录 扫描 WEB IRC 提权 扫描 sudo nmap 192.168.142.44 -p- -sS -sV PORT STATE SERVICE VERSION 21/tcp open ftp FileZilla ftpd 80/tcp open http Apache httpd 2.4.16 (OpenSSL/1.0.1p PHP/5.6.12) 44…...
Kubernetes CPU内存资源限定
在 Kubernetes 中创建工作负载时,您可以为 Pod 中的每一个容器指定其所需要的内存(RAM)大小和 CPU 数量。如果这些信息被指定了,Kubernetes 调度器可以更好的决定将 Pod 调度到哪一个节点。对于容器来说,其所需要的资源…...

fitlog使用教程(持续更新ing...)
诸神缄默不语-个人CSDN博文目录 fitlog包是用于自动版本管理和自动日志记录的Python包,是fastNLP团队开发的。 fitlog 中文文档 — fitlog 文档 我下载的是fitlog 0.9.15版本。 他们团队的文档写的真的不行,崩溃,FastNLP也很难用࿰…...

Linux下搭建Go开发环境
Linux下搭建Go开发环境可以按照以下步骤进行: 1、下载最新的Go语言二进制包,可以从官网 https://golang.org/dl/ 下载。 2、将下载好的包解压缩到你想要安装的目录下,如 /usr/local/go。 3、添加环境变量,在终端中输入以下命令…...
一文搞懂SQL注入攻击
SQL注入攻击 1. 前言2. SQL注入简介3. SQL注入步骤4. 防范SQL注入 1. 前言 随着互联网的发展和普及,网络安全问题越来越突出,网络在为用户提供越来越多服务的同时,也要面对各类越来越复杂的恶意攻击。SQL注入(SQL Injection&…...

CCTV-TIME特别关注:首届医药港国际健康美食文化嘉年华
“食在广州 味在方舟”首届医药港国际健康美食文化嘉年华4月28日在健康方舟盛大开幕! 【央媒时代TOP中国时代周刊中国品牌万里行CCTV-TIME特别关注】健康美食、滋补靓汤、异国风情、非遗文化、治愈萌宠、灯光夜市、亲子玩乐、浪漫许愿树……五一长假,广州的这场精彩嘉年华活动…...

FE_TA不知道的CSS 换行系列【1】white-space
在W3C官方描述中,white-space主要有以下两个作用: 是否进行空格合并,以及控制空格合并的方式;是否在soft wrap opportunities(文本中可进行换行的断点位置)处进行文本换行。 从字面意思来看white-space即…...

matlab中计算标准差std函数
标准差 标准差(Standard Deviation)是离均差平方的算术平均数(即:方差)的算术平方根。 标准差是方差的算术平方根。标准差能反映一个数据集的离散程度。平均数相同的两组数据,标准差未必相同。 计算公式&…...
【操作系统】原语操作详解
基本概念 "原语"一词源于英文 “primitive” 或 “instruction”,意为 “原始的” 或 “基本的指令”。在计算机科学中,原语是一种基本的操作,它是不可分割的,要么全部执行成功,要么全部执行失败࿰…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...

给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]
报错信息:libc.so.6: cannot open shared object file: No such file or directory: #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...