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

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

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

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


 

文章目录

前言

一、USB协议

二、新建一个USB-HID工程

1.时钟及GPIO配置

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

总结

 


前言

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


 

一、USB协议

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

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

 在创建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口连接需要注意的地方

 

 

 

 

  • 11
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大颜u

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

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

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

打赏作者

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

抵扣说明:

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

余额充值