社区导航

 

搜索
查看: 367|回复: 0

[原创] 【 ST NUCLEO-H743ZI测评】+ USB OTG+FATFS

[复制链接]

116

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2020-5-19 00:21 | 显示全部楼层 |阅读模式
本帖最后由 sylar^z 于 2020-5-19 00:38 编辑

    NUCLEO-H743ZI板子自带USB接口,既可以作为设备USB口,也可以作为主USB口来外接U盘、HID设备等。

 

一、硬件原理图

    NUCLEO-H743ZI板子USB接口的硬件电路。USB_VBUS、USB_DM、USB_DP、USB_ID、GND为USB5个引脚。USB_PowerSwitchOn为电源输出控制引脚。USB_OverCurrent为电源型号检测引脚。

SCH-1.png

 

二、STM32CubeMX创建工程

     首先通过STM32CubeMX来创建工程,不熟悉STM32CubeMX的朋友可以参看我上一篇帖子(http://bbs.eeworld.com.cn/thread-1122042-1-1.html)有关于STM32CubeMX创建NUCLEO-H743ZI工程的说明。

    进入NUCLEO-H743ZI的配置界面,主要配置如下几个功能项:

    1. USB_OTG_FS配置

CubeMX-1.png

    左边列表选择USB_OTG_FS,配置模式为Host_Only,并启用VBUS_sensing检测。开启global中断。其他默认即可。

 

    2. USB中间层功能配置

CubeMX-2.png     

    左边列表选择USB_HOST,配置模式为MSC,大容量存储器模式。电源驱动选择IO输出,引脚为PG6。其他默认即可。

 

    3. FATFS功能配置

CubeMX-3.png

    左边列表选择FATFS,配置模式为USB Disk。配置中CODE_PAGE选择支持简体中文。其他默认即可。

 

    4.添加按键中断

CubeMX-5.png

    板子上的用户按键为PC13,默认配置为上升沿触发中断,即按键按下时触发。

 

    5. 保存工程后,点击右上角的GENERATE CODE自动生成工程代码

 

三、编程

    1. STM32CubeMX生成的源码文件已对USB OTG功能做了基本配置。在配置之后需要开启USB供电输出使能,代码中红色部分。

/**

  * Init USB host library, add supported class and start the library

  * @retval None

  */

void MX_USB_HOST_Init(void)

{

  /* USER CODE BEGIN USB_HOST_Init_PreTreatment */

  /* USER CODE END USB_HOST_Init_PreTreatment */

  /* Init host Library, add supported class and start the library. */

  if (USBH_Init(&hUsbHostFS, USBH_UserProcess, HOST_FS) != USBH_OK)

  {

    Error_Handler();

  }

  if (USBH_RegisterClass(&hUsbHostFS, USBH_MSC_CLASS) != USBH_OK)

  {

    Error_Handler();

  }

  if (USBH_Start(&hUsbHostFS) != USBH_OK)

  {

    Error_Handler();

  }

  /* USER CODE BEGIN USB_HOST_Init_PostTreatment */

  /* Activate VBUS on the port */

  USBH_LL_DriverVBUS(&hUsbHostFS, 0);

  /* USER CODE END USB_HOST_Init_PostTreatment */

}

 

    2. 在USB连接、断开等事件中添加FATFS功能代码。

void MX_FATFS_Init(void)

{

  /*## FatFS: Link the USBH driver ###########################*/

  retUSBH = FATFS_LinkDriver(&USBH_Driver, USBHPath);

  /* USER CODE BEGIN Init */

  /* additional user code for init */ 

  /* USER CODE END Init */

}

 

/*

 * user callback definition

 */

static void USBH_UserProcess  (USBH_HandleTypeDef *phost, uint8_t id)

{

  /* USER CODE BEGIN CALL_BACK_1 */

  switch(id)

  {

  case HOST_USER_SELECT_CONFIGURATION:

  break;

 

  case HOST_USER_DISCONNECTION:

  Appli_state = APPLICATION_DISCONNECT;

  FATFS_UnLinkDriver(USBHPath);

  f_mount(NULL, "", 0);

  break;

 

  case HOST_USER_CLASS_ACTIVE:

  Appli_state = APPLICATION_READY;

  break;

 

  case HOST_USER_CONNECTION:

  Appli_state = APPLICATION_START;

  f_mount(&USBHFatFS, (TCHAR const*)USBHPath, 0);

  break;

 

  default:

  break;

  }

  /* USER CODE END CALL_BACK_1 */

}

 

 

     3. 按键中断处理。置一个标志位。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

  if(USER_Btn_Pin == GPIO_Pin)

  {

    btnClickFlag = 1;

  }

}

 

    4. 按键实现创建文件功能。在主函数的while循环中添加功能代码。测试在U盘中生成文件名为testFile的txt文件。

    if(btnClickFlag)

    {

      btnClickFlag = 0;

      //创建一个文件

      f_open(&testFile, "testFile.txt", FA_CREATE_ALWAYS | FA_WRITE);

      f_close(&testFile);

    }

 

四、板子USB OTG接U盘测试。此处注意,U盘的格式须为FAT格式,NTFS、exFAT等无法识别。

板子USB OTG接U盘测试.png

 

五、文件查看,在U盘中生成testFile.txt文件。由于没有内容,文件大小为0Kb。

U盘截图-1.png

 

此帖出自stm32/stm8论坛

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 1/4 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-6-4 12:12 , Processed in 0.098742 second(s), 22 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表