STM32移植USB驱动读写U盘

最近解决了一直困扰我的STM32的U盘读写驱动问题。话说2011年做油田项目时,看到竞争对手厂家升级程序带个电脑去现场插上就能升级,而我只能打开产品外壳用ISP的方式下载。挺眼馋的,后来自己也尝试想搞一搞,奈何公司里没啥牛人,自己摸索起来USB驱动困难重重。最近做项目终于解决这个困扰已久的问题,也幸好有了万能的cubeMX。用cubeMS生成带USB驱动及FATFS的工程再移植到自己的项目工程里就很轻松的搞定了。以STM32F407为例,详细记录一下生成过程。

1、CUBEMX配置:必须用外部晶振,给USB的频率必须为48MHZ。

2、选择“USB_OTG_FS”,这个是标准USB速度(12MHZ),如果选择“USB_OTG_HS”这个高速USB功能则需要外接USB芯片。

3、FATFS的关联配置如下

4、USB_HOST设置,其中VBUS的控制引脚如果电源口没接MOS管控制电源,则随便设置一个没用到的IO口即可。

5、生成的工程如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 3
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在使用STM32F407芯片时,可以通过HAL库来驱动U盘。以下是基本步骤: 1. 在CubeMX中配置USB OTG FS模块并启用MSC存储器类。 2. 在HAL库中包含相应的头文件和库文件。 3. 初始化USB OTG FS模块并启用MSC存储器类。 4. 在main函数中编写读写U盘的代码。 以下是一个简单的例子: ```c #include "stm32f4xx_hal.h" #include "usb_host.h" #define USB_TIMEOUT 1000 USBH_HandleTypeDef hUSB_Host; int main(void) { HAL_Init(); /* Initialize USB Host Library */ USBH_Init(&hUSB_Host, USBH_UserProcess, 0); /* Add Supported Class */ USBH_RegisterClass(&hUSB_Host, USBH_MSC_CLASS); /* Start Host Process */ USBH_Start(&hUSB_Host); while (1) { /* Handle USB Host Background Tasks */ USBH_Process(&hUSB_Host); /* Check if MSC Device is ready */ if (USBH_MSC_IsReady(&hUSB_Host)) { /* Read Data from U Disk */ uint8_t buf[512]; uint32_t read_len; if (USBH_MSC_Read(&hUSB_Host, buf, 0, sizeof(buf), USB_TIMEOUT, &read_len) == USBH_OK) { /* Do something with the read data */ } /* Write Data to U Disk */ uint32_t write_len; if (USBH_MSC_Write(&hUSB_Host, buf, 0, sizeof(buf), USB_TIMEOUT, &write_len) == USBH_OK) { /* Do something after writing data */ } } } } ``` 在这个例子中,我们使用了USBH_MSC_Read和USBH_MSC_Write函数来读写U盘数据。这些函数将数据写入或从U盘读取,并返回操作结果。当U盘连接并准备就绪时,我们可以在while循环中进行读写操作。 需要注意的是,U盘读写速度取决于U盘本身的速度,以及USB OTG FS模块的配置和性能。如果出现性能问题,可以尝试调整USB OTG FS模块的配置或使用更高速的U盘

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值