[STM32F0] STM32F042F6P6生成HID工程模拟USB鼠标

[复制链接]
1147|18
 楼主| goodluck09876 发表于 2019-8-2 08:46 | 显示全部楼层 |阅读模式
STM32F042F6P6生成HID工程模拟USB鼠标
 楼主| goodluck09876 发表于 2019-8-2 08:46 | 显示全部楼层
 楼主| goodluck09876 发表于 2019-8-2 08:46 | 显示全部楼层
直接上工程配置了。

582325d4387ee8114d.png
 楼主| goodluck09876 发表于 2019-8-2 08:46 | 显示全部楼层
打开SWD调试,开引脚映射,打开USB(由于引脚占用,USB必须引脚映射后才能开启),设置好对应按键和LED的引脚输出输入模式:

481415d4387fa35a66.png
 楼主| goodluck09876 发表于 2019-8-2 08:47 | 显示全部楼层
设置系统时钟,这里进去后自动设置:

659615d4388064d924.png
 楼主| goodluck09876 发表于 2019-8-2 08:47 | 显示全部楼层
设置USB模式,进入GPIO配置:

640395d43881157227.png
 楼主| goodluck09876 发表于 2019-8-2 08:47 | 显示全部楼层
设置好按键和LED的输入输出模式,按键为上拉输入,当按键按下时检测为低:

658935d43881da4b63.png
 楼主| goodluck09876 发表于 2019-8-2 08:47 | 显示全部楼层
配置工程输出:设置工程名、工程路径、IDE:

507395d4388291ff25.png
 楼主| goodluck09876 发表于 2019-8-2 08:47 | 显示全部楼层
点击生成工程,等待一会:

301875d43883493dcc.png
 楼主| goodluck09876 发表于 2019-8-2 08:48 | 显示全部楼层
工程生成完后可直接打开,Keil对于STM32F0/L0系列的单片机是免费授权的,大家可以不用去下盗版**,直接到官网下载最新的Keil就可以了,新的Keil编译似乎快了不少,详情:http://www2.keil.com/stmicroelectronics-stm32/mdk
430565d43884b11fe6.png
 楼主| goodluck09876 发表于 2019-8-2 08:48 | 显示全部楼层
打开工程,编译,下载(我这里用的是ST-LINK下载),下载完成后,插上USB线到电脑上,会自动识别新设备,如下:

625955d43885c34a4e.png
 楼主| goodluck09876 发表于 2019-8-2 08:48 | 显示全部楼层
可以改以下文件修改设备名称等:

741785d4388669a7e7.png
 楼主| goodluck09876 发表于 2019-8-2 08:48 | 显示全部楼层
修改后编译、下载,电脑里检测的设备名称就已经变了:

374735d438878c87e8.png
 楼主| goodluck09876 发表于 2019-8-2 08:49 | 显示全部楼层
下面我们来修改main.c,添加按键检测和LED灯代码,当按下按键时,灯就会亮,松开后就灭,在while(1)下添加如下代码:

if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin) == 0)
{
   HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET);
}
else
   HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET);

777315d43888f41c23.png
 楼主| goodluck09876 发表于 2019-8-2 08:49 | 显示全部楼层
然后编译,下载,重新运行之后是不是当按下按键的时候LED就亮了呢?

继续添加USB鼠标的代码,在main.c的程序头加入如下头文件:

#include "usbd_hid.h"

881945d4388a821cfd.png
 楼主| goodluck09876 发表于 2019-8-2 08:50 | 显示全部楼层
在main函数中定义一个4位数组,用来存放要发送到电脑的鼠标动作信息:

  /*
* buffer[0] - bit0: Left button 左键
*             bit1: Right button 右键
*             bit2: Middle button 中键
* buffer[1] - Cursor movement X axis 水平移动
* buffer[2] - Cursor movement Y axis 垂直移动
* buffer[3] - Wheel vertical movement 滚轮转动
*/char buffer[4] = {0x00, 10, 10, 0};

在按键检测的判断中添加一条发送语句:


USBD_HID_SendReport(&hUsbDeviceFS, buffer, 4);

330545d4388c91edcf.png
 楼主| goodluck09876 发表于 2019-8-2 08:50 | 显示全部楼层
再次编译下载并重新运行,USB插到电脑上后,按下按键,LED亮并且电脑上鼠标会向右下方移动。鼠标的其它参数输出请自行补充。

评论

哥你的教程很有用,左键按下和抬起该怎么写呢?  发表于 2019-9-22 19:28
NickyGrout 发表于 2019-9-22 21:54 | 显示全部楼层
这是手把手指导呀,就差上实例了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

220

主题

5843

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部