记录下SPI Flash U盘实现过程中踩过的坑,与您分享。

前提条件是,需要先将SPI Flash 配置到elm fal文件系统,并挂载成功。如下图

然后开始配置USB

1,在CubeMX,选择SUB_OTG_FS

2 选择USB Device

3,确认USB时钟为48MHz

4,生成代码,然后打开生成的工程,如下

【1】将工程中void SystemClock_Config(void)的代码更新到RT-thread 平台board.c相同的函数内替换掉原有代码。

【2】将生成的USB 引脚初始化程序复制到board.c 内。

void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(pcdHandle->Instance==USB_OTG_FS){/* USER CODE BEGIN USB_OTG_FS_MspInit 0 *//* USER CODE END USB_OTG_FS_MspInit 0 */__HAL_RCC_GPIOA_CLK_ENABLE();/**USB_OTG_FS GPIO ConfigurationPA11     ------> USB_OTG_FS_DMPA12     ------> USB_OTG_FS_DP*/GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);/* Peripheral clock enable */__HAL_RCC_USB_OTG_FS_CLK_ENABLE();/* Peripheral interrupt init */HAL_NVIC_SetPriority(OTG_FS_IRQn, 0, 0);HAL_NVIC_EnableIRQ(OTG_FS_IRQn);/* USER CODE BEGIN USB_OTG_FS_MspInit 1 *//* USER CODE END USB_OTG_FS_MspInit 1 */}
}void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
{if(pcdHandle->Instance==USB_OTG_FS){/* USER CODE BEGIN USB_OTG_FS_MspDeInit 0 *//* USER CODE END USB_OTG_FS_MspDeInit 0 *//* Peripheral clock disable */__HAL_RCC_USB_OTG_FS_CLK_DISABLE();/**USB_OTG_FS GPIO ConfigurationPA11     ------> USB_OTG_FS_DMPA12     ------> USB_OTG_FS_DP*/HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);/* Peripheral interrupt Deinit*/HAL_NVIC_DisableIRQ(OTG_FS_IRQn);/* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 *//* USER CODE END USB_OTG_FS_MspDeInit 1 */}
}

5,配置RT-Thread平台代码

【1】在RT-thread studio中打开RT-Thread Settings,然后在右上角的搜索栏内输入USB

【2】选择使用USB,设置如下

注意,磁盘名是指SPI Flash 文件系统分区时指定的名称,将来USB组件需要通过该名称查找注册的设备进行关联

系统挂载分区时需要用到此名字

6,打开board/Kconfig,加入如下代码后保存。

       config BSP_USING_USBDbool "Enable OTGFS as USB device"select RT_USING_USB_DEVICEdefault nconfig BSP_USBD_EP_ISOCbooldefault ndepends on BSP_USING_USBDconfig BSP_USING_STM32_SDIObool "Enable SDIO"select RT_USING_SDIOselect PKG_USING_STM32_SDIOdefault nhelpBSP_USING_STM32_SDIO use drv_sdio_adapter.c,andBSP_USING_SDIO use drv_sdio.c   config BSP_USING_ON_CHIP_FLASHbool "Enable On Chip FLASH (LittleFS)"select BSP_USING_FS                                  select RT_USING_DFSselect RT_USING_DFS_ROMFSselect RT_USING_MTD_NOR                   select PKG_USING_FALselect FAL_USING_AUTO_INITselect FAL_PART_HAS_TABLE_CFGselect PKG_USING_LITTLEFSdefault n

7,在RT-Thread Settings中开启USBD功能选项

8,保存RT-Thread Settings更新配置后,重新编译

硬件上确保USB线序正确,D+线配置成上拉或者加上拉电阻。然后重新在程序,将此USB连线插入电脑,几秒钟后显示如下

然后打开U盘,新建文件text.txt,然后操作如下

保存后关闭文件,拔出U盘

在finsh命令端口操作如下

说明新建文件已经成功保存到SPI flash内。

