是STM32小白,刚入门那种。用的是:正点原子精英版(STM32F103ZET6) + win7(PC)
昨天按照CSDN上一片保姆级教程开始完成键盘的模拟,卡了不少常见bug,在这里记录下。
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位