基于STM32的USB键盘制作(保姆级)(一)

本教程介绍如何使用STM32CubeMX配置USB-HID协议实现USB键盘功能,并基于稚晖君开源代码进行PCB按键映射分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录
第一节  USB协议及建立USB-HID工程

第二节  配置描述符及HID报文格式

第三节  PCB按键映射(基于稚晖君开源)


 

文章目录

前言

一、USB协议

二、新建一个USB-HID工程

1.时钟及GPIO配置

2.USB库的配置及部分参数分析

总结

 


前言

此系列主要讲利用cubemx配置USB-HID协议,实现USB键盘,以及稚晖君键盘映射代码分析。


 

一、USB协议

具体讲解参考这位大佬:USB具体通讯过程(含枚举过程)_go_str的博客-优快云博客

了解需要枚举的相关报文即可

 在创建USB工程中,我们主要设置设备描述符、配置描述符、报文描述符。下文讲解。

二、cubemx新建USB工程

 注:笔者使用的基于正点原子STM32MINI开发板实现,型号选择的为STM32F103RCT6。不同型号配置过程都类似。

1.时钟配置

 选择外部晶振时钟ae135c76ee234e08a8094e69cbcdf3bb.png

调试模式配置,SWD下载选择Serial Wire,JTAG下载选择4或5脚。这里笔者使用的正点原子开发板使用的是JTAG-5Pin。 注:这里有个值得注意的地方,若选择No Debug模式,则生成后的工程是默认关闭JTAG和SWD下载的,故之后将工程的HEX文件烧录进芯片后,因为程序中有执行关闭SWD及JTAG的函数操作,下一次是只能用串口下载(这里不了解的话会以为是DAP或者ST-Link坏了)。之后用串口下载一份打开了JTAG或SWD的HEX文件即可恢复正常。

f5330250102649ceb2cce31720b0c438.png

 

2.USB的配置

勾选即可,其他保持默认

ecb0c776147341e8a72312e7ef8a0444.png

 

选择CustomHID,其他参数全部默认,之后程序中修改,含义下文有讲解。

2827d565ceb84029b14fd3711819abc9.png

下面的参数解析:

USBD_CUSTOM_HID_REPORT_DESC_SIZE :报文描述符的大小(范围2-255)

USBD_CUSTOMHID_OUTREPORT_BUF_SIZE:输出报文缓冲区大小(范围:2-64)

 

圈中的是设置VID、PID标识。即:设备描述符内信息包括端点0的最大包长度,设备所支持的配置(Configuration)个数,设备类型,VID(Vendor ID,由USB-IF分配), PID(Product ID,由厂商自己定制)等信息。全部默认即可,修改了也不会对程序有影响。

c931997712dd49aaa810a265d41fb434.png

注:这里USB的时钟必须为48MHZ

bb5a1c8084c94ebb875e47cd97b8cdc4.png

中断不需要配置

 0d9ff52297494b2bb219766d070c0944.png

这里因为用的开发板,故使用的一个按键来表示键盘,即PC5对应的IO口,还配置了一个LED灯(可不用)。(原理都相同,按键个数后续更改几行程序即可修改)

1f811fffd82841d7b9bd461815a97723.png

因为USB的库文件使用了malloc函数在堆空间申请内存,故这里堆大小要设置一下。具体设置多大笔者也不太清除,我这里设置的0x600,目前未出现BUG。

c0231c59ab9b4b00b829fb89021f6181.png

 一定要勾选生成单独的C和H文件,后续好找到对应的修改。编译生成工程即可。

 0e9ae5ed5a684e01b3891cdb0a950637.png

三.烧录下载及一些坑点

  生成后的工程,直接编译下载到单片机上,连接上电脑。因为正点原子开发板自带有USB接口,故使用数据线连接即可。

下图为正点原子STM32MINI开发板的原理图,可以看到这里的D+引脚(对应单片机的PA12)是必须要有一个1.5K欧电阻上拉的,否则电脑检测不到,如果是自己制板需要注意 。

899ae8f74e34460e8e1017c6b31fd746.png

烧录进工程代码后,使用这里连接上电脑。

 66603bc44e4241b8868899ffb551ce41.jpeg

