第三章 USB应用笔记之USB鼠标(以STM32 hal库为例)

news2024/11/18 15:34:40

第三章 USB应用笔记之USB鼠标(以STM32 hal库为例)


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 第三章 USB应用笔记之USB鼠标(以STM32 hal库为例)
  • 前言
  • 一、STM32 USB库简单讲解
    • 工程目录结构
    • .C文件分析
  • 二、实操代码
  • 《鼠标》
  • 一、STM32 CubeMX 设置
    • USB时钟设置
    • USB使能
    • UBS功能选择
  • 二、代码部分
    • 添加代码
    • 鼠标发送给PC的数据解析
    • 实验效果
  • 总结


前言

STM32F1系列是意法半导体(STMicroelectronics)推出的一款微控制器系列,具有广泛的应用领域。在STM32F1系列中,一些型号支持USB功能,以下是STM32F1系列USB的一些特点:

  • USB 2.0 Full-Speed:STM32F1系列的USB接口符合USB 2.0的Full-Speed标准,支持12
    Mbps的数据传输速率。
  • USB设备和主机模式:STM32F1系列可配置为USB设备或USB主机模式。在USB设备模式下,它可以作为USB设备与主机进行通信;在USB主机模式下,它可以控制和管理外部USB设备。
  • USB On-The-Go(OTG)支持:一些型号的STM32F1系列支持USB
    OTG功能。这意味着它们能够在设备模式和主机模式之间进行切换,使其能够适应多种USB应用场景。
  • 多个外设接口:STM32F1系列的USB接口可以与其他外设接口(如UART、SPI、I2C等)进行集成,以实现更复杂的应用设计。
  • DMA支持:STM32F1系列的USB接口支持直接内存访问(DMA),可以通过DMA传输数据,降低了处理器的负载。
  • 丰富的软件库支持:ST提供了丰富的软件库和示例代码,开发者可以使用这些库来简化USB应用的开发过程。

STM32F1 USB外设主要特征
(1)符合USB2.0全速设备的技术规范。

(2)可配置1到8个USB双向端点,我们可以理解为8个IN端点和8个OUT端点,也就是每一个双向端点可以被配置为一个IN端点和一个OUT端点,但是这两个端点公用一个端点寄存器,两个端点的类型必须是一致的(控制端点、中断端点、批量端点、同步端点)。

(3)外设硬件自动为每一个PID和Packet字段生成CRC效验,并和其他字段组成一个完整的USB Packet。

(4)支持控制传输、中断传输、同步传输、批量传输。

(5)支持同步传输和批量传输双缓冲机制,比如说我们采集ADC或者接收外部传感器的数据时必须保持数据的完整性,就可以使用双缓冲机制防止丢数。

(6)支持对自己的挂起和恢复操作,可以查看USB总线电平标准、USB总线状态、USB总线信号详解博文对挂起和恢复操作进行理解。

(7)帧锁定时钟脉冲生成。当收到一个SOF帧开始包,可以生成一个脉冲信号给其他模块使用,如果SOF中断使能,会进入SOF中断处理函数。

https://blog.csdn.net/weiaipan1314/category_10791264.html跳转


一、STM32 USB库简单讲解

工程目录结构

在这里插入图片描述

  • 1:
  • usb_device.c:初始化USB设备库,添加支持的类并启动库
  • usbd_desc.c :USBD_Usr_cb_TypeDef结构体中相关描述符的请求,不包括配置描述符。
  • 2:
  • usbd_conf.c 发送接收、初始化、回调函数 等等底层函数 与HAL库结合
  • 3:
  • usbd_core.c 内核相关
  • usbd_ctlreq.c 控制请求
  • usbd_ioreq.c 输入输出请求
  • usbd_hid.c HID配置

.C文件分析

在这里插入图片描述

这里主要为初始化USBD_HID_Init,反初始化USBD_HID_DeInit,HID控制端点的特定类请求USBD_HID_Setup,中断端端点的数据输入输入和关键的描述符配置描述符USBD_HID_GetCfgDesc。

二、实操代码

《鼠标》

一、STM32 CubeMX 设置

USB时钟设置

在这里插入图片描述

USB使能

在这里插入图片描述

UBS功能选择

在这里插入图片描述

二、代码部分

在这里插入图片描述
在这里插入图片描述

添加代码

 
#include "usbd_hid.h"
 
extern USBD_HandleTypeDef hUsbDeviceFS;

