stm32将flash虚拟成U盘来下载程序

本文介绍了如何将STM32单片机的Flash模拟为U盘,以便通过USB接口进行固件下载。首先,通过设置一个外部输入引脚条件决定启动时进入U盘模式还是运行程序。接着,利用IAP(In-Application Programming)实现程序跳转,定义了跳转地址。之后,创建了一个简单的LED闪烁程序并生成bin文件。最后,将bin文件复制到STM32的特定区域,通过改变外部引脚状态触发程序运行,实现固件更新。
摘要由CSDN通过智能技术生成


经过将stm32的内部flash做成U盘以后,我一直在思考可不可以使我的程序脱离下载器下载呢?也就是说在我没带下载器,也没有带340串口的时候,我写了个程序想立刻玩一玩看看效果。现在用的芯片是103的c8t6,反正,最小的操作空间是1k,也就是一个扇区。我知道这个FAT32文件系统也是从最开始的最开始的指定控件去存放的,那么我只要把程序的开始运行地址给跳转到FAT32文件系统开始操作的地址即可。

基础工程准备

首先准备一个flashU盘的工程,可以直接下载我的链接工程
当然,我也出了制作教程,看我写的文章即可
ykun1

修改进入U盘的条件

首先要确定的一个条件就是,当芯片启动时需要满足何种条件接入电脑的usb芯片会虚拟出U盘,或者说直接运行bin文件。
这时候我想到了一个最简单方法就是通过添加一个引脚的输入,使得在芯片启动后直接读取引脚的高低电平,如果为高就进入U盘模式,如果为低就跳转运行bin文件即可。
进入cubemx随便添加一个PB13作为这个功能的引脚,重新生成代码后展开。
ykun2

添加IAP跳转代码

这里的跳转地址有必要说明一下,(字有点丑请勿介意)芯片内部的flash区域被分成了四个区域,像我们平时用的顶多就是一个芯片厂商提供的bootloader以及用户写程序的部分,但是我想要一个跳转的效果的话就得分区域,其中文件系统部分是由电脑进行初始化的。
ykun3
接下来将跳转部分的代码添加一下;其中跳转地址有必要说明一下,U盘通过电脑格式化以后显示我的U盘的可用空间为25K,而我这块芯片型号stm32f103c8t6的总内存大小为64k;又因为第1k的地址为0x08000000, 所以计算出第前面39k中第39k的地址为0x08009800,所以后面25k的起始地址为0x08009C00;

typedef  void (*pFunction)(void);
#define ApplicationAddress 0x08009C00  //跳转地址
uint32_t JumpAddress;
pFunction Jump_To_Application;

void ProgramIapJump()
{
   
	__ASM(</
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

you~link

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值