使用 STM32CubeIDE 开发基于 STM32 的 HID 鼠标或键盘

STM32CubeIDE 安装

STM32CubeIDE 是 ST 官方新出的一款集成了 CubeMX 的开发环境,上手很简单。
下载官方安装包即可,需要注册。之后一路 next 安装即可。


安装包

从零开始创建工程并实现鼠标功能

新建工程

安装完 STM32CubeIDE 后在此处创建一个新的 STM32 工程。

选择型号

选择你使用的单片机型号,我使用的 STM32F103C8T6 的最小系统板。

项目

输入一个项目名称。

设置时钟

现在开始进行项目的配置,STM32CubeIDE 内部集成了 CubeMX ,可以通过鼠标点点点的方式搭建好开发环境,后续的开发默认基于 HAL 库。首先我们需要设置时钟,在此处选择外部晶振。

开启调试功能
开启 USB 外设
选择功能

在开启 USB 功能后,在 USB_DEVICE 选项中选择 HID 设备。默认创建就是一个鼠标设备。

参数调整

在此处可以调整设备的 VID,PID。自行定义厂商和设备描述字符串。注意,假如你之前在你的电脑上开发过 USB 设备,需要更换和之前不同的 VID,PID,否则电脑不会加载正确的鼠标驱动。

配置时钟树

之后配置时钟树,注意要填写你实际的晶振频率(应该大部分默认的都是 8M 吧)。

生成环境

点这个来生成环境。

main.c 的位置

之后就突突突出来一堆文件了。找到 main.c 并打开,就开始敲代码了。

声明外部变量

后续使用的 USB 设备句柄是在系统生成的文件 usb_device.c 中定义的,这点与其他(SPI,串口)等外设不太一样,所以使用的时候需要声明外部变量。

main 函数

之后往下拉到 main 函数中,照着图上添加代码就行。那个 USBD_HIDSendReport() 函数就是向主机发送报告的,发送的报告其实就是鼠标移动的数据。鼠标移动的数据一次报告四个字节,意思随便查一下就能查到。

编译

= =

我觉得这个就是编译的意思,哈哈。
编译后应该是没有错误,有一个警告,在调用前未声明函数,现在就先不改了。

配置调试功能
配置调试功能

双击红框框里的那个,创建一个配置,按你的设备选择好就行,使用官方的调试器的话调试器和开发板都要供电,并且把开发板的 3.3V 连接到调试器的 3.3V 上。

下载程序

之后点击调试就行了,代码编译好就下载到开发板中了。

之后我们应该能看到鼠标在往右移动,每次10像素。
设备和打印机中也能看到我们的鼠标了。


鼠标

键盘功能

下面试一下把鼠标功能改成键盘。

更改标识符们
更改标识符们

此文件中的一定要都修改了,用搜索功能来确认下。全文件应该共有三处这样的。

还有一个单独的这个
替换描述符
替换描述符

接下来替换描述符。把鼠标的换成键盘的,注意长度也要一起替换。

替换初始化函数中的描述符

如图,替换此函数中的描述符。

修改声明

图中两处都要修改,第 45 行的是发送的报告长度,50 行是描述符长度。

修改VID PID

修改 VID 和 PID 不然电脑无法识别成键盘,会按照原来的 VID 和 PID 识别成鼠标,从而无法正常工作。

main.c

主函数中这样模拟按下后松开一个键。

键盘发送给PC的数据每次8个字节:BYTE1 BYTE2 BYTE3 BYTE4 BYTE5 BYTE6 BYTE7 BYTE8。定义分别是:
BYTE1 --
|--bit0: Left Control 是否按下,按下为1
|--bit1: Left Shift 是否按下,按下为1
|--bit2: Left Alt 是否按下,按下为1
|--bit3: Left GUI 是否按下,按下为1
|--bit4: Right Control 是否按下,按下为1
|--bit5: Right Shift 是否按下,按下为1
|--bit6: Right Alt 是否按下,按下为1
|--bit7: Right GUI 是否按下,按下为1
BYTE2 -- 暂不清楚,有的地方说是保留位
BYTE3--BYTE8 -- 这六个为普通按键

设置 - 设备中的效果

你可能感兴趣的:(使用 STM32CubeIDE 开发基于 STM32 的 HID 鼠标或键盘)