STM32:Custom HID实现USB双向通信

这篇具有很好参考价值的文章主要介绍了STM32:Custom HID实现USB双向通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文章主要讲了使用STM32的USB Device,实现控制板和电脑通信功能。从而实现,上位机对控制板进行调试。

USB Device可以有多种类型,实现双向通信的话,推荐使用Custom HID类型。

首先使用STM32CubeMx实现功能引脚配置并且生成对应的工程文件。

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

 STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

Middleware设置USB_DEVICE

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机 STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

 配置时钟,USB设置为48MHz。

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

 生成驱动代码和工程:

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

生成的代码还有点问题,修改对应的CUSTOM_HID_ReportDesc_FS。 

/** Usb HID report descriptor. */
__ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END =
{
    /* USER CODE BEGIN 0 */
    0x06,0xFF,0x00,     // USAGE_PAGE (Vendor Page: 0xFF00) ±íʾһ¸ö±¨ÎıêÇ©Ö®ÀàµÄÓÃ;ÀàÒ³
    0x09,0x01,          // USAGE (Vendor Usage 1) ±íʾһ¸ö±¨¸æID±êÖ¾
    0xA1,0x01,          // COLLECTION (Application) ±íʾӦÓü¯ºÏ£¬ÒªÒÔÏÂÃæ×îºóµÄ0xc0½áÊøËü
    0x15,0x00,          // LOGICAL_MINIMUM (0) ±íʾÿ¸ö´«ÊäÊý¾ÝÏÞ¶¨Îª0
    0x26,0xFF,0x00,     // LOGICAL_MAXIMUM (255) ±íʾÿ¸ö´«ÊäÊý¾ÝµÄ×î´óÖµÏÞ¶¨Îª255
    0x75,0x08,          // REPORT_SIZE (8) ´«Êä×ֶεĿí¶ÈΪ8bit£¬±íʾÿ¸ö´«ÊäµÄÊý¾Ý·¶Î§Îª0~ffff ffff
    0x95,0x40,          // REPORT_COUNT (64)ÿ´Î·¢Ë͵ÄÊý¾Ý³¤¶È£¬ÕâÀïÊÇ64λ
    0x09,0x02,          // USAGE (Vendor Usage 2) ±íʾһ¸ö±¨¸æID±êÖ¾
    0x81,0x02,          // INPUT (Data,Var,Abs) ±íʾUSBÒªÊäÈëÊý¾Ýµ½PCµÄ¹¦ÄÜ
    0x09,0x03,          // USAGE (Vendor Usage 3) ±íʾһ¸ö±¨¸æID±êÖ¾
    0x91,0x02,          // OUTPUT (Data,Var,Abs) ±íʾUSBÉ豸Ҫ½ÓÊÕPCµÄÊý¾ÝµÄ¹¦ÄÜ
    0x0A,0x00,0xFF,     // UsageS(0xFF00)
    0x0B1,0x02,         // feature (data, variable, absolute)
    /* USER CODE END 0 */
    0xC0                  // END_COLLECTION ½áÊø±êÖ¾

};

 配置数据长度:

/*---------- -----------*/
#define USBD_MAX_NUM_INTERFACES     1U
/*---------- -----------*/
#define USBD_MAX_NUM_CONFIGURATION     1U
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ     512U
/*---------- -----------*/
#define USBD_DEBUG_LEVEL     0U
/*---------- -----------*/
#define USBD_LPM_ENABLED     1U
/*---------- -----------*/
#define USBD_SELF_POWERED     1U
/*---------- -----------*/
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE     64U
/*---------- -----------*/
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE     30U
/*---------- -----------*/
#define CUSTOM_HID_FS_BINTERVAL     0x1U

 usbd_customhid.c

#define CUSTOM_HID_EPIN_ADDR                         0x81U
#define CUSTOM_HID_EPIN_SIZE                         0x40U

#define CUSTOM_HID_EPOUT_ADDR                        0x02U
#define CUSTOM_HID_EPOUT_SIZE                        0x40U

