STM32使用U盘进行固件更新

        前面提过串口IAP升级可以方便的进行不拆机固件更新

STM32串口IAP-CSDN博客文章浏览阅读577次,点赞20次,收藏6次。那么有哪些便捷的升级方式呢,其实有很多,比较常见的比如手机软件更新,很典型的远程升级案例。前面说过“修改STM32链接脚本可以修改程序写入闪存的起始地址”,假如我们设定程序默认烧录到0x08008000上,没问题,但是程序无法启动,因为它总是从0x08000000开始,然后从0x08000004(默认中断向量表地址)取复位中断向量的地址,很遗憾这里面的地址不对所以程序就这么挂了。事实上完整的IAP可以做的很丰富,可以使用不同的触发升级方式,也可以使用不同的通信接口,还可以使用不同的传输协议。https://blog.csdn.net/u011436603/article/details/135895576?spm=1001.2014.3001.5502        但是吧,利用串口升级必须还得带上电脑和通信线缆,还是不太方便,下面就来讲讲更方便的U盘升级。

        首先你得了解下什么是USB HOST和USB SLAVE,我们使用的U盘就是USB SLAVE,而与USB SLAVE进行通信的就是USB HOST,两个SLAVE间是不能通信的。所以要想支持U盘接入,那么你的单片机就必须得支持USB HOST,像常见的STM32F103就是不支持的,但STM32F105,F107等互联型的就可以,具体的可以查阅选型手册或使用STM32Cube去查看。

        下面以STM32F407ZET6为例来描述

        首先,我们得先明确一下,使用U盘升级本质上也是一种IAP升级方式,所以程序还是分为两部分,底层和应用层,其中应用设置偏移地址即可,而底层负责程序跳转以及升级控制。

        先简述一下步骤

  1. 将应用层固件拷入U盘
  2. 将U盘插入电路板的USB接口
  3. 单片机根据一定规则检索有效升级固件
  4. 单片机读取固件内容并写入到内置Flash偏移地址处
  5. 写入完毕后跳转运行

        上面简单描述了下升级的过程,实际还需要考虑升级的时机,有无U盘插入时的处理,有U盘但无有效固件的处理等,暂不做详细展开。

        相比串口IAP的话,需要做的工作其实主要有两点

  •  USB驱动的实现
  •  文件系统的实现 

        实现USB驱动才能识别并操作U盘,有文件系统支持才能操作文件,很好理解。

        先说USB驱动,官方有USB标准库,需要将其添加到工程中。因为我们需要使用的是USB HOST,因此不需要添加USB_DEVICE的相关文件,具体需要添加的内容见下图

        接下来就是关于USB的应用了,首先是初始化,因为使用USB HOST,所以需要使用库函数提供的USBH_Init函数。

