增加 stm32 HID 功能
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”。
- .搜索“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
修改方法参照上文。