做空闲时间的网站,免费的软件下载网站,电子商务网站设计与开发案例教程,做3d动画网站关键字#xff1a;USBx#xff0c; Device, HID#xff0c;standalone
1.设计目的
目前 USBx Device standalone 的官方示例较少#xff0c;不过使用 STM32CubeMX 可以快速地生成 USBx Device 相关类的示例工程#xff0c;会很方便大家的开发。这里以 NUCLEO-H563 为例USBx Device, HIDstandalone
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这里选择 HSI4848Mhz ; 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 端即可看到鼠标移动一下符合预期。