STM32CubeIDE 安装
STM32CubeIDE 是 ST 官方新出的一款集成了 CubeMX 的开发环境,上手很简单。
下载官方安装包即可,需要注册。之后一路 next 安装即可。
从零开始创建工程并实现鼠标功能
安装完 STM32CubeIDE 后在此处创建一个新的 STM32 工程。
选择你使用的单片机型号,我使用的 STM32F103C8T6 的最小系统板。
输入一个项目名称。
现在开始进行项目的配置,STM32CubeIDE 内部集成了 CubeMX ,可以通过鼠标点点点的方式搭建好开发环境,后续的开发默认基于 HAL 库。首先我们需要设置时钟,在此处选择外部晶振。
在开启 USB 功能后,在 USB_DEVICE 选项中选择 HID 设备。默认创建就是一个鼠标设备。
在此处可以调整设备的 VID,PID。自行定义厂商和设备描述字符串。注意,假如你之前在你的电脑上开发过 USB 设备,需要更换和之前不同的 VID,PID,否则电脑不会加载正确的鼠标驱动。
之后配置时钟树,注意要填写你实际的晶振频率(应该大部分默认的都是 8M 吧)。
点这个来生成环境。
之后就突突突出来一堆文件了。找到 main.c 并打开,就开始敲代码了。
后续使用的 USB 设备句柄是在系统生成的文件 usb_device.c 中定义的,这点与其他(SPI,串口)等外设不太一样,所以使用的时候需要声明外部变量。
之后往下拉到 main 函数中,照着图上添加代码就行。那个 USBD_HIDSendReport() 函数就是向主机发送报告的,发送的报告其实就是鼠标移动的数据。鼠标移动的数据一次报告四个字节,意思随便查一下就能查到。
我觉得这个就是编译的意思,哈哈。
编译后应该是没有错误,有一个警告,在调用前未声明函数,现在就先不改了。
双击红框框里的那个,创建一个配置,按你的设备选择好就行,使用官方的调试器的话调试器和开发板都要供电,并且把开发板的 3.3V 连接到调试器的 3.3V 上。
之后点击调试就行了,代码编译好就下载到开发板中了。
之后我们应该能看到鼠标在往右移动,每次10像素。
设备和打印机中也能看到我们的鼠标了。
键盘功能
下面试一下把鼠标功能改成键盘。
此文件中的一定要都修改了,用搜索功能来确认下。全文件应该共有三处这样的。
接下来替换描述符。把鼠标的换成键盘的,注意长度也要一起替换。
如图,替换此函数中的描述符。
图中两处都要修改,第 45 行的是发送的报告长度,50 行是描述符长度。
修改 VID 和 PID 不然电脑无法识别成键盘,会按照原来的 VID 和 PID 识别成鼠标,从而无法正常工作。
主函数中这样模拟按下后松开一个键。
键盘发送给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 -- 这六个为普通按键