这是一个简单的STM32 USB设备驱动例子,利用片内SRAM和USB OTG实现了RamDisk。
使用
STM32F105/7xx, STM32F2xx and STM32F4xx USB On-The-Go Host and Device library V2.2.0
STM32F4xx DSP and Standard Peripherals Library V1.6.1
在STM32F4DISCOVERY Discovery kit(STM32F407VGT6)上使用Keil 5.16编译,测试通过
经过简单移植可以工作在STM32F105/F107/F2/F3/F4 MCU上),STM32F0和STM32F7系列的兼容性未知
仅支持USB OTG FS模式工作
仅支持连续的RAM地址,比如在STM32F407VG上只能使用第一块128kb的SRAM,如果需要使用多块的需要加入二级映射机制
在usbd_storage_sram.c中
通过#define USB_RAMDISK_SIZE 设置存储大小(单位:字节)
数据存储在uint8_t STORAGE_Pool[USB_RAMDISK_SIZE]中,可以通过强制设置该全局变量的位置修改存储位置
经过测试在Windows7/Windos10/Android 5.1的设备上可以正常被识别、读取、写入,但是在Android设备上的格式化操作会失败,
原因未知
NOTE:
使用了STM32标准库的模板工程,请确保USB库和固件库位于..\..\..\Libraries\下
因为STM32USB 固件库的一处bug(usbd_usr.h line 34-36):
<code class="lang-cpp">#if ! defined (USE_STM32446_EVAL) && ! defined (USE_STM32469I_EVAL)
#include "lcd_log.h"</code>
需要确保
..\..\..\Utilities\STM32_EVAL\Common
目录的存在(需要从上述任意固件库中复制出来)。可以自行修复这个bug后去掉这个依赖项。
stm32ramdisk.zip
8.34MB
ZIP
89次下载
200字以内,仅用于支线交流,主线讨论请采用回复功能。