基于STM32F767的Keil CMSIS组件使用——文件系统之USB

实现文件系统控制U盘

  1. 使用Keil新建项目,自动跳转至【Manage Run-Time Environment】;
  2. 将USB版本选择为MDK-Pro;
  3. 选择【File System-CORE】,配置【File System-Driver-USB】为1;
  4. 选择【USB-CORE】,配置【USB-Host】为1,并选择【USB-Host-MSC】;
  5. 选择【CMSIS-CORE】、【CMSIS-RTOS2(API)-Keil RTX5】
  6. 选择【Device-Startup】
  7. 选择【CMSIS-Driver-USB Host(API)-High-Speed】
  8. 剩余部分按照提示选择即可。选择完成后点击OK,自动启动CubeMX。
  9. 如下界面,点击Yes。进入Cube MX配置

  10. 选择【Connectivity-USB_OTG_FS】,【Mode】选择【Host_Only】,SOF、VBUS可不选。【NVIC Setting】中Enable【USB On The Go FS global interrupt】。其他默认不变,配置如下图:

  11. 选择【System Core-NVIC-Code generation】取消【USB On The Go FS global interrupt】的【Generate IRQ handler】,如下图:

  12. 修改时基源:选择【System Core-SYS】下【Timebase Source】,修改为非冲突定时器如TIM6
  13. 配置时钟:点击【System Core-RCC】,【High Speed Clock(HSE)】选择Crystal/Ceramic Resonator。切换到【Clock Configuration】配置时钟树,弹出自动配置提醒如下图:

  14. 选择No。时钟树配置如下图,其余时钟警告取允许的最大值即可。

  15. 点击【GENERATE CODE】生成代码。弹出如下窗口,手动关闭即可。关闭CubeMX。

  16. 回到Keil,弹出如下图提示,点击是,导入修改。

  17. 配置文件系统:打开【Project】栏选择【File System】——【FS_Config.c】,配置FS_INITIAL_CDRIVE值为7
  18. 进入【Options for Target】选择AC5编译器(使用AC6编译可能会出现报错、使用AC5编译可能会出现新组件版本无法识别的现象,可选择旧版本组件),此时编译会出现如下报错:
  19. 进stm32f7xx_it.c,删除重复定义的三个函数即可编译成功。
  20. main函数实现:
    /* 包含两个头文件 */
    #include "rl_usb.h"
    #include "rl_fs.h"
    /* main函数中必须调用以下四个函数 */
    osKernelInitialize();  //操作系统内核初始化
    USBH_Initialize(0);    //USB-Host初始化(不初始化USB-Host会导致无法识别U盘)
    finit("U0:");          //初始化文件系统(不初始化文件系统可能导致文件系统调试界面告警)
    osKernelStart();       //启动操作系统内核
  21. 调试测试:下载程序进入debug,依次点击【VIEW】——【Watch Windows】,选择【RTX RTOS】、【File System】、【USB Device and Host】。如下图:

  22. 运行程序,三个组件正常运行:

  23. USB应用代码实现:工程中创建USB文件夹,在该文件夹右键点击【Add New Item to Group 'USB'】,根据引导创建模板例程。

  24. 在主线程中实现以下代码
    #include "USBH_MSC.h"//该头文件在步骤24中创建,需手动在【Options for Target】中添加包含
    
    void usb_task()//该线程需手动创建
    {
        int32_t media_status, media_status_previous = USBH_MSC_ERROR_DRIVE;
        while(1)
        {
            media_status = USBH_MSC_DriveGetMediaStatus ("U0:");
            if ((media_status          == USBH_MSC_OK) && (media_status_previous != USBH_MSC_OK)) 
            {
                switch (USBH_MSC_DriveMount (drive_name)) 
                {
                   case USBH_MSC_OK:
                       fopen (...);
                       break;
                   case USBH_MSC_ERROR_FORMAT:
                       fformat (drive_name, "/FAT32");
                       fopen (...);
                       break;
                   case USBH_MSC_ERROR:
                       // Mount error
                       break;
                }
            
           }
            media_status_previous = media_status;
            osThreadYield();
        }
    }
    

       

### 配置Keil MDK中的串口烧录 为了在Keil MDK中配置串口烧录,需遵循特定设置流程以确保程序能通过USB虚拟COM端口顺利下载至目标设备。默认情况下,USB虚拟COM端口连接到USART3,在终端工具(如PuTTY)打开对应串行端口(115200-8-1-N),重置设备后可以看到RT-Thread输出的信息[^4]。 #### 设置项目属性 进入项目的选项对话框,选择`Flash`标签页下的`Use Settings from:`,指定为`User`而非`Default`。接着点击右侧的`Settings...`按钮,选择适合的目标芯片和编程器接口。对于大多数STM32系列微控制器而言,应选择ST-Link作为调试/编程硬件。 #### 安装必要的驱动程序 确保已安装好用于PC识别开发板上USB转UART桥接芯片所需的驱动软件。例如,如果使用的是CH340G,则需要在其官方网站下载相应的Windows驱动包并完成安装过程。 #### 修改启动文件 有时可能还需要调整链接脚本或启动代码以便支持通过SWD/JTAG接口进行在线调试的同时也允许经由UART实现固件更新操作。具体改动取决于所使用的MCU型号及其外设资源分配情况。 #### 使用RTE框架简化配置 考虑到现代版Keil引入了更便捷易用的新特性——即运行时环境(RTE)框架,推荐利用这一机制来自动生成部分初始化代码片段以及管理依赖关系。这样不仅能够减少手动编码工作量还能有效降低出错几率[^3]。 ```c // 示例:启用RTE组件以自动处理串口通信相关设定 #include "cmsis_os.h" #include "rtthread.h" int main(void){ // 初始化系统时钟等基础服务... /* 通过RTE勾选相应选项即可轻松开启所需外设 */ osDelay(1); while (1){ // 应用逻辑... } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值