在RT-Thread STM32F407平台下配置SPI flash为U盘相关推荐

  1. Win7平台下配置Sublime Text2 的C++编译环境

    Win7平台下配置Sublime Text2 的C++编译环境 Sublime Text 是一个跨平台的编辑器,之前在 Mac 上成功配置了 C++ 在 Sublime Text 的编译环境,接下来介 ...

  2. 上海航芯技术分享 | 基于SPI Flash的U盘程序,从STM32F103到ACM32F403

    前言 本项目是以SPI Flash(如W25Q128等)存储元件作为存储单元,MCU主控完成USB接口通信并根据SCSI协议实现U盘功能.其结构如下图所示: SPI Flash部分移植 SPI功能部分 ...

  3. stm32 cubemx usb spi flash w25q128 u盘调试笔记

    真的太简单了,十分钟就搞定 参考文章 我卡住了几天,最后发现delay函数的问题,去掉就好了.(评论大佬解释了这一现象) 步骤如下 使用cube mx 生成基本代码 调试spi flash 调试usb ...

  4. 基于STM32F103的USB学习笔记38 - Mass Storage之SPI Flash做U盘

    1. 将整个Flash作为U盘的空间 Flash大小为4MB,SPI NorFlash的Sector大小为4KB,所以MSC_MEMORY_BLOCK_SIZE设置为4096.. 3个函数的实现如下, ...

  5. Yeelink平台使用——远程控制 RT Thread + LwIP+ STM32

    1.前言     [2014年4月重写该博文]     经过若干时间的努力终于搞定了STM32+LwIP和yeelink平台的数据互通,在学习的过程中大部分时间花在以太网协议栈学习上,但是在RT Th ...

  6. (实测可用)STM32CubeMX教程-STM32L431RCT6开发板研究串口通信(SPI flash)

    一.开发板平台简介: 1.开发板资源简介 (1)开发板主芯片型号:STM32L431RCT6 (2)开发板主芯片封装:LQFP-64_10x10x05P (3)开发板主芯片内核:ARM® Cortex ...

  7. stm32f407单片机rt thread 片外spi flash OTA升级配置示例

    参考地址https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/ 第一步,生成Boot ...

  8. 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!)

    [实验名称] 快速配置Windows 2003平台下实现 IIS(WEB)站点的安全(SSL加密技术!) [实验基本概念] A. 对于公用信息--------------------www.Sohu. ...

  9. Yolo-v2_ Windows平台下如何配置darknet-yolov2?(安装CUDA)

    Yolo-v2_Windows平台下如何配置? 官方链接:How to compile on Windows 我的win10配置信息: VisualStudio2015 opencv-3.3.0-vc ...

最新文章

  1. Unit9 Mangement Strategies—— I
  2. 1095. 山脉数组中查找目标值(三分+二分)
  3. 为什么不建议学python贴吧_为什么那么多自学Python的后来都放弃了,总结下来就这些原因...
  4. 字符串哈希-BKDRHash
  5. Docker添加或者更改容器的端口映射
  6. 联想高性能服务器,Lenovo|EMC推出高性能4x4TB服务器级NAS
  7. springcloud 服务网关Zuul实战(一)基本路由配置
  8. ajax 实时进度_如何做好项目进度管理
  9. 实现简单 codeigniter 缓存 (cache)
  10. SubscriptionState分析
  11. BPSK、8PSK、QPSK、16QAM、64QAM区别与联系
  12. 战地1服务器怎么显示fps,战地1怎么显示FPS帧数_战地1显示FPS帧数方法图文攻略_玩游戏网...
  13. 晶圆划片如何提高切割品质?陆芯半导体告诉你
  14. 毕业了,开始新的生活!
  15. YYC松鼠短视频系统V2.1版本+后台分类无法编辑的 bug造成错误
  16. #806.宝箱 思维
  17. 网络曝光华为自研操作系统“鸿蒙” (图)
  18. 设计模式—— 四:接口隔离原则
  19. 晨哥真有料丨心理学“踢猫效应”,拒绝传递负能量
  20. 42.设备树---DTS的语法

热门文章

  1. 关于蓝牙的知识,蓝牙5.0和蓝牙5.2
  2. 店铺管理系统项目总结
  3. 2021万向区块链黑客马拉松圆满收官
  4. 内容策展的4个成功案例
  5. Android R input (四) 之 InputChannel之发送事件处理反馈
  6. iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
  7. 词霸天下---202 词根【-tribut- = -tribu-给 】
  8. CentOS7中使用yum安装php5.6的方法
  9. 这款TWS蓝牙耳机颜值与实用性到底怎么样?
  10. 【面试题】1384- 分享 44 道 JS 难题,做对一半就是高手