uint8_t HID_biff[4];
        HAL_Delay(1000);
		USBD_HID_SendReport(&hUsbDeviceFS,HID_Mouse_buff,4);//按下鼠标右键
		HID_Mouse_buff[0]=0x08;//恒为1
		HID_Mouse_buff[1]=10;//X+10
		HID_Mouse_buff[2]=10;//Y+10
		HID_Mouse_buff[3]=0; //鼠标滑轮

鼠标发送给PC的数据解析

数据格式
鼠标发送给PC的数据每次4个字节
BYTE1 BYTE2 BYTE3 BYTE4
定义分别是:
BYTE1 –
|–bit7: 1 表示 Y 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|–bit6: 1 表示 X 坐标的变化量超出-256 ~ 255的范围,0表示没有溢出
|–bit5: Y 坐标变化的符号位,1表示负数,即鼠标向下移动
|–bit4: X 坐标变化的符号位,1表示负数,即鼠标向左移动
|–bit3: 恒为1
|–bit2: 1表示中键按下
|–bit1: 1表示右键按下
|–bit0: 1表示左键按下
BYTE2 – X坐标变化量,与byte的bit4组成9位符号数,负数表示向左移,正数表右移。用补码表示变化量
BYTE3 – Y坐标变化量,与byte的bit5组成9位符号数,负数表示向下移,正数表上移。用补码表示变化量
BYTE4 – 滚轮变化。

BYTE1高5位是可以不用关注的,一般这5bit 在HID描述符中都是作为填充位使用,置0即可。
 

实验效果

请添加图片描述

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

连接全球金融网络 探索SCF公链的多元价值

在当今数字时代,区块链技术正迅速演变成为驱动各行业创新的重要引擎。公链作为区块链技术的核心之一,正在逐步展现其在金融和技术领域的巨大潜力。与此同时,SCF金融公链作为这一领域的新秀,正以其独特的优势和前瞻性的技术构建起一…

Rasa 多轮对话机器人

Rasa 开源机器人 目录 Rasa 开源机器人 1. 学习资料 2. Rasa 安装 2.1. rasa 简介 2.2. Rasa系统结构 ​编辑 2.3. 项目的基本流程 ​编辑 2.4. Rasa安装 2.5. 组件介绍 3. Rasa NLU 3.0. NLU 推理输出格式 3.1. 训练数据 ./data/nlu.yml 数据文件 3.2. ./confi…

使用 Amazon SageMaker 微调和部署 ChatGLM 模型

本篇文章主要介绍如何使用 Amazon SageMaker 进行 ChatGLM 模型部署和微调的示例。 这个示例主要包括: ChatGLM 总体介绍ChatGLM 微调介绍ChatGLM 环境设置ChatGLM 微调训练ChatGLM 部署测试 前言 大语言模型是一种基于深度学习技术的人工智能模型,可以追溯到早期的…

Python使用pymysql三方库操作 mysql数据库

为什么要使用pymysql 在使用Python工作与学习中难免会使用到mysql数据库,使用pymysql三方库可以让我们轻松的对数据库的记录进行操作,如创建、修改,删除表,如增加、删除、修改、查询数据表中的记录,下边记录一下pymysq…

Hive 表注释乱码解决

文章目录 出现原因MySQL 字符集修改调整元数据库字符集测试 出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器…

如何利用客户旅程打造好的用户体验?

在当今竞争激烈的市场中,提供卓越的用户体验已经成为企业脱颖而出的关键因素之一。客户旅程是实现出色用户体验的有力工具之一,而HubSpot的客户旅程规划功能为企业提供了强大的支持,帮助他们更好地理解、管理和改善客户的互动过程。今天运营坛…

【ubuntu22.04 文件管理器nautilus配置默认终端为alacritty】

前言 ubuntu默认的终端不能通过设置里的默认应用程序配置nautilus是ubuntu自带的文件管理器,包管理器里面只有nautilus-extension-gnome-terminal而没有提供大多终端update-alternatives工具可以修改系统的默认终端(ctrl-alt-t),但对nautilus文件管理器…

Slint学习文档

Slint学习文档 Slint Learn如何学习本文档学习顺序标志说明 Slint With VSCodeSlint With Rust依赖👎定义宏 Slint与Rust分离1.添加编译依赖(slint-build)2.编写slint文件3.编写build.rs4.编写main.rs 普通组件主窗体Windowexample 文本Texte…

MySQL - Left Join和Inner Join的效率对比,以及优化