void USBH_Init(USB_OTG_CORE_HANDLE *pdev,
               USB_OTG_CORE_ID_TypeDef coreID,
               USBH_HOST *phost,               
               USBH_Class_cb_TypeDef *class_cb, 
               USBH_Usr_cb_TypeDef *usr_cb)
{
     
  /* Hardware Init */
  USB_OTG_BSP_Init(pdev);  
  
  /* configure GPIO pin used 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/502218.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

位置_分布式处理和数据的MVA考虑——可持续架构(七)

前言 理解分布式进程和数据的影响,可以使团队尚在未具备处理分布式能力的时候,做出更好的MVA决策。云计算并不能消除分布式问题,反而它可能会使问题更难解决,因为它隐藏了底层基础设施。改变数据位置可能会对应用程序逻辑产生微妙…

基于单片机的温度控制器系统仿真设计

**单片机设计介绍,基于单片机的温度控制器系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的温度控制器系统仿真设计概要主要包括以下几个关键方面:硬件设计、软件设计、系统仿真与…

颜值测评打分微信小程序AI智能颜值测评小程序搭建流量主收益

功能简介: 1.该小程序是AI智能颜值测评 2.可配合流量主推广,广告变现 3.后台含有区间关键词,颜值分析管理可用于公众号吸粉 (保存海报上的二维码换成公众号二维码) 4.(美容院,整形机构活动,颜值评分X分以上可到店获…

安卓手机ip地址怎么切换?简单几步轻松实现

在移动互联网时代,安卓手机作为我们日常生活中不可或缺的一部分,扮演着越来越重要的角色。而在网络世界中,IP地址则是每个设备的标识,它决定了设备在网络中的位置与身份。然而,有时我们可能出于隐私保护、网络测试或其…

PTA L2-040 哲哲打游戏

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另…

Jmeter —— 接口之间关联调用(获取上一个接口的返回值作为下一个接口的请求参数)

正则表达式: 具体如何操作: 1. 草稿保存, 此请求的响应数据的id 为发布总结的请求参数draft_id 2. 草稿保存的响应数据 3.在草稿保存的请求中,添加后置处理器- 正则表达式提取器, 提取响应数据的id信息 4. 发布总结请…

Linux+ARM 简单环境检测---软件部分

1、前言 这个是我学习linuxARM的在做的第一个软硬件结合项目,以往的类似这种整体类项目还是光单片机的时候,linux软件部分学习了差不多快一年了,因为各种事情耽搁,这个项目一直没有静下心来完成,不过终于哈哈哈哈搞完了…

【Java】:封装和包

目录 1.封装的概念 2.访问限定符号 3.封装扩展之包 3.1包的概念 3.2导入包中的类 3.3自定义包 3.4常见的包 1.封装的概念 面向对象程序三大特性:封装、继承、多态。何为封装?简单来说就是套壳屏蔽细节。 比如:对于电脑这样一个复杂的…

elementui的table根据是否符合需求合并列

<el-table :data"tableData" border style"width: 100%;" :span-method"objectSpanMethodAuto"><!-- 空状态 --><template slot"empty"><div><img src"/assets/images/noData.png" /></di…

【AcWing】蓝桥杯集训每日一题Day7|贡献法|4261.孤独的照片(C++)

4261.孤独的照片 AcWing 4261. 孤独的照片&#xff08;每日一题&#xff09; - AcWing难度&#xff1a;简单时/空限制&#xff1a;1s / 64MB总通过数&#xff1a;9889总尝试数&#xff1a;26088来源&#xff1a;USACO 2021 December Contest Bronze算法标签贡献法乘法原理 题目…

强烈推荐!13K star,一款Python开源自动化抢票神器!

马上就春节了&#xff0c;你抢到回家的票了吗&#xff1f; 别急&#xff0c;今天给大家推荐一款开源、功能强大且实用的12306抢票工具&#xff01; 1、介绍 该项目名为py12306&#xff0c;由 GitHub 用户 pjialin 创建和维护&#xff0c;用Python语言开发。 项目目前在GitHu…

【idea快捷键】idea开发java过程中常用的快捷键

含义win快捷键mac快捷键复制当前行或选定的代码块Ctrl DCommand D通过类名快速查找类Ctrl NCommand N通过文件名快速查找文件Ctrl Shift NCommand Shift N通过符号名称快速查找符号&#xff08;类、方法等&#xff09;Ctrl Alt Shift NCommand Shift O跳转到声明C…

精准定制:利用本地词库优化Jieba分词,提升景区评论数据LDA建模效果

引言&#xff1a; 在进行景区评论数据的LDA建模时&#xff0c;精确的分词是至关重要的。然而&#xff0c;通用的分词工具在处理特定领域的文本时可能表现不佳。针对这一挑战&#xff0c;本文探讨了如何利用本地词库&#xff0c;特别是搜狗词库中关于旅游领域的专业词汇&#x…

virtualbox 设置虚拟机 centos 网络

在VirtualBox中为运行CentOS系统的虚拟机配置网络连接&#xff0c;您通常可以选择以下几种网络模式之一&#xff0c;以满足不同的网络需求&#xff1a; NAT (Network Address Translation): 功能&#xff1a;允许虚拟机通过宿主机的网络连接访问互联网&#xff0c;同时也可以从…

【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了 原因&#xff1a;vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({{ goal }} - {{ index }})复制到第一个dom元素…

Python基础:标准库 -- math (数学函数)

1. 官方文档 math --- 数学函数 — Python 3.12.2 文档 cmath --- 关于复数的数学函数 — Python 3.12.2 文档 Python 中&#xff0c;可以使用内置的数学运算符&#xff0c;例如加法 ()、减法 (-)、除法 (/) 和乘法 (*) 进行简单的数学运算。不过&#xff0c;更高级的运算&a…

SpringCloud下的微服务应用技术(结尾篇)

六. Feign远程调用 6.1 替代RestTemplate RestTemplate调用问题&#xff1a;代码可读性差&#xff0c;参数复杂且URL难维护。 Feign是一个声明式的HTTP客户端&#xff0c;官方地址&#xff1a;GitHub - OpenFeign/feign: Feign makes writing java http clients easier 它可…

力扣热门算法题 128. 最长连续序列,134. 加油站,143. 重排链表

128. 最长连续序列&#xff0c;134. 加油站&#xff0c;143. 重排链表&#xff0c;每题做详细思路梳理&#xff0c;配套Python&Java双语代码&#xff0c; 2024.03.26 可通过leetcode所有测试用例。 目录 128. 最长连续序列 解题思路 完整代码 Python Java 134. 加油…

Docker 部署 FRP 内网穿透 实现端口映射

Frp 是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。 官网地址&#xff1a;https://github.com/fatedier/frp 准备工作…

VS2019连接MySQL

VS2019连接MySQL 下载MySQL Connector/C配置头文件&#xff0c;库文件路径配置头文件路径配置库的路径复制dll文件 MySQL的用户设置将权限赋值给新用户 编写代码往数据库写入 老师布置的作业让我们用VS2019连接MySQL实现一个小型的日志系统&#xff0c;中间踩了很多的坑&#x…