关键字:USBx, Device, HID,standalone

1.设计目的

目前 USBx Device standalone 的官方示例较少,不过使用 STM32CubeMX 可以快速地生成 USBx Device 相关类的示例工程,会很方便大家的开发。这里以 NUCLEO-H563 为例,实现 USBx Device HID Standalone 类,大家可以以此为参考移植到其他的 USBx Device 类。

2.示例移植

参考官方示例代码:……\STM32Cube_FW_H5_V1.3.0\Projects\NUCLEO-H563ZI\Applications\USBX\Ux_Device_HID_Standalone

2.1.生成 STM32CubeMX 工程

新建 STM32CubeMX 工程 :STM32H563ZIT6U,选择“without TrustZone activated”.

另外,STM32CubeMX 中未作说明的配置保持默认.

2.1.1 System Core 相关配置

在 System Core 框架下,Cortex_M33 标签页面下默认使用的是 HCLK. 如下图:

RCC 的标签页下面:采用“BYPASS Clock Source ” MCO 引脚输出作为 MCU 的系统时钟源,如下图:

在 ICACHE 的标签页面下的配置如下图:

另外,SYS 标签页面下的“Timebase Source”设为 “Systick ”

2.1.2 Connectivity 的相关配置

根据 NUCLEO-H563 的硬件原理图定义,这里选择 USART3 打印输出相关的 USB 操作信息。

不用开中断或者 DMA,波特率默认 115200.

注意 USART3 使用的端口引脚是 PD8 与 PD9,与默认 STM32CubeMX 配置引脚不一样。

在 USB 下面的配置如下:中断优先等级设置为 6(在 NVIC 界面下修改);

2.1.3 Middleware 的相关配置

在 USBx 下面, 由于是 standalone 的示例,所以这里不用选择操作系统的中间件。

➢ USBX 的具体配置如下图,可以看出主要检查或修改了默认的如下框出来的几处地方。
➢ UXDevice memory pool size 由默认的 1024 设置为 4K(4*1024Bytes) 。
➢ UX_SLAVE_REQUEST_DATA_MAX_LENGTH 由默认的 2048 设置为 64 。
➢ 由于当前例程并非复合设备,所以 USBD_COMPOSITE_USE_IAD 设置为 false。
➢ USBX Device System Stack Size 由默认的 512 设置为 4K(4*1024Bytes) 。
➢ USBX Device Register Connection Callback 设置为 false 。
➢ 其余的配置保持默认即可。

2.1.4 System Clock 相关配置

由于选择了 Bypass 模式的 8Mhz,注意要修改为一致(默认的是 25Mhz)。USB Device IP 的时钟需要 48Mhz,这里选择 HSI48=48Mhz ;

2.1.5 配置 HID 需要的按键

PC13 是对应原理图中的 USER BUTTON,配置如下,中断优先级为 7,比 USB(USB中断优先级设为 6) 低:

并使能其中断,生成相关中断入口函数的代码,

2.1.6 生成项目工程

为项目工程命名,生成项目工程,适当配置堆栈的大小:

这时候可能会提示警告,如下图所示 :

回过头去配置一下即可,如下图:

然后生成项目工程代码。

2.2.添加应用代码

注意:这个 LAT 是基于 STM32Cube_FW_H5_V1.X.X 中的“\STM32Cube_FW_H5_V1.x.x\Projects\NUCLEO-H563ZI\Applications\USBX\Ux_Device_HID_Standalone \”例程,所以本 LAT 中提到的函数或者变量都可以直接使用或者参考例程中的函数或者变量。

2.2.1 完善串口打印

可以参考《STM32 USBx HOST HID standalone 示例移植》中的说明完善串口打印信息。由于是 USB Device,也可以通过 USB 协议分析仪去查看 log 调试(可选)。

2.2.2 添加 USBx 的初始化函数

在 main.c 中添加初始化函数如下图,如果 main.c 中已经包含它,请忽略。

该函数在 CubeMX 中已经生成,添加调用即可;然后在 MX_USBX_Device_Init 函数的末尾去添加 USBX_APP_Device_Init ();的初始化的调用;