#define USB_CUSTOM_HID_CONFIG_DESC_SIZ               41U
#define USB_CUSTOM_HID_DESC_SIZ                      9U

#ifndef CUSTOM_HID_HS_BINTERVAL
#define CUSTOM_HID_HS_BINTERVAL                      0x05U
#endif /* CUSTOM_HID_HS_BINTERVAL */

#ifndef CUSTOM_HID_FS_BINTERVAL
#define CUSTOM_HID_FS_BINTERVAL                      0x05U
#endif /* CUSTOM_HID_FS_BINTERVAL */

#ifndef USBD_CUSTOMHID_OUTREPORT_BUF_SIZE
#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE            0x64U
#endif /* USBD_CUSTOMHID_OUTREPORT_BUF_SIZE */

#ifndef USBD_CUSTOM_HID_REPORT_DESC_SIZE
#define USBD_CUSTOM_HID_REPORT_DESC_SIZE             30U
#endif /* USBD_CUSTOM_HID_REPORT_DESC_SIZE */

#define CUSTOM_HID_DESCRIPTOR_TYPE                   0x21U
#define CUSTOM_HID_REPORT_DESC                       0x22U

#define CUSTOM_HID_REQ_SET_PROTOCOL                  0x0BU
#define CUSTOM_HID_REQ_GET_PROTOCOL                  0x03U

#define CUSTOM_HID_REQ_SET_IDLE                      0x0AU
#define CUSTOM_HID_REQ_GET_IDLE                      0x02U

#define CUSTOM_HID_REQ_SET_REPORT                    0x09U
#define CUSTOM_HID_REQ_GET_REPORT                    0x01U

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机 

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机 

#include "usb_device.h"
#include "usbd_core.h"
#include "usbd_desc.h"
#include "usbd_customhid.h"
#include "usbd_custom_hid_if.h"
#include "usart.h"

/* USER CODE BEGIN Includes */

unsigned char USB_Send_Buffer[64] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc};
unsigned char USB_Recive_Buffer[64] = {1,2,3,4,5,6,7,8,9,}; //USB½ÓÊÕ»º´æ
unsigned char USB_Received_Count = 0;//USB½ÓÊÕÊý¾Ý¼ÆÊý

/* USER CODE END Includes */

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/

/* USER CODE END PV */

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/

/* USER CODE END PFP */

/* USB Device Core handle declaration. */
USBD_HandleTypeDef hUsbDeviceFS;

/*
 * -- Insert your variables declaration here --
 */
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/*
 * -- Insert your external function declaration here --
 */
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/**
  * Init USB device Library, add supported class and start the library
  * @retval None
  */
void MX_USB_DEVICE_Init(void)
{
  /* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
  /* USER CODE END USB_DEVICE_Init_PreTreatment */

  /* Init Device Library, add supported class and start the library. */
  if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CUSTOM_HID) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_CUSTOM_HID_RegisterInterface(&hUsbDeviceFS, &USBD_CustomHID_fops_FS) != USBD_OK)
  {
    Error_Handler();
  }
  if (USBD_Start(&hUsbDeviceFS) != USBD_OK)
  {
    Error_Handler();
  }

  /* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */

  /* USER CODE END USB_DEVICE_Init_PostTreatment */
}

void Usbd_Send_Test(void)
{

    Usart_Printf("USBD_CUSTOM_HID_SendReport!\r\n");
    USBD_CUSTOM_HID_SendReport(&hUsbDeviceFS, USB_Send_Buffer, 64);
}

void Usbd_Receive_Test(void)
{
    Usart_Printf("\r\nUsbd_Receive_Test:\r\n");
    for(int i = 0; i < 64; i++)
    {
        Usart_Printf("%02x", USB_Recive_Buffer[i]);
    }
}

 发送测试:

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机 

 接收测试:

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机

STM32:Custom HID实现USB双向通信,stm32,嵌入式硬件,单片机 

 文章来源地址https://www.toymoban.com/news/detail-544918.html

