完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>
标签 > HID
HID(High intensity Discharge)是高压气体放电灯的简称,一般由高压包、镇流器(安定器)、灯泡组成。电路中连接各电器设备的接线部件,由绝缘护套、接线端子、导线及绝缘包扎材料等组。
HID(High intensity Discharge)是高压气体放电灯的简称,一般由高压包、镇流器(安定器)、灯泡组成。电路中连接各电器设备的接线部件,由绝缘护套、接线端子、导线及绝缘包扎材料等组。
HID(High intensity Discharge)是高压气体放电灯的简称,一般由高压包、镇流器(安定器)、灯泡组成。电路中连接各电器设备的接线部件,由绝缘护套、接线端子、导线及绝缘包扎材料等组。
完成stm32 上HID的应用
这个是公司的项目,以前基于usb的虚拟串口来做上下位机通信,由于usb平时也就刷参数和调试之用,也不很常用,外面反应usb有时会连不上stm32控制器,心里一直认为不是大问题,后来反应的多了,就重视这个事情了,虽然usb平时不用,但是用的时候只要出现异常掉线,就再也连不上去了,特别影响用户对我们产品的信心。
在网上找了很多资料,到现在也只能隐约确定是stm32官方的虚拟串口库有问题,我发现不同的电源板都会影响到usb虚拟串口的枚举,于是下定决心使用其他方式来做上下位机的连接,排除了usb虚拟串口,眼前的选择只有两个
1)usblib,这个是针对usb的上位机库,可以玩很多的花样,但是需要开发者稍稍熟悉usb协议,而且这个需要在上位机上安装usb驱动程序。
2)hid设备,这个是windows自身支持的usb设备,只支持中断传输,最大的速率也就64Kb/s,上位机采用windows api编程
我估算了一下,hid方式满足我的要求,而且是免驱动,又不用学习usblib,所以就使用hid方式实现了usb通信。
hid几个注意事项:
1)对于windows API来说,读和写hid设备的数据包都是大小确定了,也就是说如果stm32 端口设备的hid属性是64的话,那么读写都是64字节的。读写的最大帧是64字节,我在代码中是基于64字节做应用层协议的。
2)hid写速度不能太快,所以我一般在写前会等待2ms左右,确保不会写出错。
确认是是HIDAPI的代码问题,我对写函数修改如下,结果就好了,可以一直写无需等待
int HID_API_EXPORT HID_API_CALL hid_write(hid_device *dev, const unsigned char *data, size_t length)
{
DWORD bytes_written;
BOOL res;
BOOL bResult;
OVERLAPPED ol;
HANDLE ReportEvent;
ReportEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
ResetEvent(ReportEvent);
memset(&ol, 0, sizeof(ol));
ol.hEvent = ReportEvent;
//res = WriteFile(dev-》device_handle, data, 23, NULL, &ol);
res = WriteFile(dev-》device_handle, data, length, NULL, &ol);
if (!res) {
int errcode = GetLastError();
if (errcode != ERROR_IO_PENDING) {
// WriteFile() failed. Return error.
register_error(dev, “WriteFile”);
return -1;
}
}
bResult = WaitForSingleObject(ReportEvent, 50);
if(bResult == WAIT_TIMEOUT || bResult == WAIT_ABANDONED)
{
register_error(dev, “WriteFile”);
CancelIo(&(dev-》device_handle));
return -1;
}
// Wait here until the write is done. This makes
// hid_write() synchronous.
res = GetOverlappedResult(dev-》device_handle, &ol, &bytes_written, TRUE);
if (!res) {
// The Write operation failed.
register_error(dev, “WriteFile”);
return -1;
}
return bytes_written;
}
3)上位机上的读写之间不能释放hid的句柄,这个我参考百合的hid教材的时候,吃了不少苦头。
4)我使用了HIDAPI这个库来操作hid设备。
在讲述绕线贴片电感我们之前也有给大家做个简单的介绍,最近我们发现很多人在咨询怎样辨别绕线贴片电感好坏的问题。今天带你们了解怎样辨别绕线贴片电感的好坏。
可以用Arduino来制作USB设备吗?尝试通过Arduino Pro Micro(Leonardo)使用HID功能
这篇文章来源于DevicePlus.com英语网站的翻译稿。本文最初发布在deviceplus.jp网站上,而后被翻译成英语。
前不久,一名在深圳的大学好友联系到我,他们公司需要做一个 USB蓝牙接收器 ,功能大体如下: USB蓝牙接收器插在电脑上使用,被识别为键盘; 手机程序连...
ANS-BT101M 是一款低功耗蓝牙模块,支持蓝牙 5.1 和 HID、GATT、HID 等配置文件。 模块可以通过UART通信和AT命令设置模块名称...
TRI的机器人技术高级副总裁Max Bajracharya指出:我们可以训练一个大型模型来一次性学习常识性知识,并通过自然语言编程并适应用户。
KT6368A的HID蓝牙双模版本_蓝牙键盘鼠标扫码枪方案介绍
蓝牙HID,实际上指的就是蓝牙键盘、蓝牙鼠标、蓝牙遥控器等等设备类型,都称之为人机交互设备。这里我们KT6368A蓝牙芯片,就是虚拟成这些设备。对于wi...
SDK中的B85m_ble_sample例程的使用及注意事项
单连接SDK中B85m_ble_sample适用825x芯片和827x芯片,所以编译选项中又分为了825x_ble_sample和827x_ble_sa...
我使用的硬件是极海的APM32F407IG MINI Board,它提供了一个全速的USB口(Type B)。打开Device_Examples目录中的...
编辑推荐厂商产品技术软件/工具OS/语言教程专题
电机控制 | DSP | 氮化镓 | 功率放大器 | ChatGPT | 自动驾驶 | TI | 瑞萨电子 |
BLDC | PLC | 碳化硅 | 二极管 | OpenAI | 元宇宙 | 安森美 | ADI |
无刷电机 | FOC | IGBT | 逆变器 | 文心一言 | 5G | 英飞凌 | 罗姆 |
直流电机 | PID | MOSFET | 传感器 | 人工智能 | 物联网 | NXP | 赛灵思 |
步进电机 | SPWM | 充电桩 | IPM | 机器视觉 | 无人机 | 三菱电机 | ST |
伺服电机 | SVPWM | 光伏发电 | UPS | AR | 智能电网 | 国民技术 | Microchip |
开关电源 | 步进电机 | 无线充电 | LabVIEW | EMC | PLC | OLED | 单片机 |
5G | m2m | DSP | MCU | ASIC | CPU | ROM | DRAM |
NB-IoT | LoRa | Zigbee | NFC | 蓝牙 | RFID | Wi-Fi | SIGFOX |
Type-C | USB | 以太网 | 仿真器 | RISC | RAM | 寄存器 | GPU |
语音识别 | 万用表 | CPLD | 耦合 | 电路仿真 | 电容滤波 | 保护电路 | 看门狗 |
CAN | CSI | DSI | DVI | Ethernet | HDMI | I2C | RS-485 |
SDI | nas | DMA | HomeKit | 阈值电压 | UART | 机器学习 | TensorFlow |
Arduino | BeagleBone | 树莓派 | STM32 | MSP430 | EFM32 | ARM mbed | EDA |
示波器 | LPC | imx8 | PSoC | Altium Designer | Allegro | Mentor | Pads |
OrCAD | Cadence | AutoCAD | 华秋DFM | Keil | MATLAB | MPLAB | Quartus |
C++ | Java | Python | JavaScript | node.js | RISC-V | verilog | Tensorflow |
Android | iOS | linux | RTOS | FreeRTOS | LiteOS | RT-THread | uCOS |
DuerOS | Brillo | Windows11 | HarmonyOS |