首页 > 技术文章 > 增加 stm32 HID 功能

lizhuohui 2020-05-18 16:04 原文

Stm32 HID(不行)

注意:

代码太坑,但修改的方法却是很有参考价值的,所以保存下来。

 

代码太坑,用的是寄存器操作,和库对应不起来,还不稳定,经常连不上,最坑的是,一定不能选中 usb mico lib 这个选项,否则连不上。垃圾代码。

例程来源

CSDN上有很多KEIL例程,本次使用:

《stm32f103 USB HID 双向通讯的代码》

https://download.csdn.net/download/aexisun/9843868?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522158976659719195265917492%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.57693%2522%257D&request_id=158976659719195265917492&biz_id=1&utm_medium=distribute.pc_search_result.none-task-download-2~all~first_rank_v2~rank_v25-5-9843868.nonecase&utm_term=stm32f103+hid 

 

下载后,测试没问题,就移植进去就OK.

 

修改例程

先在下载的keil工程上修改好,

 

1.MCU改成“STM32F103VE”, 全局宏改成“STM32F10X_HD”。

 

  1. .搜索“idVendor”关键字,修改好PID和VID.

注意: 如果单单是改 VID,PID,电脑是识别不了的,会提示:

那么,怎么办呢?把之前灵动微的设备描述符全般进去就行,然后打开。

/* USB标准设备描述符*/

const uint8_t CustomHID_DeviceDescriptor[CustomHID_SIZ_DEVICE_DESC] =

{

    0x12,                       /*bLength:长度,设备描述符的长度为18字节*/

    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType:类型,设备描述符的编号是0x01*/

    0x00,                       /*bcdUSB:所使用的USB版本为2.0*/

    0x02,

    0x00,                       /*bDeviceClass:设备所使用的类代码*/

    0x00,                       /*bDeviceSubClass:设备所使用的子类代码*/

    0x00,                       /*bDeviceProtocol:设备所使用的协议*/

    0x40,                       /*bMaxPacketSize:最大包长度为64字节*/

    0x83,                       /*idVendor:厂商ID为0x0483*/

    0x04,

    0x50,                       /*idProduct:产品ID为0x5704*/

    0x57,

    0x00,                       /*bcdDevice:设备的版本号为2.00*/

    0x02,

    1,                          /*iManufacturer:厂商字符串的索引*/

    2,                          /*iProduct:产品字符串的索引*/

    3,                          /*iSerialNumber:设备的序列号字符串索引*/

    0x01                        /*bNumConfiguration:设备有1种配置*/

}; /* CustomHID设备描述符 */

 

或者插拔几次,就可以看到可以识别USB了,如下:

 

再用之前的设备一连,可以连上了。

 

连接不稳定的问题

现象

调试例程的时间,出现了一个严重的问题,就是连接不稳定,有时能连上,有时连不上,甚至出现了更诡异的现象,加上串口就可以使用,去掉串口就不能连上了。

根本原因

最后,发现,原来是延时的问题,STM32开机后,要先延时一会,待整块电路板电压稳定后,各外设启动后(之前调试OBD芯片的时间,开发商不是说过吗,要等一会,各模块启动后,才能去操作外设,比如1ms后才能设置RCC.)

解决方法

开机后才别急者设置USB,先延时几毫秒再说。

 

 

STM32 HID例程2

例程来源

《stm32f103 USB HID 双向通讯的代码》

https://download.csdn.net/download/aexisun/9843868 

 

修改方法参照上文。

推荐阅读