GD32F303基于USBD库的usb custom hid 双向通讯实现

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

默认已经建立好需要移植的GD32F303空白工程

环境:keil  

GD库版本:V2.1.4

通讯工具:

链接:https://pan.baidu.com/s/1Ukuy0u52C9ufPGz9QcHONA 
提取码:d9rf


正文开始

USBD库植步骤:

找到GD官网的软件包

本文中用的是GD32F30x_Firmware_Library_V2.1.4

将Firmware\GD32F30x_usbd_library 文件夹全部拷贝至工程目录

然后添加C文件,参考官方customhid demo 是这样GD32F303基于USBD库的usb custom hid 双向通讯实现

 添加H文件路径GD32F303基于USBD库的usb custom hid 双向通讯实现

 需要在官方customhid demo找到这俩两个头文件,加到自己工程里GD32F303基于USBD库的usb custom hid 双向通讯实现

这俩文件随意放,我是放在自己的inc文件夹里,这俩文件是关于USB参数配置,硬件配置。

需要去掉#inlcude "gd32f303e_eval.h"这句

GD32F303基于USBD库的usb custom hid 双向通讯实现

以上移植完成,编译没报错就算成功了


 接下来是修改USBD库,实现双向通讯。官方的demo是拿来做键盘用,比较固定,我们需要实现的是类似串口的随意收发。

找到custom_hid_core.c文件里这个数组,修改USB报文

改成下面这个,里面rev_len send_len是我自己定义的宏定义,这个代表单次收发长度(长度8的倍数,其他没验证成功)

const uint8_t customhid_report_descriptor[DESC_LEN_REPORT] =
{
  /* USER CODE BEGIN 0 */
    0x05, 0x01,                    // USAGE_PAGE (Generic Desktop)
    0x09, 0x00,                    // USAGE (Undefined)
    0xa1, 0x01,                    // COLLECTION (Application)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x95, 0x08,                    //   REPORT_COUNT (64)
    0x75, rev_len,                    //   REPORT_SIZE (8)
    0x81, 0x02,                    //   INPUT (Data,Var,Abs)
    0x09, 0x00,                    //   USAGE (Undefined)
    0x15, 0x00,                    //   LOGICAL_MINIMUM (0)
    0x26, 0xff, 0x00,              //   LOGICAL_MAXIMUM (255)
    0x95, send_len,                    //   REPORT_COUNT (64)
    0x75, 0x08,                    //   REPORT_SIZE (8)
    0x91, 0x02,                    //   OUTPUT (Data,Var,Abs)
  /* USER CODE END 0 */
  	0xC0    /*     END_COLLECTION	             */
};

然后找到usbd_conf.h 文件,将下面两个宏定义改为需要收发的长度,本文中收发长度都是8


	#define CUSTOMHID_IN_PACKET                8U
	#define CUSTOMHID_OUT_PACKET               8U   

报文和收发长度设置基本上就改好了,下面是实现收发的具体代码

1、首先在main函数中添加USBD初始化部分

    /* system clocks configuration */
    rcu_config();       //配置USB时钟

    /* GPIO configuration */
    gpio_config();       //PULL引脚配置

    //custom_hid_itfop_register(&usbd_custom_hid, &fop_handler);    //这部分是官方代码,用不着

    /* USB device configuration */
    usbd_init(&usbd_custom_hid, &custom_hid_desc, &custom_hid_class);

    /* NVIC configuration */
    nvic_config();

    /* enabled USB pull-up */
    usbd_connect(&usbd_custom_hid);

    while (USBD_CONFIGURED != usbd_custom_hid.cur_status) {
        /* wait for standard USB enumeration is finished */
    }

2、在 gd32f30x_it.c中添加USBD的中断回调函数=

void USBD_LP_CAN0_RX0_IRQHandler (void)
{
    usbd_isr();
}

 3、接收部分:在custom_hid_core.c文件里找到custom_hid_data_out函数,去掉官方的代码,改成如下rev_len为长度宏定义,rev_buf为接收缓存,这里有一个转移过程,可以改成自己的接收处理函数

static void custom_hid_data_out (usb_dev *udev, uint8_t ep_num)
{
    int i=0;
    custom_hid_handler *hid = (custom_hid_handler *)udev->class_data[CUSTOM_HID_INTERFACE];

    if (CUSTOMHID_OUT_EP == ep_num){

        usbd_ep_recev(udev, CUSTOMHID_OUT_EP, hid->data, rev_len);              
         for(i=0;i<rev_len;i++)
        {
            rev_buf[i]=hid->data[i];
        }
    }
}

