文章目录

  • 前言
  • 一、使用env进行配置
  • 二、测试生成的工程,并解决问题
  • 三、下载运行
  • 总结

前言

学习如何在RT-Thread中让STM32F4读取U盘


一、使用env进行配置

1、使能USB HOST设备

2、使用USB HOST组件

3、使能文件系统

4、scons --target=mdk5生成工程

二、测试生成的工程,并解决问题

1、编译工程,发现有以下错误,基本上都是各种未定义,其实这些是因为工程的底层未完善,需要用CubeMX进行配置生成我们需要的代码

2、安装STM32CubeMX和STM32F4的HAL包就可以创建一个工程,具体配置如下

3、生成工程代码,打开工程,打开stm32f4xx_hal_msp.c文件,这个文件就是存放一些初始化硬件的函数,可以发现以下有关于USB的初始化函数

/**
* @brief HCD MSP Initialization
* This function configures the hardware resources used in this example
* @param hhcd: HCD handle pointer
* @retval None
*/
void HAL_HCD_MspInit(HCD_HandleTypeDef* hhcd)
{GPIO_InitTypeDef GPIO_InitStruct = {0};if(hhcd->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 Configuration    PA11     ------> 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();/* USB_OTG_FS 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 */}}/**
* @brief HCD MSP De-Initialization
* This function freeze the hardware resources used in this example
* @param hhcd: HCD handle pointer
* @retval None
*/
void HAL_HCD_MspDeInit(HCD_HandleTypeDef* hhcd)
{if(hhcd->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 Configuration    PA11     ------> USB_OTG_FS_DMPA12     ------> USB_OTG_FS_DP */HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);/* USB_OTG_FS interrupt DeInit */HAL_NVIC_DisableIRQ(OTG_FS_IRQn);/* USER CODE BEGIN USB_OTG_FS_MspDeInit 1 *//* USER CODE END USB_OTG_FS_MspDeInit 1 */}}

4、将上述的两个函数复制到项目工程stm32f4xx_hal_msp.c文件中,发现提示错误,编译后结果和最初遇到的错误一样

5、提示的未定义,要么是项目工程中没有这个结构体,要么就是有什么宏控制它使得没有将结构体加到代码中,可以通过全局搜索这个结构体,或者使用一个比较快的办法,在CubeMX生成的工程中直接goto到这个结构体,找到他具体位置

6、在我们项目工程中也打开这个.h文件查找一下是否有这个结构体,结果发现如果展开stm32f4xx_hal_msp.c文件想在他下面找是找不到的(出现某个变量、函数、结构体等等未定义,就需要在这个.c文件下找是否有对应头文件,没有包含对应头文件肯定会报错的),我们只能在STM32_HAL文件夹下的stm32f4xx_hal_hcd.c中强行打开对应头文件,结果发现是有这个结构体的。
7、细心的朋友会发现stm32f4xx_hal_hcd.c中的代码都是暗灰的未加入到工程中,而在CubeMX生成的工程中却不是这样,说明此处必有鬼,很容易能发现有一个宏未定义导致

8、这个好办,直接去stm32f4xx_hal_conf.h中抓鬼,毫无意外,取消掉HAL_HCD_MODULE_ENABLED注释,重新编译一次试试,结果令人惊喜,编译通过!

三、下载运行

1、插上U盘发现他识别了,使用文件系统命令都是可以的

2、传说支持热拔插,试了试貌似可以,但是没试多久就泼我一身冷水,有时候无法识别,要命的是只要有一次出现无法识别以后都不行了,必须重启才可以,完犊子!!!实际的项目是不可以出现这种问题的,所以干他…

总结

今天不敢躺尸,这传说的热拔插有点不可靠,得亲自上阵抓臭虫...

USB无法识别BUG解决方案传送门

