单片机学习小组
直播中

梁宏满

7年用户 928经验值
私信 关注

如何利用STM32的USB实现通信?

如何利用STM32的USB实现通信

回帖(1)

倪梁靓

2022-2-21 13:43:28
  STM32F4系列处理器内部集成了USB-OTG控制器,在不要外部USB IC下就可以实现USB通信,最近两天看了下如何利用STM32的USB实现通信,记录下关键步骤:
      1. 先下载所需要的USB_OTG主机和设备库;
   2. 新建STM32工程,并把STM32_USB-Host-Device_Lib下的Libraries中的3个USB库放到工程文件中;
   3.在Keil中建立USB相关文件夹,并加入相应的驱动文件:(可参考STM32_USB-Host-Device_Lib—>Project—>USB_Device_Examples—>HID,指示官方给的HID例程是用按键作为鼠标与PC连接),建立好的工程文件如下图:
   
   4. 修改驱动文件,其中u***_hid_core.c位于STM32_USB-Host-Device_Lib—>Project—>USB_Device_Examples—>HID,即官方给的驱动。主要修改以下几个文件:u***_bsp.c(USB引脚初始化,可只需要两根数据引脚),u***d_desc.c(USB设备描述符,当然这个也可以不用修改,采用默认即可),u***d_usr.c(用于设备连接过程的信息显示),u***d_hid_core.c(此为重点修改文件,主要在USBD_HID_cb中添加USBD_HID_DataOut,USBD_HID_CfgDesc中添加HID_OUT_EP,修改HID_MOUSE_ReportDesc,USBD_HID_Init中添加DCD_EP_PrepareRx,并添加USBD_HID_DataOut函数)
   5. 修改了u***d_hid_core.c后,同时需要修改u***d_hid_core.h中的USB_HID_CONFIG_DESC_SIZ等参数。注:HID_MOUSE_ReportDesc参数含义不是很清楚。
   6. 添加USB FS中断服务函数
   void OTG_FS_IRQHandler(void)
{
  USBD_OTG_ISR_Handler(&USB_OTG_dev);
}
   7. 完成上述部分内容后,便可实现STM32与PC机双向通信,发送函数调用USBD_HID_SendReport,接收函数调用USBD_HID_DataOut(数据存储在USBD_HID_DataOut一个字符数组中)。
   附言:可以通过PortHelper调试助手完成USB调试,Beyond Compare可用于比较两个文件中的内容的不通,很实用
   


举报

更多回帖

发帖
×
20
完善资料,
赚取积分