【PIC32MZ】USB HID通信

  范例直接下载:https://download.csdn.net/download/u010875635/10689882

在设备通信中,UART非常常见,也是最简单的,但是,PC尤其是笔记本基本都舍弃了传统的UART端口,只能使用usb转UART的IC来做信号转换,这样效率低,而且还要针对IC安装专门的驱动,非常不方便,而在有些特殊设备上,甚至驱动无法安装,是否可以不安装驱动与PC通信呢?

当然可以!

在USB盛行的今天,USB通信变得极其简单,而在USB中有一个重要的通信标准,就是HID(Human Interface Device),常见的鼠标键盘就是采用HID通信。由于它的标准性,几乎所有PC系统(Windows、Linux、OSX)都集成了它的驱动,所以,可以将它看做一个免驱的设备,类似的还有USB大容量存储。下面我们就用PIC32MZ2048EFH芯片实现USB HID的接口(PIC32MZ EF Start Kit开发板),与PC进行通信,PC端采用C#以及C++分别在windows和linux下实现hid读写,本篇不做描述,详细参考我的其它博客,关于两个平台的hid程序。

接口使用的是micro usb(j4接口)。

1、配置时钟(略)

2、配置USB Library,以及device configuration,下面两图中红色部分要修改,其它默认。

(若是要LED显示,或者显示到LCD,请自行配置,需要注意的是,USB或使用的默认第一个Dynamic Timer,若是有其它功能使用到Dynamic Timer,请多设置一个Timer,并将第一个(instance0)预留不用,否则其它功能无法正常使用

 

 

3、生成code,并添加自己的code。

添加usb-hid.c与usb-hid.h。

需要执行usb初始化和while循环的task任务,接收可以修改为回调函数,放到usb-hid接收函数中,发送直接调用发送函数即可,注意包大小要与客户端发送的大小一致,可以考虑在包内加标识判断数据大小。

 

usb-hid.h

#ifndef _USB_HID_H
#define _USB_HID_H

#define hidMaxBufferSize 64

#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdlib.h>
#include "system_config.h"
#include "system_definitions.h"

typedef enum
{
    USB_HID_STATE_INIT,
            
    /* Application is waiting for configuration */
    USB_HID_STATE_WAIT_FOR_CONFIGURATION,

    /* Application is running the main tasks */
    USB_HID_STATE_MAIN_TASK,

    /* Application is in an error state */
    USB_HID_STATE_ERROR
}USB_HID_STATE;

typedef struct
{
    /* The application's current state */
    USB_HID_STATE state;

      /* Device layer handle returned by device layer open function */
    USB_DEVICE_HANDLE  usbDevHandle;

    /* Recieve data buffer */
    uint8_t * receiveDataBuffer;


    /* Device configured */
    bool deviceConfigured;

    /* Send report transfer handle*/
    USB_DEVICE_HID_TRANSFER_HANDLE txTransferHandle;

    /* Receive report transfer handle */
    USB_DEVICE_HID_TRANSFER_HANDLE rxTransferHandle;

    /* Configuration value selected by the host*/
    uint8_t configurationValue;

    /* HID data received flag*/
    bool hidDataReceived;

    /* HID data transmitted flag */
    bool hidDataTransmitted;
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值