打开设备管理器,可以看见有USB设备的输入,但是有一个感叹号,双击它计算机会提示,存在未知报文符。是因为现在还没有配置相关报文以及设备的描述。配置讲在下一篇文章讲解。

d11c899bb57f4ae6840d0e41fcc42b2e.png

 


 

总结

本文主要介绍了USB-HID工程的新建及USB口连接需要注意的地方

 

 

 

 

<think>好的,我现在需要处理用户关于STM32键盘驱动开发的问题。用户明确提到了需要教程和示例代码,特别是与键盘驱动相关的。首先,我应该回顾用户提供的引用内容,看看是否有相关信息。 根据引用[1],有个基于STM32的TM1628驱动程序,用于LED显示和键盘输入。这可能是个有用的资源,因为TM1628支持键盘扫描。引用[3]提到了TM1650驱动,但主要是数码管驱动,不过可能涉及按键扫描。用户之前的查询可能和这些相关,所以需要重点参考这些内容。 接下来,我需要整理常见的STM32键盘驱动方案。用户可能对矩阵键盘和专用驱动芯片(如TM1628)感兴趣。矩阵键盘是基础,而TM1628这样的芯片可以简化设计。需要分步骤说明开发流程,包括硬件连接、GPIO配置、扫描逻辑以及示例代码。 还要注意用户提到的示例代码,引用[1]中的项目提供了TM1628的驱动代码,应该推荐这个链接。同时,引用[3]中的TM1650可能相关,但主要是数码管,不过可能有按键部分可以参考。 需要确保回答结构清晰,分点说明,并提供具体的步骤和代码示例。同时,生成相关的问题,比如如何优化扫描、消抖处理、低功耗设计等,这些可能都是用户后续会关心的问题。 最后,检查引用是否正确,确保每个引用标识对应正确的来源,并且没有遗漏用户的需求点。同时,保持语言简洁明了,符合中文回答的要求,避免使用Markdown格式,但按照用户的要求,行内公式用$...$,独立公式用$$...$$,不过在这个问题中可能用不到数学公式,但如果有的话需要正确应用。</think>根据您的需求,为您整理STM32键盘驱动开发的关键信息及资源: ### 、常见键盘驱动方案 1. **矩阵键盘驱动** - 采用$4 \times 4$或$8 \times 8$行列式结构 - 通过GPIO扫描行列电平变化实现检测[^3] - 计算公式:按键编号 = 行号 × 列数 + 列号 2. **专用驱动芯片方案** - TM1628芯片同时支持LED显示驱动和8×2键盘扫描[^1] - TM1650支持7段数码管显示和独立按键检测[^3] ### 二、开发流程(以TM1628为例) 1. **硬件连接** ```c /* STM32与TM1628接线示例 */ #define TM1628_CLK GPIO_Pin_13 // PC13 #define TM1628_DIO GPIO_Pin_14 // PC14 #define TM1628_STB GPIO_Pin_15 // PC15 ``` 2. **驱动配置** ```c void TM1628_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStruct.GPIO_Pin = TM1628_CLK | TM1628_DIO | TM1628_STB; GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOC, &GPIO_InitStruct); TM1628_SendCommand(0x03); // 设置显示模式 TM1628_SendCommand(0x44); // 固定地址模式 } ``` 3. **按键扫描实现** ```c uint8_t TM1628_ReadKeys(void) { uint8_t key_data[2] = {0}; TM1628_Start(); TM1628_SendByte(0x42); // 读键扫指令 key_data[0] = TM1628_ReadByte(); key_data[1] = TM1628_ReadByte(); TM1628_Stop(); return (key_data[1] << 8) | key_data[0]; } ``` ### 三、推荐资源 1. [TM1628完整驱动代码](https://gitcode.com/open-source-toolkit/0bb19)[^1] 2. [矩阵键盘消抖处理示例](https://gitcode.com/Resource-Bundle-Collection/249b1)[^3] 3. STM32CubeMX配置指南(官方文档) ### 四、芯片选型建议 | 芯片型号 | Flash | RAM | 适用场景 | |------------|-------|-------|---------------------| | STM32F103RC| 256K | 48K | 基础键盘应用 | | STM32F407VE| 512K | 192K | 复杂HID设备开发 | | STM32H750VB| 128K | 1056K | 高性能人机界面 | [^2]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大颜u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值