4879|3

171

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【 ST NUCLEO-H743ZI测评】+ USB OTG+FATFS [复制链接]

本帖最后由 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为电源型号检测引脚。

 

二、STM32CubeMX创建工程

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

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

    1. USB_OTG_FS配置

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

 

    2. USB中间层功能配置

    

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

 

    3. FATFS功能配置

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

 

    4.添加按键中断

    板子上的用户按键为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等无法识别。

 

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

 

此帖出自stm32/stm8论坛

最新回复

试试在testFile.txt里写一段hello eeworld   详情 回复 发表于 2020-6-15 20:54
点赞 关注
 

回复
举报

9795

帖子

24

TA的资源

版主

沙发
 

试试在testFile.txt里写一段hello eeworld

此帖出自stm32/stm8论坛

点评

我今天出差了。这个要等我回去了才能改了。  详情 回复 发表于 2020-6-15 22:15
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
littleshrimp 发表于 2020-6-15 20:54 试试在testFile.txt里写一段hello eeworld

我今天出差了。这个要等我回去了才能改了。

此帖出自stm32/stm8论坛
 
 

回复

171

帖子

0

TA的资源

一粒金砂(中级)

4
 

终于回来啦。

在搭建好FATFS系统,生成文件后,在文件中些内容还是比较简单。

只需添加fwrite()函数将内容写入即可。

 

代码中的headbuff[17]数组在此仅显示内容,在此时注释掉的,程序中是定义在文件头部的。

此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表