STM32CUBEMX简单几步,DIY基于STM32的可编程USB鼠标,硬件自动化助手

news/2025/1/12 12:20:29/

STM32CUBEMX配置实现STM32 USB鼠标功能

提示:某项目需要用到可编程的USB鼠标,索性通过STM32结合STM32CUBEMX软件实现。

文章目录

  • STM32CUBEMX配置实现STM32 USB鼠标功能
  • 前言
  • 一、下载安装
    • 1.下载
    • 2.安装
  • 二、配置步骤
    • 1.创建项目
    • 2.引脚配置
    • 3.时钟配置
    • 4.生成代码
  • 三、修改代码
    • 1.向usb_device.c文件添加用户函数
    • 2.在usb_device.h文件声明用户函数
    • 3.向main.c文件添加测试程序
  • 四、内容拓展
    • 1.USB鼠标数据格式
    • 2.USB接口硬件电路


前言

周所周知,嵌入式设备程序开发最为繁琐的工作莫过于各种库的编写和初始化函数的编写。STM32CubeMX(STM32 configuration and initialization C code generation)是一个图形化的工具,通过直观的可视化配置STM32初始化各项参数和功能,并且能够自动生成对应的C代码,大大提高开发效率。

对于制作一个可编程的USB鼠标,需要读懂几百页的USB协议文档才算入门,用兴趣可以通过此链接查看https://usb.org/ 。但站在巨人的肩膀上能看得更远,STM32CUBEMX软件能够帮我们把USB协议的各自库函数编写好,即使不懂USB协议也能流畅使用USB功能。

一、下载安装

1.下载