➢ 添加相关函数的声明;
➢ 添加 PCD_HandleTypeDef hpcd_USB_DRD_FS;
➢ 添加USBX_APP_Device_Init函数中MX_USB_PCD_Init 函数的定义,该函数由STM32CubeMX 自动生成在 main.c 文件中,运行代码,你会发现此时枚举不成功。

2.2.3 添加 USBx 的处理函数

在 main 函数的 while 循环中添加函数 USBX_Device_Process(NULL);添加该函数USBX_Device_Process 的定义和申明在 app_usbx_device.c 文件中实现。

编译无问题后,运行,实现枚举。

2.2.4 HID 按键功能的实现

打开函数 USBX_DEVICE_HID_MOUSE_Task 并实现它,还有按键的 callback 回调函数的实现,复制粘贴例程程序的代码即可。

添加相关变量的申明,解决相应的编译错误之后,即可通过按键 User Button 模拟鼠标的功能。当每按一下 User Button(MCU 的 PC13 引脚),在 PC 端即可看到鼠标移动一下,符合预期。
 

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python创建并写入excel文件

大家好,这里是七七,今天来跟大家分享一个python创建并写入一个excel文件的小例子,话不多说,开始介绍。首先我们来看一下这一小段代码。import openpyxl# 创建一个新的 Excel 工作簿workbook openpyxl.Workbook()# 获取当前活动的…

react native 出现 FATAL EXCEPTION: OkHttp Dispatcher

