STM32 HAL库FLASH模拟U盘FATFS
1. 前期准备
安装好STM32CubeMX
安装好clion
实现功能:
使用SPI FLASH模拟U盘,并在电脑上打开该U盘可以看见通过FATFS创建的文件。
2. 创建项目
在已移植好文件系统的《FATFS》项目基础上,添加USB模拟U盘的功能。
- 配置
USB MSC设备
点击1处,选中后Device(FS),3处选择MSC大容量存储设备,4处改为4096与FLASH扇区大小保持一致,其他参数默认。
- 配置USB 时钟
USB时钟需设置为48MHz。
- 增加堆栈大小,防止溢出
3. 编辑代码
- 更改
USB驱动
找到usbd_storage_if.c文件,添加头文件,并添加全局变量:
#include "bsp_spi_flash.h"
#define STORAGE_LUN_NBR 1
#define STORAGE_BLK_NBR 256*8 //256*8扇区=8MByte
#define STORAGE_BLK_SIZ 4096 //每个扇区4096Byte
#define START_SECTOR 0 //开始扇区- 修改
USB容量获取函数STORAGE_GetCapacity_FS
int8_t STORAGE_GetCapacity_FS(uint8_t lun, uint32_t *block_num, uint16_t *block_size)
{
/* USER CODE BEGIN 3 */
*block_num = STORAGE_BLK_NBR;
*block_size = STORAGE_BLK_SIZ;
return (USBD_OK);
/* USER CODE END 3 */
}- 修改
USB读函数
int8_t STORAGE_Read_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 6 */
blk_addr+=START_SECTOR;
SPI_FLASH_BufferRead(buf, blk_addr*STORAGE_BLK_SIZ, blk_len*STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 6 */
}- 修改
USB写函数
int8_t STORAGE_Write_FS(uint8_t lun, uint8_t *buf, uint32_t blk_addr, uint16_t blk_len)
{
/* USER CODE BEGIN 7 */
uint32_t write_addr;
blk_addr+=START_SECTOR;
write_addr = blk_addr*STORAGE_BLK_SIZ;
SPI_FLASH_SectorErase(write_addr);
SPI_FLASH_BufferWrite((uint8_t *)buf,write_addr,blk_len*STORAGE_BLK_SIZ);
return (USBD_OK);
/* USER CODE END 7 */
}4. U盘测试
main.c中保留原来FATFS文件系统测试函数:
FATFS_FLASH_Test();- 运行代码,
FATFS成功创建RY.txt文件,串口输出如下。
USB插入PC,查看U盘内容,可看到FATFS文件系统创建的RY.txt
5. 小结
本章实现了使用SPI FLASH模拟U盘,并在U盘上创建了文件。
所属系列
从当前文章继续阅读它所在合集中的前后内容。
关于我和 Hugh 学嵌入式开发这件事 —— STM32 篇 第 16 / 17 篇
查看合集 > 本作品集内教程基于 [Hugh](https://rymcu.com/user/hugh) 的创作基础上进行修订发布 关于我和 Hugh 学嵌入式开发这件事
相关文章
优先推荐同专题、同标签和同作者内容,补足热门文章。
评论 0
登录 后参与评论
评论
成为第一个评论的人