下载安装最新版本STM32CubeMX,本文使用的版本为V6.4.0,其他版本区别不大,下载链接:
https://download.csdn.net/download/XHL9434826546/75058920
(对于官网下载困难的用户可以下载,截止2022年1月发布的最新版本V6.4.0,适用于Windows平台,也可以访问官网进行下载:https://www.st.com/en/development-tools/stm32cubemx.html)

2.安装

全英文版,安装路径最后不要有任何中文,根据提示一路下一步,成功安装主界面如下:
在这里插入图片描述

二、配置步骤

1.创建项目

选择第一个,进入MCU选择器。
在这里插入图片描述
输入STM32F103C8筛选出对应的型号,点击开始项目按钮。
在这里插入图片描述

2.引脚配置

配置高速时钟源引脚与为外部晶振(默认8M)连接,
在这里插入图片描述
打开USB功能,
在这里插入图片描述
配置USB设备,设备名称和产品名称可以随意修改,这里默认保存不变
在这里插入图片描述

3.时钟配置

直接输入HCLK时钟为72,USB时钟为48,软件会自动匹配其他各个分频因子。
在这里插入图片描述

4.生成代码

输入项目名称,生成项目的路径(路径不能有任何中文,否则会报错),编译器类型以及最低版本
在这里插入图片描述
本文使用的IDE为Keil uVision V5.25.2.0
在这里插入图片描述
生成后直接点击打开项目
在这里插入图片描述
点击编译,0错误,0警告,表示生成成功。
在这里插入图片描述

三、修改代码

1.向usb_device.c文件添加用户函数

插入用户自定义函数,这里写了5个常用函数,分别是鼠标单击左/右/中键、鼠标滚动和鼠标移动,可根据需要添加更多函数。

/** -- Insert your external function declaration here --*/
/* USER CODE BEGIN 1 */
void Click_L()
{uint8_t buf0[4] = {1,0,0,0};uint8_t buf1[4] = {0,0,0,0};USBD_HID_SendReport(&hUsbDeviceFS,buf0,4);//按下鼠标左键HAL_Delay(10);USBD_HID_SendReport(&hUsbDeviceFS,buf1,4);//松开鼠标按键HAL_Delay(10);
}
void Click_R()
{uint8_t buf0[4] = {2,0,0,0};uint8_t buf1[4] = {0,0,0,0};USBD_HID_SendReport(&hUsbDeviceFS,buf0,4);//按下鼠标右键HAL_Delay(10);USBD_HID_SendReport(&hUsbDeviceFS,buf1,4);//松开鼠标按键HAL_Delay(10);
}
void Click_M()
{uint8_t buf0[4] = {4,0,0,0};uint8_t buf1[4] = {0,0,0,0};USBD_HID_SendReport(&hUsbDeviceFS,buf0,4);//按下鼠标右键HAL_Delay(10);USBD_HID_SendReport(&hUsbDeviceFS,buf1,4);//松开鼠标按键HAL_Delay(10);
}
void Scroll(int8_t x)
{uint8_t buf[4] = {0,0,0,0};buf[3]=x;USBD_HID_SendReport(&hUsbDeviceFS,buf,4);//鼠标滚动HAL_Delay(10);
}
void Move(int8_t x,int8_t y)
{uint8_t buf[4] = {0,0,0,0};buf[1]=x;buf[2]=y;USBD_HID_SendReport(&hUsbDeviceFS,buf,4);//鼠标移动HAL_Delay(10);
}
/* USER CODE END 1 */

2.在usb_device.h文件声明用户函数

/** -- Insert functions declaration here --*/
/* USER CODE BEGIN FD */
void Click_L();
void Click_R();
void Click_M();
void Scroll(int8_t x);
void Move(int8_t x,int8_t y);
/* USER CODE END FD */

3.向main.c文件添加测试程序

	/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */Move(100,0);//向右移动100个像素Click_R();//单击右键HAL_Delay(1000);//延时1秒Move(0,100);//向下移动100个像素Click_R();//单击右键HAL_Delay(1000);//延时1秒Move(-100,0);//向左移动100个像素Click_R();//单击右键HAL_Delay(1000);//延时1秒Move(0,-100);//向上移动100个像素Click_R();//单击右键HAL_Delay(1000);//延时1秒}/* USER CODE END 3 */

查看设备管理器,多出一个鼠标。通过测试鼠标每隔1秒在左下右上循环点击右键,验证成功。
在这里插入图片描述

四、内容拓展

1.USB鼠标数据格式

可以发现,定义用户函数时通过USB接口向主机发送了4个字节的数据,而不同的数据实现了不同的功能,这四个字节分别代表什么呢?

数据字节1字节2字节3字节4
功能按键状态水平移动垂直移动滚轮滚动
类型无符号有符号有符号有符号
字节1bit7bit6bit5bit4bit3bit2bit1bit0
为1未知未知未知未知未知中键按下右键按下左键按下
为0未知未知未知未知未知中键松开右键松开左键松开

一个字节有8位,字节1中低3位代表三个按键的状态,高5位通过实验没有发现任何功能,无法验证网上各种说法的正确性,持保留态度(实践是检验真理的唯一标准,如果有人知道这些位的作用望不吝赐教)。字节2、3、4都属于有符号数,故范围在-128~127之间。

2.USB接口硬件电路

STM32作为从机,它的USB接口工作在全速模式时需要将D+通过1.5K电阻上拉,低速模式下需要将D-通过1.5K电阻上拉。本文USB接口D+已上拉1.5K电阻。
在这里插入图片描述


http://www.ppmy.cn/news/153348.html

相关文章

最简单DIY串口蓝牙硬件实现方案

51单片机物联网智能小车系列文章目录 第一篇:最简单DIY的51蓝牙遥控小车设计方案 第二篇:最简单DIY串口蓝牙硬件实现方案 文章目录 51单片机物联网智能小车系列文章目录前言一、最简单DIY串口蓝牙硬件实现方案是什么?二、制作步骤1.搭建ESP32…

台式计算机必备硬件,DIY台式电脑主机六大硬件

如果自己DIY台式电脑,一定要选择好这六大硬件,其次再配上机箱、散热器(盒装CPU自带散热器)等下面是学习啦小编收集整理的DIY台式电脑主机六大硬件的选择,希望对大家有帮助~~ DIY台式电脑主机六大硬件的选择 方法/步骤 目前市面上的处理器(CPU…

DIY装机过程图解简述(硬件基础)

电子元件集成度的飞速提升令装机变得异常简单,期间甚至不需要我们具备任何电工知识。事实上,装机的更大意义在于让大家享受DIY的乐趣,同时尽快掌握一些相关的硬件知识,以便积累一些对应初级硬件故障的经验。今天,我们将…

计算机主机装机步骤,电脑组装步骤详细教程之裸机点亮 再将DIY硬件装入主机箱...

对于装机小白来说,如果没有DIY装机经验,那么装机还是有难度的,甚至不知道哪个硬件安装到哪里。不过如果有电脑组装教程的话,我们可以根据装机教程一步一步组装即可。下面装机之家为大家分享一个电脑组装教程,本次装机教…

硬件设计-DIY功放

不管是新手还是老手,都应该DIY一个功放 ​ 图为路飞本科时做的一套功放加耳放 今天在B站看到一个UP自己做了功放,很赞。于是想到了写今天这篇文章。也是基于自己入门硬件的一个小插曲,推荐给大家。 视频是当时本科时做的功放,用…

新电脑硬件DIY+ 安装Ubutun 18.04+排雷

硬件篇: 1.乘着小矿难3/8节活动,某东,抢了一张 RTX3080 12g, 7k!!! CPU: I5 12600KF 主板华硕 B660M plus wifi DDR5. 主板信息:注意wifi,和网卡具体型号。 散件购买注意点&…

项目分享| DIY STM32控制的电子负载(硬件方案分享,软件代码下载)

今天分享的项目是基于STM32控制的简易电子负载,具有恒流、恒压、恒电阻以及恒功率功能,最大输入电压为100V,热设计功耗为100W,最大负载电流为12A。 感兴趣的同学可以关注下。感谢! 系统结构图 电子负载采用3.7V锂电…

一、硬件制作

硬件制作 智能车元器件清单 电阻 限流分压 100/200、10k:复位电路 分压 1k:接在引脚和电源之间 控制电流保护引脚(看手册中引脚额定电流) 470:LED限流 工作电流(电源电压-LED压降)/限流电阻阻…