当前位置: 首页 > news >正文

STM32 USBx Device HID standalone 移植示例 LAT1466

关键字: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.xdnf.cn/news/1466263.html

相关文章:

  • 全球企业内容管理ECM市场规模增长趋势与未来机遇解析
  • (4)什么时候引入Seata‘‘
  • 黄金上门回收小程序开发
  • 多路转接介绍及代码实现
  • Rust 基础语法
  • 设计模式笔记
  • 从技术选型到现场配置:DDC 楼宇自控系统全流程落地方案(2025 版)
  • 织信低代码:用更聪明的方式,把想法变成现实!
  • 多语言Qt Linguist
  • 职场礼仪实训室:健康管理专业人才培养的核心支柱与创新实践
  • Springboot实现国际化(MessageSource)
  • AI Compass前沿速览:Kimi K2、InfinityHuman-AI数字人、3D-AI桌面伴侣、叠叠社–AI虚拟陪伴
  • 查询语言的进化:SQL之后,为什么是GQL?数据世界正在改变
  • 生态 | 华院计算与深至科技达成战略合作,携手推动AI+医学影像算法升级迭代
  • 代码随想录70期day3
  • 算法(keep learning)
  • 外包干了3年,技术退步太明显了。。。。。
  • 计算机网络1 第一章 概述——以寄邮件比喻整个流程
  • threeJS 实现开花的效果
  • 概率论第三讲——多维随机变量及其分布
  • 要搞清楚你为什么上班
  • 大型语言模型SEO(LLM SEO)完全手册:驾驭搜索新范式
  • 深入剖析 ThreadLocal 及其生态系统:从基础用法到源码实现,从设计思想到工程实践
  • Android14 init启动Zygote详解
  • 必知!机器人的分类与应用:RPA、人形与工业机器人
  • 大数据毕业设计选题推荐-基于大数据的高级大豆农业数据分析与可视化系统-Hadoop-Spark-数据可视化-BigData
  • solidity函数篇
  • 5分钟征服Linux:20个神级命令+系统架构解密,让命令行恐惧症瞬间治愈!
  • 智能风险评估与欺诈检测系统
  • 普通键盘在MacOS上如何使用快捷键