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

发布者:快乐奇迹最新更新时间:2025-01-20 来源: jianshu关键字: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 引用地址:使用 STM32CubeIDE 开发基于 STM32 的 HID 鼠标或键盘

上一篇:STM32学习:USART串口通信
下一篇:关于stm32串口必须要学的5个串口以及串口应用和注意事项

推荐阅读最新更新时间:2026-03-20 12:43

stm32的usb hid实现游戏控制器
1、 用cubemx生成基础工程,游戏控制器一般就是按钮和旋钮的组合,按钮就是gpio,旋钮是adc。具体配置就不罗嗦了。 connectivity这里打开usb,勾选Device,参数保持默认即可。 Middleware and Software Packs这里选择USB_DEVICE,Mode这里选择Custom HID,参数如果懂可以根据需求改,不懂保持默认,后边我们在代码里改也可以。 之后配置好时钟和其他设置,生成代码即可。 2、 我用的vscode+platformio开发环境,新建工程并打开导出的代码。Cubemx和platformio的文件夹结构不同,需要挪一下文件,主要是将Core/Src下的文件放
[单片机]
STM32 基础系列教程 25 - USB_HID_mouse
前言 学习stm32 USB接口使用,学会用CUBE工具快速创建USB设备工程及调试,关于usb的相关知道请读者提前准备并学习,当然如果不想深究其中原理的话,跟着本文来操作就可以实现基于USB的设备开发了。需要提示的是,stm32在使用usb接口功能是一般需要在DP引脚上上拉一个1.5K电阻到3.3V(部分MCU内部会上拉)。 示例详解 基于硬件平台: STM32F10C8T6最小系统板, MCU 的型号是 STM32F103c8t6, 使用stm32cubemx 工具自动产生的配置工程,使用KEIL5编译代码。 本示例所用的最小系统板原理图: 从本节开始,关于CUBEMX工具及KEIL工具的操作将不再细讲,如
[单片机]
<font color='red'>STM32</font> 基础系列教程 25 - USB_<font color='red'>HID</font>_mouse
STM32 USB HID 自定义设备 bulk 传输
ST(意法半导体公司)为STM32系列处理器编写了外设USB的库,并提供了很好的参考例程,本文就是参考ST提供的例程,在STM32F4 discovery板子上实现usb bulk传输。Host端是在linux平台上利用libusb库函数写的读写USB应用。 本次实现在STM32 USB例程中的Device HID 鼠标例程基础上添加bulk传输端点修改而来。 usb_conf.h 文件中添加 bulk传输端点 /* * endpoint 0x80 and 0x00 are used for enumerating device. * endpoint 0x81 and 0x80 are used for cont
[单片机]
STM32的CustomHID的各描述符介绍
俗话说的好,看协议手册,不如看源代码来的好!在USB的工程中,USB的各描述符定义在usb_desc.c文件里面,这里就将USB的各描述符定义代码贴上来,各个数值的意义都已经详细注释。当然很细节的东西看不懂还是建议去看手册去!!! /* USB标准设备描述符*/ const uint8_t CustomHID_DeviceDescriptor = { 0x12, /*bLength:长度,设备描述符的长度为18字节*/ USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType:类型,设备描述符的编号是0x01*/ 0x00, /*bcdUSB
[单片机]
STM32 USB-HID的调试记录
1、使用USB 的鼠标方式进行。HID设备方式,即插即用。在输入端可以看到人体输入端; 2、HID设备,可以使用porthelper调试USB,BUS Hound抓取USB包。 资料参考1: http://www.openedv.com/posts/list/41451.htm 2.1 通过Bus Hound软件可以看到连接成功外设USB设备:(如下图所示) 2.2 鼠标按下后获取的数据,左键、右键还有翻页和空键。 2.3 USB调试器可以发现外接的设备。查找后界面如下。但是无法在接收区接收到数据。 将CC1101和USB-HID通信以及串口结合起来,做了简单的演示功能。 测试条件:PC机使用
[单片机]
<font color='red'>STM32</font> USB-<font color='red'>HID</font>的调试记录
完成stm32HID的应用
这个是公司的项目,以前基于usb的虚拟串口来做上下位机通信,由于usb平时也就刷参数和调试之用,也不很常用,外面反应usb有时会连不上stm32控制器,心里一直认为不是大问题,后来反应的多了,就重视这个事情了,虽然usb平时不用,但是用的时候只要出现异常掉线,就再也连不上去了,特别影响用户对我们产品的信心。 在网上找了很多资料,到现在也只能隐约确定是stm32官方的虚拟串口库有问题,我发现不同的电源板都会影响到usb虚拟串口的枚举,于是下定决心使用其他方式来做上下位机的连接,排除了usb虚拟串口,眼前的选择只有两个 1)usblib,这个是针对usb的上位机库,可以玩很多的花样,但是需要开发者稍稍熟悉usb协议,而且这个需要在
[单片机]
搭建开发环境 --- 基于STM32CubeIDE
概述 目前主流的STM32开发环境是ARM公司的KEIL软件,由于KEIL对于STM32大部分型号是收费的,使用需要破解,存在版权问题。并且使用KEIL编译大型工程,编译太慢,编译耗时长。因此本系列博客使用的开发环境将全部使用免费的软件工具。 软件工具 本系列博客将使用以下软件工具进行开发: STM32CubeIDE --- 建立工程、代码编辑、编译、调试、下载 STM32CubeProg --- 单独的下载程序 Git Bash / TortoiseGit --- 版本控制工具 备注:其中 TortoiseGit 工具没有桌面图标,它是基于右键菜单的工具。 图片.png 软件下载链接: STM32CubeIDE:
[单片机]
STM32CUBEIDE(3)----GPIO输出模式,速率测试、开漏和输出说明
概述 本章主要GPIO输出模式下不同配置的说明。 最近在弄ST和GD的课程,需要样片的可以加群申请:615061293。 生成例程 使用STM32CUBEMX生成例程,这里使用NUCLEO-L476RG开发板,因为我这只有这款板子的主频较快。 不同速率对应的波形 以PC3为例,在推挽输出无上下拉情况下,输出速率主要有4种,一般的低端MCU只有3种,没有Very High。 LOW速率 Medium速率 High速率 Very High速率 可以看到,在不同速率下,端口的反应速度不一样,设置最大输出速率越大,响应越快,对应的噪声也就越大。 输出方式 在上图中,P-MOS带了一个⚪,说明是低电平导通。
[单片机]
<font color='red'>STM32CUBEIDE</font>(3)----GPIO输出模式,速率测试、开漏和输出说明
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved