完善資料讓更多小伙伴認識你,還能領取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 |