• STM32_使用STM32CubeMX创建一个USB+FATFS的TrueSTUDIO编译环境下的工程


    一、准备工具

    1. STM32CubeMX软件;
    2. TrueSTUDIO软件;
    3. STM32F429BI开发板带USB接口一块。

    二、USB电路图

      从电路图可以看出,只有两个接口与单片机连接,虽然使用的是单片机的高速引脚,但缺少高速芯片(自行科普),只能拿高速(HS)引脚当全速(FS)引脚用。

    三、使用STM32CubeMX配置USB及FATFS

      1、时钟配置

      我这里使用的是高速外部时钟

      时钟源是8MHz的晶振

      2、USB配置

      选择USB_OTG_HS,配置内部FS Phy为主机

      选择USB_HOST,配置IP为MSC(大容量存储设备)模式

      3、FATFS配置

      选择FATFS,配置Mode为USB Disk

      支持简体中文,使能长文件名,缓存放在栈中

      4、生成TrueSTUDIO工程

    四、添加测试程序

      需要引用的变量

    extern ApplicationTypeDef Appli_state;
    extern USBH_HandleTypeDef hUsbHostFS;
    extern char USBHPath[4];          /* USBH logical drive path */
    
    FATFS USBDISKFatFs;           /* File system object for USB disk logical drive */
    FIL   MyFile;                 /* File object */

      主函数中需要添加的程序

     /* Infinite loop */
      /* USER CODE BEGIN WHILE */
      while (1)
      {
        /* USER CODE END WHILE */
        MX_USB_HOST_Process();
    
        /* USER CODE BEGIN 3 */
        switch(Appli_state)
        {
            case APPLICATION_READY:
                MSC_Application();
                Appli_state = APPLICATION_DISCONNECT;
                break;
            case APPLICATION_DISCONNECT:
                f_mount(NULL, "", 0);
                break;
            default:
                break;
        }
      }

      MSC_Application函数的实现

    /* USER CODE BEGIN 4 */
    static void MSC_Application(void)
    {
        FRESULT res;                             /* FatFs function common result code */
        uint32_t byteswrite;
        uint8_t wtext[] = "hello world!";
    
        /* Register the file system object to the FatFs module */
        if(f_mount(&USBDISKFatFs, (TCHAR const*)USBHPath, 0) != FR_OK)
        {
            /* FatFs Initialization Error */
            Error_Handler();
        }
        else
        {
            /* Create and Open a new text file object with write access */
            if(f_open(&MyFile, "hello.txt", FA_CREATE_ALWAYS | FA_WRITE) != FR_OK)
            {
                /* 'STM32.TXT' file Open for write Error */
                Error_Handler();
            }
            else
            {
                res = f_write(&MyFile, wtext, sizeof(wtext), (void *)&byteswrite);
                if(byteswrite == 0 || (res != FR_OK))
                {
                    Error_Handler();
                }
                else
                {
                    /* Close the open text file */
                    f_close(&MyFile);
                }
            }
        }
    }

    五、测试结果

      插上优盘,经过一段时间,打开优盘查看内容如下所示

  • 相关阅读:
    Python 强制停止多线程运行
    自动化测试 Appium之Python运行环境搭建 Part2
    自动化测试 Appium之Python运行环境搭建 Part1
    Genymotion Android模拟器Genymotion的安装和使用
    Easyui datagrid combobox输入框下拉(取消)选值和编辑已选值处理
    性能测试 接口性能测试需要注意的点
    Python 基于Python及zookeeper实现简单分布式任务调度系统设计思路及核心代码实现
    lintcode:整数排序||
    lintcode:整数排序
    lintcode:玩具工厂
  • 原文地址:https://www.cnblogs.com/wenhao-Web/p/14056689.html
Copyright © 2020-2023  润新知