首先,感谢EEPW提供的这次学习机会!
课程二中,我们已经实现了利用PAJ7620U2模块,实现9种手势的识别,并将识别结果打印到串口COM3。
要实现翻页笔功能,我们只要识别出手势后输出串口打印的同时,向模拟不通的按键就可以了。这就需要本节课的USBHIDKeyboard虚拟键盘枚举功能。
控制PPT我们知道,一般用到的快捷键如下几个,我们映射到不同的手势:
(1) 上一页(PgUp) --> 向上手势
(2) 下一页(PgDown) --> 向下手势
(3) 全屏播放(F5) --> 顺时针
(4) 退出全屏(ESC) --> 逆时针
先复习下第二课:https://forum.eepw.com.cn/thread/383138/1
一.硬件准备工作
在第二节硬件的基础上,本节课需要添加虚拟usb键盘,所以需要额外的一根usb typec数据线,连接开发板的另一个usb口到电脑上。
也就是说,之前的usb口用于debug和com3串口打印,新连接的usb口来模拟一个插入到电脑的虚拟键盘。整个结构如下图:
二. 软件配置
在课程2的基础上,本节任务是增加USBHIDKeyboard功能。
打开课程2的CubeMX配置文件,需要利用ThreadX操作系统的功能实现USB HID 虚拟键盘功能。对于ThreadX操作系统本人并不熟悉,主要参考了各位大佬的配置方法,链接如下:https://forum.eepw.com.cn/thread/382689/1
1. 设置系统的时基Timebase
因为要引入RTOS,它使用了SysTick作为时基,因此HAL库就不推荐共用SysTick共用时基。更改HAL时基为TIM6定时器:
2. 打开USB外设,并在NVIC中设置中断优先级
3. 启用ThreadX操作系统:
4. 配置ThreadX的usb库USBX:
5. 确认系统时钟
6. 配置并导出代码
三、代码部分
这部分主要是修改自动生成的USB虚拟键盘代码,实现根据识别出的手势值,发送对应的按键值给电脑端。生成的USBKeyBoard代码,主要在ux_device_keyboard.c/.h 和 app_usbx_device.c/.h这两对文件中。下面我们来一个个看。
只列出主要的修改的地方,完整的工程代码,打包放在文末,可直接下载。
1. 修改ux_device_keyboard.c代码
在对应的头文件中,需要导出hid_keyboard变量的声明给后续使用:
2. 修改app_usbx_device.c代码:
在UINT MX_USBX_Device_Init(VOID *memory_ptr)和static VOID app_ux_device_thread_entry(ULONG thread_input)函数中增加代码:
编写自定义函数:static VOID usbx_hidkeyboard_thread_entry(ULONG thread_input), 具体代码请文末下载:
编写自定义函数:VOID USBX_APP_Device_Init(VOID), 具体代码文末可下载:
这样整个虚拟键盘的枚举,以及检测到手势后的输出按键值,功能都完成了。 编译下载,我们开始测试!
四 测试结果
可以看到手势的输出到COM3口,同时检测到手势输出按键值控制ppt
看下测试结果(b站视频), 效果还是非常不错的!
https://www.bilibili.com/video/BV1SH4y1F7Cf?p=4
附完整工程源代码: KeyboardDemo.zip
-----------------------------------
项目完结,撒花~~#