完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
MCU芯片: STM32F407
工程:使用 USB HID 实现双向通信 采用 CubeMX 生成的 USB HID 工程,并且更新了报告描述符,已实现了向电脑一次发送64个字节的功能。但是从电脑下发数据时,一直没有响应,在接收中断函数里面,设了收到数据,指示灯就会闪一下,但是没看到有闪。 哪位大侠指点一下,非常感谢! 我看了 CubeMX 生成的代码中,main() 函数里,没有看到有打开USB接收中断的程序,是不是没有打开? 要怎么打开?? /** Usb HID report descriptor. */ __ALIGN_BEGIN static uint8_t CUSTOM_HID_ReportDesc_FS[USBD_CUSTOM_HID_REPORT_DESC_SIZE] __ALIGN_END = { /* USER CODE BEGIN 0 */ 0x06, 0x00, 0xff, // USAGE_PAGE (Vendor Defined Page 1) 0x09, 0x01, // USAGE (Vendor Usage 1) 0xA1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Vendor Usage 1) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) 0x95, 0x40, // REPORT_COUNT (64) 0x75, 0x08, // REPORT_SIZE (8) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x09, 0x01, // USAGE (Vendor Usage 1) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xFF, 0x00, // LOGICAL_MAXIMUM (255) 0x95, 0x40, // REPORT_COUNT (64) 0x75, 0x08, // REPORT_SIZE (8) 0x91, 0x02, // OUTPUT (Data,Var,Abs) 0xC0 /* END_COLLECTION */ }; int main(void) { uint8_t i; HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM2_Init(); MX_IWDG_Init(); MX_USART3_UART_Init(); MX_ADC1_Init(); MX_USB_DEVICE_Init(); HAL_TIM_Base_Start_IT( htim2); __HAL_UART_ENABLE_IT( huart3, UART_IT_RXNE); for(i=0;i<64;i++) USB_Tx_Buf[i] = i; while (1) { HAL_IWDG_Refresh( hiwdg); UART3_Rx_Fun(); if(HB_Clock >= 1) { HB_Clock = 0; USBD_CUSTOM_HID_SendReport( hUsbDeviceFS,USB_Tx_Buf,64); // 可以成功向电脑发送数据 } } } |
|
相关推荐
1个回答
|
|
|
STM32F407 使用 USB HID 实现双向通信时,从电脑下发数据没有响应的原因可能有以下几点:
1. USB 配置问题:确保你的 USB 配置正确,包括设备描述符、设备请求处理等。使用 CubeMX 生成的代码应该已经包含了这些配置,但仍然需要检查是否正确。 2. 报告描述符问题:你提到已经更新了报告描述符,确保报告描述符正确定义了输入和输出报告。检查报告描述符是否正确映射了数据缓冲区。 3. 中断配置问题:确保你已经正确配置了 USB 接收中断。在 CubeMX 生成的代码中,通常会有一些初始化函数,如 HAL_PCD_Init() 和 HAL_PCD_Start(),这些函数会配置 USB 相关中断。检查这些函数是否被正确调用。 4. 中断服务例程(ISR)问题:确保你已经正确实现了 USB 接收中断服务例程(如 PCD_IRQHandler()),并且在该例程中正确处理了接收到的数据。 5. 数据处理问题:检查你的接收中断函数是否正确处理了接收到的数据,并且正确触发了指示灯闪烁。 6. 电脑端驱动问题:确保电脑已经正确安装了 USB HID 设备的驱动程序。如果驱动程序有问题,可能会导致数据传输失败。 7. 电脑端测试工具问题:确保你使用的电脑端测试工具(如 HID Test 或其他 HID 测试软件)能够正确识别和通信你的设备。 8. 硬件问题:检查你的 STM32F407 开发板和 USB 连接线是否有硬件问题,如接触不良、损坏等。 为了解决这个问题,你可以尝试以下步骤: 1. 仔细检查 CubeMX 生成的代码,确保 USB 配置、报告描述符、中断配置等都正确无误。 2. 在 main() 函数中,确保已经调用了初始化和启动 USB 的相关函数,如 HAL_PCD_Init() 和 HAL_PCD_Start()。 3. 检查 USB 接收中断服务例程(如 PCD_IRQHandler()),确保它能够正确处理接收到的数据,并触发指示灯闪烁。 4. 使用电脑端的 HID 测试工具,检查设备是否被正确识别,并且尝试发送数据。 5. 如果以上步骤都无法解决问题,尝试在 STM32F407 上使用一个简单的 LED 闪烁程序,以排除硬件问题。 |
|
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
4140 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
3228 浏览 1 评论
2753 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
2181 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
14984 浏览 2 评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
3088浏览 4评论
stm32f4下spi+dma读取数据不对是什么原因导致的?
1897浏览 3评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
2067浏览 3评论
1980浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
2169浏览 3评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 15:21 , Processed in 0.520497 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
4515