STM32F103C8T6 USB实现键盘
创作时间:
作者:
@小白创作中心
STM32F103C8T6 USB实现键盘
引用
CSDN
1.
https://m.blog.csdn.net/m0_43559786/article/details/142777320
本文将详细介绍如何使用STM32F103C8T6微控制器通过USB实现键盘功能。通过本教程,读者将学习到如何新建工程、修改相关代码以及检测按键状态,最终实现一个简单的USB键盘。
一、新建工程
- 使用STM32CubeMX软件新建工程,双击选择所需内容。
- 在芯片选择界面找到并选择STM32F103C8T6。
进行RCC设置,选择外部高速时钟源。
SYS设置如下:
- USB设置,勾选Device(FS),参数默认。
- 选择HID人机接口,参数默认;如果电脑无法识别USB,需要修改VID和PID的参数。
时钟树设置:USB最大时钟频率为48MHz。
工程管理Project Manager设置:
二、修改usbd_hid.h和usbd_hid.c
由于生成的代码默认是鼠标相关的,需要进行一些修改才能应用于键盘。
- 修改usbd_hid.h:
- 将HID_EPIN_SIZE从4U修改为8U,即端点长度改为8。
- 将HID_MOUSE_REPORT_DESC_SIZE从72U修改为63U。
- 修改usbd_hid.c:
- 在USBD_HID_CfgFSDesc函数中,将0x02改为0x01(0=none, 1=keyboard, 2=mouse)。
- 修改HID_MOUSE_ReportDesc函数中的报告描述符,将鼠标描述符替换为键盘描述符:
0x05, 0x01, // USAGE_PAGE (Generic Desktop) //63
0x09, 0x06, // USAGE (Keyboard)
0xa1, 0x01, // COLLECTION (Application)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)
0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x08, // REPORT_COUNT (8)
0x81, 0x02, // INPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x08, // REPORT_SIZE (8)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0x95, 0x05, // REPORT_COUNT (5)
0x75, 0x01, // REPORT_SIZE (1)
0x05, 0x08, // USAGE_PAGE (LEDs)
0x19, 0x01, // USAGE_MINIMUM (Num Lock)
0x29, 0x05, // USAGE_MAXIMUM (Kana)
0x91, 0x02, // OUTPUT (Data,Var,Abs)
0x95, 0x01, // REPORT_COUNT (1)
0x75, 0x03, // REPORT_SIZE (3)
0x91, 0x03, // OUTPUT (Cnst,Var,Abs)
0x95, 0x06, // REPORT_COUNT (6)
0x75, 0x08, // REPORT_SIZE (8)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x65, // LOGICAL_MAXIMUM (101)
0x05, 0x07, // USAGE_PAGE (Keyboard)
0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))
0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)
0x81, 0x00, // INPUT (Data,Ary,Abs)
0xc0, // END_COLLECTION
三、修改main.c
- 添加必要的头文件和USB设备句柄:
/* USER CODE BEGIN Includes */
#include "usbd_hid.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */
/* USER CODE END PM */
/* Private variables ---------------------------------------------------------*/
/* USER CODE BEGIN PV */
extern USBD_HandleTypeDef hUsbDeviceFS;
- 添加用于传输键盘参数的数组变量buffer,以及用于清空按键的数组变量buffer_0:
/*
* buffer[0] - bit0: Left CTRL
* -bit1: Left SHIFT
* -bit2: Left ALT
* -bit3: Left GUI
* -bit4: Right CTRL
* -bit5: Right SHIFT
* -bit6: Right ALT
* -bit7: Right GUI
* buffer[1] - Padding = Always 0x00
* buffer[2] - Key 1
* buffer[3] - Key 2
* buffer[4] - Key 3
* buffer[5] - Key 4
* buffer[6] - Key 5
* buffer[7] - Key 6
*/
uint8_t buffer[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
uint8_t buffer_0[8] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
- 发送按键值到电脑:
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
buffer[2] = 0x04; //a
buffer[3] = 0x05;
buffer[4] = 0x06;
buffer[5] = 0x1C;
buffer[6] = 0x1D;
USBD_HID_SendReport(&hUsbDeviceFS, buffer, 8); //send
HAL_Delay(20); //delay
USBD_HID_SendReport(&hUsbDeviceFS, buffer_0, 8);
HAL_Delay(1000);
}
/* USER CODE END 3 */
四、按键检测
可以使用在线键盘测试工具来检测哪些按键被按下。参考文章:在线键盘测试
热门推荐
从邻家女孩到只会露腿扭臀的舞星,单依纯经历了什么?
哪些软件可以实现AI换脸?
婴儿的口腔卫生:如何保持健康牙齿
影响虚拟货币价格的因素究竟有哪些?
车内环境如何导致驾驶疲劳
天德贵人的查法与意义:八字命理中的贵人运详解
天德贵人的查法与意义:八字命理中的贵人运解析
米国大非农为什么被称为数据之王?它和比特币之间又存在什么样的关联?
医生提醒:这五类人不宜食用鹅肉
如何引导初三孩子正确看待早恋
春色撩人的10个古镇,好想去小住几天
印度“种姓制度”:森严等级让人望而生畏,底层民众生命贱如蝼蚁
开源项目:基于SpringBoot的学生综合素质评价系统
樊嘉院士团队最新研究:新型检测方法有助于及早发现肝癌
社区服务:开启老年人积极健康生活的新篇章
杨柏龙教授详解八段锦:八段动作功效与教学视频
次新房是什么?次新房与新房的区别有哪些?
禧玛诺 vs 速联:自行车组件两大巨头的技术对决
羊毛疔是什么意思
从战争变迁看“人定胜天”观念的起伏
从社会学、哲学与伦理学角度分析《哪吒2》的角色及其现实社会影响
粤语为何“粤”说“粤”动听?广东人最懂了!
突破传统叙事框架,《我们决定离开这颗星球》女性科幻小说集问世
快充5A好还是6A好?
如何选择适合的硬件配置以构建高效视频剪辑设备:专业人士的得力工具
重塑哪吒的莲藕还有这些食补功效,但这些人群不宜食用
Excel计算应发工资和实发工资的详细教程
液体电介质的电击穿理论
细说儿童产品中的色彩搭配及使用
补钙能预防骨质疏松?科学补钙做好这三点!