Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
ART-Pi
CherryUSB
RT-Thread Studio
在 RT-Thread Studio 环境中为 ART-Pi 2 移植 CherryUSB(以 usb_device 为例)
发布于 2025-04-19 02:52:49 浏览:326
订阅该版
[tocm] ## 开始之前 ART-Pi 2 搭载了 STM32H7R7x 芯片,这是 ST 推出的一款自带 Internal HS PHY 的 MCU。目前论坛里资料较少,故尝试在 RT-Thread Studio 中移植 CherryUSB,本文从创建工程开始,事无巨细地记录了移植的全过程。 ## 移植过程 ### 1. 新建工程   如图示,新建基于 ART-Pi 2 开发板的项目。 工程的目录结构如下:  ### 2. 添加CherryUSB的package   在工程中一键添加CherryUSB的包,按下 Ctrl+S 保存设置,自动开始下载 CherryUSB,这里要注意网络畅通,因为要从 Github 上拉取 最新的 release,成功后控制台信息如下:  ### 3. 配置CherryUSB 在软件包里找到 CherryUSB 的配置项,我们以usb_device为例,进行如下配置,不要忘记保存:  将 ./packages/CherryUSB-v1.4.3/cherryusb_config_template.h 拷贝到 ./board/port 里面,并命名为 usb_config.h,如下图:  然后刷新工程,即可找到新添加的文件。  打开 usb_config.h,修改以下宏 ```c #include "rtthread.h" #define CONFIG_USB_PRINTF(...) rt_kprintf(__VA_ARGS__) ``` USB IP 相关的 config 需要自己根据芯片实际情况修改,这里实现下面的宏 ```c #define CONFIG_USBDEV_EP_NUM 8 #define CONFIG_USB_DWC2_RXALL_FIFO_SIZE (1024 / 4) #define CONFIG_USB_DWC2_TX0_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX1_FIFO_SIZE (1024 / 4) #define CONFIG_USB_DWC2_TX2_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX3_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX4_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX5_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX6_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX7_FIFO_SIZE (64 / 4) #define CONFIG_USB_DWC2_TX8_FIFO_SIZE (64 / 4) ``` 修改 ./board/board.c,在最后实现下面函数(我们这里就用 hid_mouse 的 demo) ```c void usb_dc_low_level_init(uint8_t busid) { add something... } void OTG_HS_IRQHandler(void) { extern void USBD_IRQHandler(uint8_t busid); USBD_IRQHandler(0); } int usbd_init(void) { extern void hid_mouse_init(uint8_t busid, uintptr_t reg_base); hid_mouse_init(0, USB_OTG_HS_PERIPH_BASE); return 0; } INIT_APP_EXPORT(usbd_init); ``` 关于上面 void usb_dc_low_level_init(uint8_t busid) 函数怎么实现,请参阅我的另一个帖子:[在STM32G4上移植CherryUSB协议栈(usb_device)](https://mdlzcool.github.io/post/fb4bb4c3.html),这里主要就是用CubeMX新建一个工程,然后打开USB_HS_OTG和中断,然后在生成的代码里面找到初始化 USB 时钟和中断的代码复制过来,就OK了,下面附上我的实现,可以直接拿去用: ```c void usb_dc_low_level_init(uint8_t busid) { RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USBPHYC; PeriphClkInit.UsbPhycClockSelection = RCC_USBPHYCCLKSOURCE_HSE; HAL_PWREx_EnableUSBVoltageDetector(); __HAL_RCC_USB_OTG_HS_CLK_ENABLE(); __HAL_RCC_USBPHYC_CLK_ENABLE(); HAL_NVIC_SetPriority(OTG_HS_IRQn, 0, 0); HAL_NVIC_EnableIRQ(OTG_HS_IRQn); } ``` 做完以上所有步骤后,编译烧录一气呵成没有报错:  在终端里面可以看到已经识别正确:  且给USB-HS插到电脑上可以正确枚举:  ### 3. 收尾 在 ./applications/main.c 中,添加 CherryUSB 的 hid_mouse 的线程,如图:  ```c static rt_thread_t hid_thread = RT_NULL; static void hid_mouse_thread_entry(void *parameter) { rt_kprintf("USB HID Mouse thread started\n"); while(1){ extern void hid_mouse_test(uint8_t busid); hid_mouse_test(0); } } int main(void) { ... hid_thread = rt_thread_create("hid_mouse", hid_mouse_thread_entry, RT_NULL, 1024, 20, 5); if (hid_thread != RT_NULL) { rt_thread_startup(hid_thread); } ... } ``` 然后再次编译烧录,发现鼠标不出所料地开始转圈了:) 至此移植结束,再次感谢 [@sakumisu](/u/0e57f90a3018a1b9) 的贡献。 ## 附录 附一些图片    ## 示例代码 https://github.com/MDLZCOOL/CherryUSB_ART_Pi2
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
MDLZCOOL
这家伙很懒,什么也没写!
文章
1
回答
0
被采纳
0
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
cubemx
UART
ESP8266
WIZnet_W5500
BSP
ota在线升级
PWM
flash
packages_软件包
freemodbus
潘多拉开发板_Pandora
ADC
GD32
定时器
编译报错
flashDB
keil_MDK
socket
中断
rt_mq_消息队列_msg_queue
Debug
ulog
SFUD
msh
C++_cpp
at_device
本月问答贡献
出出啊
1524
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
818
个答案
179
次被采纳
crystal266
555
个答案
162
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
1
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部