RT-Thread:U盘读写相关推荐

  1. android OTG (USB读写,U盘读写)最全使用相关总结

    androidOTG (USB读写,U盘读写) 最全使用相关总结 简介 第一种读取方法:android推荐使用的通过endpoint的形式进行通信 第二种读取方法:像读你sdcard的形式来读你的U盘 ...

  2. rt thread studio使用QBOOT和片外flash实现OTA升级

    我们这里要使用单片机外部flash作为OTA的下载分区,外部flash硬件连接关系 PB3-->SPI3_CLK PB4-->SPI3_MISO PB5-->SPI3_MOSI PE ...

  3. RT Thread Free Modbus移植问题整理

    RT Thread Free Modbus移植问题整理 问题描述: 在读写寄存器中,写数据正常,只能读1个寄存器的值,多个值会异常. 在移植过程中发现串口(或RS485)数据接收长度异常. 一.环境描 ...

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

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

  5. Android USB OTG U盘读写相关使用最全总结

    Android USB OTG U盘读写相关使用最全总结 https://blog.csdn.net/qq_29924041/article/details/80141514 androidOTG ( ...

  6. 使用RT Thread设备框架封装一个I2C设备——DS3231

    使用RT Thread设备框架封装一个I2C设备--DS3231 前言 ENV配置 I2C测试 将ds3231封装成一个字符设备 结语 前言 学习rt thread的I2C的时候,恰巧手上的板子留了d ...

  7. 计算机向u盘拷贝速度慢,U盘读写拷贝速度慢的解决措施

    为什么U盘读写拷贝的速度这么慢?每次使用U盘拷贝一个文件都需要花上很长的时间才能复制成功,这究竟是怎么回事?是电脑问题?还是U盘问题?用户对这个问题也是深感疑惑,其实一般情况下,U盘出现读写拷贝速度慢 ...

  8. CUBEMX STM32F105RB U盘读写详细教程

    CUBEMX  STM32F105RB  U盘读写详细教程 abin 42817001 打开cubemx软件, 2.选择单片机型号,本文选stm32f105rb 3.设置RCC, 4.设置时钟 1 根 ...

  9. 关于RT thread系统节拍时钟的配置

    关于RT thread系统节拍时钟的配置                  -----本文基于rt-thread-3.1.3版本编写 首先,使用RTthread OS时,要配置(或者明白)它的系统节拍 ...

  10. rt thread 使用FAL遇到fal_init() undefined reference

    rt thread FAL 0.5版,之前有没有不知道,遇到一个坑. 在main.cpp里面已经 #include <fal.h> fal_init() 编译报错,说 fal_init() ...

最新文章

  1. java field setfont_Java JTextField.setFont方法代碼示例
  2. pku1384---Piggy-Bank(动态规划)
  3. 四、Java多人博客系统-2.0版本
  4. CVE-2012-1876 Internet Exporter堆溢出漏洞分析
  5. “leave the world behind”十一快乐出行
  6. lync 2013 企业版部署 (四)安装office web app server
  7. go run 和 go build 和 go install 命令区别
  8. 安宁计算机学院,滁州学院张燕咏、安宁两位教授应邀来我院指导工作
  9. [Leetcode][第39题][JAVA][组合总和][回溯][dfs][剪枝]
  10. SSH pts 虚拟终端
  11. CSliderCtrl鼠标点击精确定位
  12. 罗永浩关联直播交易案遭“问停”;中国量子计算原型机“九章”问世;pip 20.3 发布 | 极客头条...
  13. 一分钟了解自动化测试
  14. 国内统一Android应用市场,最全最干净的安卓应用市场
  15. 阿里云CentOS服务器搭建静态网站(零基础)
  16. 主板电源开关接口图解_图解:主板电线接法(电源开关、重启等)
  17. serv-u 用户使用sftp登录 时间显示不对_宜家中国电商化之路步履蹒跚 或因忽视消费者的使用习惯...
  18. 开源库TinyXML2简介及使用
  19. zotero+谷歌翻译不能用,最后的解决方案!
  20. 趣图 | 程序员的白天 vs 夜晚?

热门文章

  1. 分析国内IT各领域软件企业的挣钱实力
  2. 机房环境监控需要注意的事项
  3. Esper学习之十三:EPL语法(九)
  4. 斐讯N1的OpenWrt设置(含N1当主路由兼AP模式)
  5. macOS Redis 安装
  6. 饥荒联机云服务器_WeGame饥荒联机版专用服务器多层世界搭建教程
  7. java小组的队名,小组队名和口号
  8. rt-link源码笔记,适用于自定义点对点的通信协议
  9. 2021年安全员-B证报名考试及安全员-B证考试报名
  10. 计划赶不上变化,为什么还要计划呢?