最近在写代码的时候,遇到了需要多表连接的一个问题,初始sql类似于: select * from a left join b on a.id b.aid left join c on c.bid b.id left join d on d.cid c.id 这样的多个left join组合,总觉得这种写法是有问题…

借助AI分析哥斯拉木马原理与Tomcat回显链路挖掘

前言 本次分析使用了ChatGPT进行辅助分析&#xff0c;大大提升了工作效率&#xff0c;很快就分析出木马的工作流程和构造出利用方式。 分析 首先对该木马进行格式化,以增强代码的可读性。得到如下代码 <jsp:root xmlns:jsp"http://java.sun.com/JSP/Page" vers…

mac下配置JDK环境

一、下载安装 下载地址&#xff1a;Java Downloads | Oracle&#xff0c;选择适用于Mac OS的JDK版本&#xff0c;点击下载即可。 下载完之后&#xff0c;直接安装&#xff1a; 安装过程非常简单&#xff0c;按“继续”按钮一直下一步即可。 二、配置环境变量 上一步骤&#x…

建筑安全运行监测,预防建筑潜在风险

建筑物是人们生活和工作的场所&#xff0c;其安全性直接关系到人们的生命财产安全。建筑安全运行监测旨在及时发现和识别潜在的安全隐患&#xff0c;以确保建筑物的稳定运行&#xff0c;其重要性不可低估。 建筑安全运行监测可以帮助及早发现结构问题。随着时间的推移&#xff…

【模方ModelFun】实景三维建模和修模4.0.7最新版安装包以及图文安装教程

模方ModelFun 具有多种功能&#xff0c;旨在帮助用户进行实景三维建模和修模。以下是一些主要功能的简要介绍&#xff1a; 实景三维建模&#xff1a;【模方ModelFun】提供了自动化的实景三维重建功能&#xff0c;可以从实景图像中提取几何形状和纹理信息&#xff0c;生成高质量…

51单片机DHT11温湿度控制系统仿真设计( proteus仿真+程序+原理图+报告+讲解视频)

51单片机DHT11温湿度控制系统仿真设计 1.主要功能&#xff1a;2.仿真3. 程序代码4. 原理图元器件清单5. 设计报告6. 设计资料内容清单&下载链接 51单片机DHT11温湿度控制系统仿真设计( proteus仿真程序原理图报告讲解视频&#xff09; 仿真图proteus8.9及以上 程序编译器&…

缓存案例-架构真题(二十二)

试题一 某大型电商平台建立一个B2B商店系统&#xff0c;并在全国建设了仓储中心。但是在运营过程中&#xff0c;发现很多跨仓储中心调货&#xff0c;延误运送。为此建立全国仓储系统&#xff0c;通过对订单的分析和挖掘&#xff0c;并通过大数据分析预测各类配置&#xff0c;降…

机器学习---预剪枝、后剪枝(REP、CCP、PEP、)

1. 为什么要进行剪枝 横轴表示在决策树创建过程中树的结点总数&#xff0c;纵轴表示决策树的预测精度。 实线显示的是决策树 在训练集上的精度&#xff0c;虚线显示的则是在⼀个独⽴的测试集上测量出来的精度。 随着树的增⻓&#xff0c;在 训练样集上的精度是单调上升的&…

VSCode 配置 C 语言编程环境

目录 一、下载 mingw64 二、配置环境变量 三、三个配置文件 四、格式化代码 1、安装插件 2、保存时自动格式化 3、左 { 不换行 上了两年大学&#xff0c;都还没花心思去搭建 C 语言编程环境&#xff0c;惭愧&#xff0c;惭愧。 一、下载 mingw64 mingw64 是著名的 C/C…

【AI理论学习】语言模型:掌握BERT和GPT模型

语言模型&#xff1a;掌握BERT和GPT模型 BERT模型BERT的基本原理BERT的整体架构BERT的输入BERT的输出 BERT的预训练掩码语言模型预测下一个句子 BERT的微调BERT的特征提取使用PyTorch实现BERT GPT模型GPT模型的整体架构GPT的模型结构GPT-2的Multi-Head与BERT的Multi-Head之间的…

【高性能计算】opencl语法及相关概念(五):图像的仿射变换缩放

目录 简介宿主机程序设备端函数缩放效果图 简介 要使用仿射变换完成图像等宽高比缩放&#xff0c;可以按照以下步骤进行操作&#xff1a; 定义仿射变换矩阵&#xff1a;首先&#xff0c;定义一个仿射变换矩阵&#xff0c;用于描述缩放操作。该矩阵是一个2x3的矩阵&#xff0c;…