到了这里,关于STM32:Custom HID实现USB双向通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32 USB使用记录:HID类设备(后篇)

    接上篇: 《STM32 USB使用记录:HID类设备(前篇)》 USB HID 类的设备有个比较大的好处是大部分时候接入主机中都是可以免驱使用的。这篇文章将介绍下 STM32 中实现 USB HID 双向透传功能,结合免驱的特点,这在实际工作中是比较常用的。 在上一篇文章中简单了解接触了下HID设

    2024年02月13日
    浏览(36)
  • STM32 USB使用记录:HID类设备(前篇)

    USB是目前最流行的接口,现在很多个人用的电子设备也都是USB设备。目前大多数单片机都有USB接口,使用USB接口作为HID类设备来使用是非常常用的,比如USB鼠标、键盘都是这一类。这篇文章将简单介绍使用STM32实现相关内容。 一些USB相关最基础的内容可以参考下面文章中 基础

    2024年02月16日
    浏览(30)
  • STM32 CubeMX USB_(HID 鼠标和键盘)

    STM32 CubeMX 自动生成的USB_HID是鼠标类型的:键盘类型要做一点小修改; 参考: STM32CubeMX学习笔记 USB鼠标HID描述符以及数据格式

    2024年02月14日
    浏览(35)
  • STM32 CubeMX配置USB HID功能,及安装路径

    STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备) STM32CubeMX实现STM32 USBHID双向64字节通信(下位机部分) STM32 USB HID设置(STM32CubeMX) 关于keil 5安装出现Fail to set path to Software Packs.问题解决方法

    2024年02月08日
    浏览(36)
  • STM32。USB HID,如何发送标准键盘的按键报告?

    我们要求STM32芯片的usb和windows电脑的USB接口进行连接,然后STM32芯片发送usb数据给windows电脑,实现电脑上按下一个f按键的效果。 下面开始操作: 使用STM32CubeMX生成代码,先选择对应的usb口 然后选择第三方软件,选择HID 然后点击生成代码,这时候就会生成usbd_hid.c相关的代码

    2024年02月12日
    浏览(46)
  • stm32 USB HID+CDC 鼠标键盘串口 组合设备配置解析

    查阅网上的博客与代码,很多都是关于USB的鼠标配置、USB的键盘配置、USB的虚拟串口配置,稍微深入一点的会将鼠标键盘合在一起,但移植起来就会报很多错误,要么是检测不到,要么是警告,这很正常,因为不理解这些数字代表着什么。但只要理解每个数字代表什么意思,

    2024年02月13日
    浏览(41)
  • STM32CubeMX学习笔记(46)——USB接口使用(HID自定义设备)

    USB(Universal Serial BUS)通用串行总线 ,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯。是应用在 PC 领域的接口技术。USB 接口支持设备的即插即用和热插拔功能。USB 是在 1994 年底由英特尔、康柏、IBM、Microsoft 等多家公司联合提出的。 USB 发展到现在已经有 US

    2024年02月14日
    浏览(51)
  • 第10课【STM32 USB通讯协议实战】HID键盘+CDC虚拟串口组合设备

    文章中的部分概念可参考第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0 USB协议中为了提供对多样设备的支持,定义了许多外部设备子类,常见的包括: 人机交互类设备HID(Human Interface Device) 通信类设备CDC(Communicate Device Class) 大容量存储设备

    2024年02月04日
    浏览(59)
  • STM32CubeMX教程31 USB_DEVICE - HID外设_模拟键盘或鼠标

    正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 USB_OTG_FS为工作在Human Interface Device Class (HID)(人机接口设备类)模式下的USB_DEVICE(USB从机),利用上下左右四

    2024年02月19日
    浏览(39)
  • stm32 USB复合设备 cubeMX库一键生成 多路CDC串口 HID鼠标键盘 Composite Device

    最近有个需求,需要同时用usb键盘鼠标和虚拟串口等,因为平时没怎么研究过usb协议,所以自己写复合设备一直没有成功,然后正巧在github上看到了一个stm32的一个usb复合设备库,可以快速配置usb组合设备,并且支持超级多路串口 Gihub地址 https://github.com/alambe94/I-CUBE-USBD-Compo

    2024年02月09日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包