react native 出现 FATAL EXCEPTION: OkHttp Dispatcher 报错信息FATAL EXCEPTION: OkHttp DispatcherProcess: , PID: 8868java.lang.NoSuchMethodError: No virtual method toString(Z)Ljava/lang/String; in class Lokhttp3/Cookie; or its super classes (declaration of o…

sentinel实现控制台与nacos数据双向绑定

有两种方式可以实现&#xff1a;Springboot客户端做相应配置&#xff08;推荐&#xff09;修改sentinel-dashboard的源码一、Springboot客户端做相应配置&#xff08;推荐&#xff09;1、添加依赖<dependency><groupId>com.alibaba.csp</groupId><artifac…

Kubernetes (k8s)

Kubernetes (k8s) 以下是一份 ​Kubernetes (k8s) 基础使用教程&#xff0c;涵盖从环境搭建到核心操作的完整流程&#xff0c;附详细命令和示例&#xff1a; &#x1f680; ​一、环境准备&#xff08;3种方式&#xff09;​​ ​1. 本地开发环境&#xff08;推荐&#xff09;​…

三打ANSYS HFSS

2. 激励方式&#xff08;端口&#xff09;详细对比分析在HFSS中&#xff0c;“激励方式”和“端口”这两个词经常混用&#xff0c;但严格来说&#xff0c;“端口”是实现“激励”的一种最主要的方式。端口类型工作原理适用情况优点缺点波端口 (Wave Port)默认首选。计算端口的固…

3.python——数据类型转换

python的数据类型转换分为两种&#xff1a; 隐式转换&#xff1a;自动完成 显式转换&#xff1a;用类型函数转换 隐式转换 # 自动转为浮点数 num_int 123 num_flo 1.23num_new num_int num_flo显式转换 整型 x int(1) # x 输出结果为 1 y int(2.8) # y 输出结果为 2 z …

迅为RK3568开发板OpenHarmonyv3.2-Beta4版本测试-命令终端

将串口连接到开发板的调试串口&#xff0c;进入 OpenHarmony 系统后&#xff0c;会自动进入 OpenHarmony终端&#xff0c;如下图所示&#xff1a;

【面试题】介绍一下BERT和GPT的训练方式区别?

BERT(双向编码器): 预训练任务: 掩码语言模型(MLM):随机掩盖15%的token,其中: 80%替换为[MASK] 10%替换为随机token 10%保持原样 下一句预测(NSP):判断两个句子是否连续(后续版本已移除) 训练特点: 使用双向Transformer编码器 同时利用左右上下文信息 适合理解类任…

邪修实战系列(1)

1、第一阶段邪修实战总览&#xff08;9.1-9.30&#xff09; 把第一阶段&#xff08;基础夯实期&#xff09;的学习计划拆解成极具操作性的每日行动方案。这个计划充分利用我“在职学习”的特殊优势&#xff0c;强调“用输出倒逼输入”&#xff0c;确保每一分钟的学习都直接服务…

XR数字融合工作站打造智能制造专业学习新范式

智能制造是工业4.0的核心发展方向&#xff0c;涵盖数字化设计、智能生产、工业机器人、数字孪生、物联网等关键技术。然而&#xff0c;传统教学模式在设备成本高、实训风险大、抽象概念难理解等方面存在诸多挑战。XR数字融合工作站,利用VR/AR/MR等技术&#xff0c;通过虚拟仿真…

基于FPGA实现数字QAM调制系统

基于FPGA实现数字QAM调制系统题目要求一、代码设计1.顶层2.分频3.m序列4.串转并5.映射6.正弦波余弦波生成ROM和7.ask二、仿真波形总结题目要求 FPGA实现数字QAM调制系统要求根据正交振幅调制原理&#xff0c;利用正弦载波信号发生器&#xff0c;实现调制信号。调制原理会利用到…

DAY 22 复习日

浙大疏锦行复习日 仔细回顾一下之前21天的内容&#xff0c;没跟上进度的同学补一下进度。 作业&#xff1a; 自行学习参考如何使用kaggle平台&#xff0c;写下使用注意点&#xff0c;并对下述比赛提交代码 导入需要的库 import pandas as pd # 用于数据处理和分析&#xff0c;…

biocmanager安装 库 老是提示网络连接错误 才尝试各种办法

您好&#xff0c;遇到 BioManager &#xff08;通常是 BiocManager&#xff09;安装R包时提示网络连接错误确实非常令人头疼。这通常与R/RStudio的配置、网络环境&#xff08;尤其是国内用户&#xff09;或SSL证书问题有关。 请不要着急&#xff0c;我们可以按照从易到难的顺序…

【开题答辩全过程】以 智能商品数据分析系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

解构复杂财务逆向业务:如何优雅地生成与管理负数单?

文章目录一 核心复杂性二 关键设计模式&#xff1a;三 棘手场景与解决方案&#xff1a;1.分批合并处理&#xff1a;负数单需能智能拆分&#xff0c;精准冲销多批次的正向单据。2.优先级问题&#xff1a;3.超额处理&#xff1a;系统应坚决拦截而非处理&#xff0c;防止资金损失和…

Android集成OpenCV4实例

Android集成OpenCV4分以下几步骤&#xff1a; 使用Android Studio Giraffe | 2022.3.1创建一个Empty Views Activity空项目&#xff0c;包名为&#xff1a;com.example.andopencvdemo00 &#xff0c; 创建成功后&#xff0c;进行以下相关设置&#xff1a; 第一步&#xff1a;在…

npy可视化方法

npviewer 是一个应用程序&#xff0c;它允许您以热图的形式可视化 numpy 的 npy 文件中的数据。该应用程序根据不同的模式自动选择适当的维度进行显示。 根据不同的模式自动选择适当的维度进行显示支持不同格式的 numpy 数据的可视化&#xff0c;如 RGB 和灰度用户友好的界面使…

【Cesium】介绍及基础使用

文章目录一、Cesium 介绍二、 使用1、引入 cesium2、Viewer 配置选项1. 基础控件配置2. 场景与渲染配置3. 地形配置4. 天空与大气效果3、坐标系系统3.1 地理坐标系3.2 笛卡尔空间直角坐标系3.3 屏幕坐标系4、Entity 实体4.1 简介4.2 Entity 常见图形类型Point 点Polyline 线Pol…

基于SpringBoot的运动服装销售系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【嵌入式DIY实例-ESP32篇】-倾斜弹跳球游戏

倾斜弹跳球游戏 文章目录 倾斜弹跳球游戏 1、MPU6050介绍 2、硬件准备与接线 3、代码实现 在这个交互式 ESP32 Arduino 项目中,我们模拟了一个绿色球体在全彩 ST7789 170320 LCD 屏幕上弹跳,完全由 MPU6050 陀螺仪的运动控制。当你倾斜传感器时,球体会呈现出逼真的物理运动,…