-
大小: 11.29MB文件类型: .zip金币: 1下载: 0 次发布日期: 2023-07-22
- 语言: 其他
- 标签: stm32 bootloader U盘 IAP
资源简介
网上很多关于bootloader的例程,一直没找到利用U盘更新的,这里提供一个通过U盘更新APP程序的例程,测试环境是ALIENTEK STM32F407开发板。
其中值得注意的是U盘中断问题,更新完程序后要及时关闭中断跳转到APP后才能正常运行,否则可能会死在上有中断未处理的地方。
代码片段和文件信息
#include “string.h“
#include “exfuns.h“
#include “fattester.h“
#include “malloc.h“
#include “usart.h“
//////////////////////////////////////////////////////////////////////////////////
//FATFS 扩展代码
//////////////////////////////////////////////////////////////////////////////////
#define FILE_MAX_TYPE_NUM 7 //最多FILE_MAX_TYPE_NUM个大类
#define FILE_MAX_SUBT_NUM 4 //最多FILE_MAX_SUBT_NUM个小类
//文件类型列表
u8*const FILE_TYPE_TBL[FILE_MAX_TYPE_NUM][FILE_MAX_SUBT_NUM]=
{
{“BIN“} //BIN文件
{“LRC“} //LRC文件
{“NES“} //NES文件
{“TXT““C““H“} //文本文件
{“WAV““MP3““APE““FLAC“}//支持的音乐文件
{“BMP““JPG““JPEG““GIF“}//图片文件
{“AVI“} //视频文件
};
///////////////////////////////公共文件区使用malloc的时候////////////////////////////////////////////
FATFS *fs[_VOLUMES];//逻辑磁盘工作区.
FIL *file; //文件1
FIL *ftemp; //文件2.
UINT brbw; //读写变量
FILINFO fileinfo; //文件信息
DIR dir; //目录
u8 *fatbuf; //SD卡数据缓存区
///////////////////////////////////////////////////////////////////////////////////////
//为exfuns申请内存
//返回值:0成功
//1失败
u8 exfuns_init(void)
{
u8 i;
for(i=0;i<_VOLUMES;i++)
{
fs[i]=(FATFS*)mymalloc(SRAMINsizeof(FATFS)); //为磁盘i工作区申请内存
if(!fs[i])break;
}
file=(FIL*)mymalloc(SRAMINsizeof(FIL)); //为file申请内存
ftemp=(FIL*)mymalloc(SRAMINsizeof(FIL)); //为ftemp申请内存
fatbuf=(u8*)mymalloc(SRAMIN512); //为fatbuf申请内存
if(i==_VOLUMES&&file&&ftemp&&fatbuf)return 0; //申请有一个失败即失败.
else return 1;
}
//将小写字母转为大写字母如果是数字则保持不变.
u8 char_upper(u8 c)
{
if(c<‘A‘)return c;//数字保持不变.
if(c>=‘a‘)return c-0x20;//变为大写.
else return c;//大写保持不变
}
//报告文件的类型
//fname:文件名
//返回值:0XFF表示无法识别的文件类型编号.
// 其他高四位表示所属大类低四位表示所属小类.
u8 f_typetell(u8 *fname)
{
u8 tbuf[5];
u8 *attr=‘\0‘;//后缀名
u8 i=0j;
while(i<250)
{
i++;
if(*fname==‘\0‘)break;//偏移到了最后了.
fname++;
}
if(i==250)return 0XFF;//错误的字符串.
for(i=0;i<5;i++)//得到后缀名
{
fname--;
if(*fname==‘.‘)
{
fname++;
attr=fname;
break;
}
}
strcpy((char *)tbuf(const char*)attr);//copy
for(i=0;i<4;i++)tbuf[i]=char_upper(tbuf[i]);//全部变为大写
for(i=0;i {
for(j=0;j {
if(*FILE_TYPE_TBL[i][j]==0)break;//此组已经没有可对比的成员了.
if(strcmp((const char *)FILE_TYPE_TBL[i][j](const char *)tbuf)==0)//找到了
{
return (i<<4)|j;
}
}
}
return 0XFF;//没找到
}
//得到磁盘剩余容量
//drv:磁盘编号(“0:“/“1:“)
//total:总容量 (单位KB)
//free:剩余容量 (单位KB)
//返回值:0正常.其他错误代码
u8 exf_getfree(u8 *drvu32 *totalu32 *free)
{
FATFS *fs1;
u8 res;
u32 fre_clust=0 fre_sect=0 tot_sect=0;
//得到磁盘信息及空闲簇数量
res =(u32)f_getfree((const TCHAR*)drv (DWORD*)&fre_clust &fs1);
if(res==0)
{
tot_sect=(fs1->n_fatent-2)*fs1->csize; //得到总扇区数
fre_sect=fre_clust*fs1->csize; //得到空闲扇区数
#if _MAX_SS!=512 //扇区大小不是512字节则转换为512字节
tot_sect*=fs1->ssize/512;
fre_sect*=fs1->ssize/512;
#endif
*t
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-09-28 16:54 bootloader测试成功\
文件 711 2015-09-29 10:32 bootloader测试成功\readme.txt
目录 0 2015-09-28 14:55 bootloader测试成功\U盘bootloader\
目录 0 2015-09-28 12:36 bootloader测试成功\U盘bootloader\CORE\
文件 109142 2014-07-17 21:52 bootloader测试成功\U盘bootloader\CORE\core_cm4.h
文件 22735 2014-07-17 21:52 bootloader测试成功\U盘bootloader\CORE\core_cm4_simd.h
文件 29605 2014-08-02 00:12 bootloader测试成功\U盘bootloader\CORE\startup_stm32f40_41xxx.s
目录 0 2015-09-28 16:28 bootloader测试成功\U盘bootloader\FATFS\
目录 0 2015-09-29 10:44 bootloader测试成功\U盘bootloader\FATFS\exfuns\
文件 3452 2015-09-29 10:44 bootloader测试成功\U盘bootloader\FATFS\exfuns\exfuns.c
文件 1564 2014-08-29 15:13 bootloader测试成功\U盘bootloader\FATFS\exfuns\exfuns.h
文件 7722 2014-08-29 15:14 bootloader测试成功\U盘bootloader\FATFS\exfuns\fattester.c
文件 1225 2014-05-15 17:20 bootloader测试成功\U盘bootloader\FATFS\exfuns\fattester.h
文件 4652 2015-09-29 10:44 bootloader测试成功\U盘bootloader\FATFS\exfuns\mycc936.c
目录 0 2015-09-29 10:42 bootloader测试成功\U盘bootloader\FATFS\src\
文件 7340 2015-09-29 10:42 bootloader测试成功\U盘bootloader\FATFS\src\diskio.c
文件 2567 2014-01-15 00:31 bootloader测试成功\U盘bootloader\FATFS\src\diskio.h
文件 156975 2014-08-29 15:02 bootloader测试成功\U盘bootloader\FATFS\src\ff.c
文件 13391 2014-07-25 11:34 bootloader测试成功\U盘bootloader\FATFS\src\ff.h
文件 9978 2015-09-12 11:55 bootloader测试成功\U盘bootloader\FATFS\src\ffconf.h
文件 706 2015-09-12 11:55 bootloader测试成功\U盘bootloader\FATFS\src\integer.h
目录 0 2015-09-28 12:36 bootloader测试成功\U盘bootloader\FWLIB\
目录 0 2015-09-28 12:36 bootloader测试成功\U盘bootloader\FWLIB\inc\
文件 6924 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\misc.h
文件 32880 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_adc.h
文件 27318 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_can.h
文件 2416 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_crc.h
文件 14481 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_cryp.h
文件 14946 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_dac.h
文件 4296 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_dbgmcu.h
文件 12977 2014-08-01 23:18 bootloader测试成功\U盘bootloader\FWLIB\inc\stm32f4xx_dcmi.h
............此处省略534个文件信息
相关资源
- 智能农业大棚stm32 库管系统
- Huawei_LiteOS_秉火STM32F103_20181126
- stm32f107ptp移植程序
- stm32mp3模块
- STM32407_UCOSIII_LWIP
- 基于固件库的STM32F103ZET6工程模板ARM
- STM32F407编码器
- STM32 STM32F103C8T6 三星S6D05A1_TFTLCD_32048
- 正点原子STM32F407探索者PCB图+原理图
- 基于STM32的智能管家门控系统设计与实
- STM32F407 USB Device HID Full Speed 例程
- 程序是STM32和陀螺仪的I2C通信程序
- 零死角玩转STM32(完整打包)
- 带显示的MAX31865读取PT200测温stm32平台
- 舵机控制TIM1
- STM32F207数据手册官方版
- 基于STM32ZET6正点原子战舰板的IIC接口
- DAC8562配套资料
- stm32原理图,pcb图
- STM32 pcb图带wifi接口,rc522接口
- stm32f10x中文参考手册231483
- 项目综合:stm32机械臂完整程序
- ina226 stm32f4
- stm32F103GRBL系统脱机移植带屏幕控制
- stm32 寄存器版开发教程
- STM32 人脸识别 战舰开发板 测试通过
- 基于STM32F104的寻迹避障小车设计源码
- 基于STM32F4的US100超声波传感器测距
- 基于stm32的字符识别卡在内存上了
- 机智云APP控制STM32战舰V3的LED和蜂鸣器
评论
共有 条评论