目录
图形化编程界面配置
最近测试了stm32H5的usbx的hid功能,根据st官网了解到usbx需要基于threadx来配置,目前我尝试过单独usbx的配置,但是没有成功通信(有大佬有办法,非常欢迎交流)。
首先来看一下ide的配置,主要是和usbx相关的配置:
1.因为用到了threadx,所以SYS配置为TIM6
2.USB配置Device only
下方参数默认不修改即可。
3.打开THREADX
threadx有些stack可以配置大一些
4.接下来就是配置USBX
下面参数基本上默认即可,某些参数可以根据自己实际情况来修改。
问题修改
经过上面的配置,生成了代码之后,发现电脑(host)识别不到mcu(device),首先想到的是在图形化编程的过程中是不是有些参数设置的不对,但是改了很多发现没有什么用,还是识别不到。
最后经过仔细的比对,发现在生成的代码中有两个函数没有内容,按照下文函数来补全即可识别到:
static VOID app_ux_device_thread_entry(ULONG thread_input)
{
/* USER CODE BEGIN app_ux_device_thread_entry */
//TX_PARAMETER_NOT_USED(thread_input);
USBX_APP_Device_Init();
/* USER CODE END app_ux_device_thread_entry */
}
VOID USBX_APP_Device_Init(VOID)
{
/* USER CODE BEGIN USB_Device_Init_PreTreatment_0 */
/* USER CODE END USB_Device_Init_PreTreatment_0 */
/* initialize the device controller HAL driver */
MX_USB_PCD_Init();
/* USER CODE BEGIN USB_Device_Init_PreTreatment_1 */
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x00, PCD_SNG_BUF, 0x14);
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x80, PCD_SNG_BUF, 0x54);
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x81, PCD_SNG_BUF, 0x94);
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x01, PCD_SNG_BUF, 0xD4);
HAL_PCDEx_PMAConfig(&hpcd_USB_DRD_FS, 0x82, PCD_SNG_BUF, 0x114);
/* USER CODE END USB_Device_Init_PreTreatment_1 */
/* Initialize and link controller HAL driver */
ux_dcd_stm32_initialize((ULONG)USB_DRD_FS, (ULONG)&hpcd_USB_DRD_FS);
/* Start the USB device */
HAL_PCD_Start(&hpcd_USB_DRD_FS);
/* USER CODE BEGIN USB_Device_Init_PostTreatment */
/* USER CODE END USB_Device_Init_PostTreatment */
}
修改了之后主机应该就能识别到。
COMHID通信配置
在电脑可以正确识别到我们的device后,我们就可以进行下一步的调试。
1.首先在ux_device_descriptors.c文件中修改USBD_CustomHID_ReportDesc[]
(因为我目前没用到这方面,所以我就先注释掉了)usb描述符相关的就不过多介绍了。
2.找到发送函数和接受函数。
首先要注意,下图的选项要打开:
下图函数为发送函数,我们可以用它来发送数据,这是一个中断时候调用的函数,当device接收到host发送的数据,就会调用:
上图中1是hid接受数据函数,我用2中函数将1接收到的数据存到数组里,接着根据收到的不同数据,使用3(hid发送函数)来发送。图中的switch就是为了根据收到的不同内容来做出不同的回应。(一共是通信64个字节)
这样comhid就通信成功了