这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【手势翻页笔】过程贴-实现USBHIDKeyboard枚举

共3条 1/1 1 跳转至

【手势翻页笔】过程贴-实现USBHIDKeyboard枚举

高工
2024-05-19 22:12:15     打赏

我们将通过在之前基本作业的工程基础上实现USB功能的添加,以前对USB可以说是非常的抗拒的,其枚举过程相对来说是晦涩的,又是枚举、名称什么的,还有USB通道。本次咱们使用STM32CubeMX进行配置就方便很多了。

1.png

USB时钟使用的是固定值48MHz,以前遇到的开发板是可以配置成PLL提供的,不过也要注意计算能够分频到48MHz,本开发板使用的是HSI48 RC给USB提供基准。

2.png

打开USB功能项,并将其定义为设备,注意基本参数使用默认参数就可以,USB对应的引脚是PA11、PA12.

3.png

接下来是对USBX的具体配置,对于键盘来说话或者大多是USB来说配置的都是HID,也就是人机接口设备,其中有很多的描述符,这里面就有设备描述符,其内容就是主机识别它的基本信息(设备名称,PID,VID等等)。

接下来配置threadx,使用实时操作系统对各方面的响应会更方便,在threadx对USBx有专门的处理:

4.png

注意一下:我们的USB相关的初始化使用的是threadx线程去处理,所以在进行工程配置时不要自动进行初始化操作:

5.png

接下来生成我们代码,可以看到在main中多出来了MX_ThreadX_Init();,咱们一步一步的打开进去,在tx_initialize_kernel_enter()中找到tx_application_define()进入,里面就是所有的初始化步骤,其中就包括MX_USBX_Device_Init(VOID *memory_ptr)。由于我们采用了threadx,可以在USB初始化中看到:

6.png

我们需要在app_ux_device_thread_entry()中进行初始化的编写,由于MX_USB_PCD_Init();是在main.c中使用静态方法创立的,在其他文件中调用比较麻烦,一种是将其内的内容复制到MX_USB_PCD_Init()中,一种是在main中的初始化处进行提前调用,其他初始化代码如下:

7.png

我们下载到板卡上测试一下,卡在了USB的初始化出了,原因是内存分配失败了,我们修改如下两个内容:

8.png

        这两个地方尽量加大一点,4+2,8+4组合都在内存分配处失败了,采用16+8组合,正常初始化了:

9.png

        通过调试工具可以正常发现USB设备了,其PID以及VID与设置相符,到这里枚举成功了,完成提升作业中的实现STM32H503RB开发板的USB HIDKeyboard枚举部分。





关键词: 手势翻页笔     DIY     过程贴    

助工
2024-05-22 14:15:02     打赏
2楼

非常的详细了,感谢大佬的分享!


助工
2024-05-31 21:05:37     打赏
3楼

大佬带我,为什么我根据大佬的代码,一直报错,编译不过


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]