一、前言
关于这章主要是基于我前面的那篇文章
链接: 关于怎么用Cubemx生成的USBHID设备实现读取一体的鼠标键盘设备(改进版)
https://blog.youkuaiyun.com/qq_29187987/article/details/139535648?spm=1001.2014.3001.5501
引用的文章的简介
引用的这篇文章主要就是讲如何在STM32上配置用于界面的鼠标和键盘,一般的STM32的配置都是只有一个鼠标或者一个键盘,这篇文章主要是用STM32读取现在市面上的一体化的USB鼠标键盘,实现这种一个USB的鼠标键盘的STM32配置。
关于这篇文章的实现
由于上面那篇文章的实现,可以读取到鼠标和键盘的数据,但是其实鼠标并没有完全实现,鼠标移动的时候会有漂移的现象,所以这篇文章主要根据linux读取USB的方法,将STM32也实现linux下的USB鼠标键盘操作。并显示在界面上。
二、解决鼠标漂移的方法
要完全复现linux下的鼠标,就要先了解鼠标会给STM32发送多少数据。根据网上的各种文章参考,鼠标给STM32和给电脑的数据都是8个字节。
插述:关于网上的一些说法
参考文章:链接: 罗技 无线鼠标 USB HID数据格式
https://blog.youkuaiyun.com/sinat_23998749/article/details/123572543
这篇文章是我参考的文章,但是有一些和我现在这个杂牌子的鼠标不太一样,不知道是不是鼠标不一样还是什么情况,文章中数据字节的意义不对。
鼠标的数据解析
STM32中,配置为USB HOST后,Cubemx会自动生成代码,其中有一个文件usbh_hid_mouse.c里,是关于解析鼠标数据的函数。下面是部分解析用的代码。
下面展示一些 内联代码片
。
static const HID_Report_ItemTypedef prop_x =
{
(uint8_t *)(void *)mouse_report_data + 1, /*zijie3 data*/
8, /*size*/
0, /*shift*/
0, /*count (only for array items)*/
1, /*signed?*/
0, /*min value read can return*/
0xFFFF,/*max value read can return*/
0, /*min vale device can report*/
0xFFFF,/*max value device can report*/
1 /*resolution*/
};
1、函数添加
其中,mouse_report_data + 1的部分就是第1个字节的数据。,所以,要解析所有的鼠标数据,所以要多创建几个这个结构体,并且修改下要要解析第几个数据。具体如下:
创建prop_y,读取第二个字节数据。
下面展示一些 内联代码片
。
static const HID_Report_It