利用STM32模拟键盘遇到问题的解决方案

文章记录了一名STM32初学者在制作USB键盘过程中遇到的问题,包括工程文件生成、Keil模式选择、存储路径中文导致的错误、按键弹出机制、HID报文格式和AD转换的细节。通过解决这些问题,作者实现了键盘的模拟功能,并提醒读者关注DMA设置和HID报文结构。

是STM32小白,刚入门那种。用的是:正点原子精英版(STM32F103ZET6) + win7(PC)

昨天按照CSDN上一片保姆级教程开始完成键盘的模拟,卡了不少常见bug,在这里记录下。

原文链接如下:(228条消息) 基于STM32的USB键盘制作(保姆级)(一)_stm32 usb键盘_元韭菜的博客-CSDN博客

1、遇到的问题:没有生成工程文件

一开始选择的是这个模式,这里原文作者没有细讲,所以在导入工程时废了很长时间搞清楚各个头文件的位置并添加路径(同时也要注意keil新建工程的时候一开始的选项里一定要勾选STARTUP,不然会很麻烦

 后面发现应该选择keil模式,这样会输出一个完整工程

2、第二次遇到的问题是生成的工程不能运行成功,这里借用下其他作者的图

 查阅了很多资料,发现是我的存储路径有中文的原因,更改了文件夹名字后依旧运行不了,发现是安装的时候这个文件夹的名字是中文,所以一直没能成功。只要重新创建一个英文文件夹并将STM32CUBEMX和JRE重新安装即可

3、这里对原文进行一些拓展补充

在实现按键输出之后会遇到的问题是:

一、按键一旦按下则会不断输出,也可以说是按键不会弹出,在查阅HID报文后发现可以令带信息的报文为0在发送一次就能够实现按键的弹出

 这样就会弹出,不过由于我使用的是多输入多输出模式,不知道为什么这段代码会导致下段代码无法输出,这点仍需后续考察。

二、我使用的是AD多通道转换与USB-HID相结合的形式,利用外接传感器实现对键盘的操控,存在的问题是往往会有一个AD口失灵,尝试修改采样时间后问题解决。猜测是由于采样时间过短采样过快导致该AD口信息被覆盖。

 三、这里介绍下HID报文发送格式

作者代码中E的报文如图,通过不断修改发现M的如上,通过不断测试后发现由于我的报文描述符描述的报文长度为8字节 ,选定的键盘的usage page为07页,在该页中,A应该是hidbuffer[2]=0x10,B为hidbuffer[2]=0x20,而G为hidbuffer[3]=0x04,即每八位对应上述划分的八个键盘符号,每当一位为1时,则表示该键被按下,同时为1则同时被按下,所以0xFF表示该区间所有按键都被按下。当然更深入的了解需要详细查阅HID的报文格式后才能理解。

四、当使用DMA采集信号时如果在stm32cubemx设置为Half Word时要注意下面这个参数,将其强制转换成32位

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值