4、发送部分:比较简单就不多说了

 custom_hid_report_send (&usbd_custom_hid, Send_Buffer1, 8);

最后是测试结果

接收测试:

GD32F303基于USBD库的usb custom hid 双向通讯实现

发送测试:

 GD32F303基于USBD库的usb custom hid 双向通讯实现文章来源地址https://www.toymoban.com/news/detail-408044.html

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

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

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

相关文章

  • 单片机GD32F303RCT6 (Macos环境)开发 (二十)—— 光感芯片veml7700的使用

    1、veml有7个寄存器,每个十六位,见图。 00是config寄存器, 01 02 是中断设置的阈值 03是节能模式的设置 04 是得到的光的亮度值 05是得到的data of whole WHITE 06是中断设置值。 2、我们只测试得到光的亮度值,所以veml寄存器设置如下: 设置gain,integration time ,power save mode ,interrup

    2024年02月04日
    浏览(55)
  • STM32:Custom HID实现USB双向通信

    本文章主要讲了使用STM32的USB Device,实现控制板和电脑通信功能。从而实现,上位机对控制板进行调试。 USB Device可以有多种类型,实现双向通信的话,推荐使用Custom HID类型。 首先使用STM32CubeMx实现功能引脚配置并且生成对应的工程文件。   Middleware设置USB_DEVICE    配置时钟

    2024年02月13日
    浏览(36)
  • 【GD32F427开发板试用】+使用USBFS轻松实现HID键盘应用

    本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者: 不锈钢铁侠 最近有项目需要用到键盘自动输入功能,提升工作效率。故使用该开发板实现自定义输入内容并通过按键控制自动通过usb输出。 在官方GD32F4xx_Firm

    2024年02月12日
    浏览(30)
  • [GD32F4]基于GD32固件库移植cherryusb[STM32F4]

    [GD32F4]基于GD32固件库移植cherryusb[STM32F4] 使用开发板是淘宝买的不知名开发板,没什么好说的,具体的型号是GD32F450VET6。 使用的cherryusb版本是0.9.0版本。 使用的GD32官方固件库版本是:GD32F4xx_Firmware_Library_V3.0.4 cherryusb最牛的地方在于抛弃掉所有的依赖,只需要知道芯片的usb中断

    2024年02月06日
    浏览(44)
  • 基于gd32f103移植freemodbus master 主栈

    1.移植freemodbus master需要先移植RT-Thread操作系统 GD32F103C8T6移植 RTT Nano 教程-CSDN博客 2.移植freemodbus master协议栈 在移植了RTT以后,我们需要移植就只有串口相关的函数 移植freemodbus master协议栈具体步骤 下载移植freemodbus master协议栈 源码 添加协议栈文件 向mdk添加头文件路径 修改

    2024年01月18日
    浏览(40)
  • STM32设置USB HID模式

    使用USBHID模式与电脑、手机终端通讯,速率和准确率比虚拟串口和CH340转接速度要快。 在USB_OTG_FS中,选择Device_Only,其它默认。 在Middleware中的Class For FS IP中,如下选择 在Device Descriptor中可以按需要填写 设置USB频率为48Mhz 在Project Manager里,修改Heap和Stack的大小 在程序里main.c中

    2024年02月11日
    浏览(89)
  • 基于STM32F103HAL库的声音定位系统

    这是一道学校出的电赛题目,要求在100*100cm的平面上实现定位实现声音定位。由于一米太大了,我们就做了40cm的,下面的讲解我按照40厘米的写。用到的处理器是stm32f103c8t6接下来分享一下调试心得。 硬件部分需要制作发声装置和接收装置,详细可以

    2024年02月14日
    浏览(47)
  • 【stm32开发笔记】基于HAL库的STM32F4添加DSP库

    本文分两种方法添加DSP库:1.CubeMX直接配置ioc添加; 2.KEIL内添加; 简述:补齐全部lib库-添加DSP包-使能DSP勾选-添加头文件及魔术棒配置-测试 1.补齐lib库。( 如果使用直接默认添加的库,是不支持FPU的,所以需要补齐后找到所需的lib文件进行替换,在MX的工程管理栏,选择复制所

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

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

    2024年02月16日
    浏览(26)
  • STM32 USB使用记录:HID类设备(后篇)

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

    2024年02月13日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包