硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4923|回复: 5
收起左侧

使用cubeMX生成USBX虚拟串口工程的方

[复制链接]

6

主题

74

回帖

92

积分

初级会员

积分
92
发表于 2024-5-27 22:41:56 | 显示全部楼层 |阅读模式

一直以来都是使用MDK的RTE环境创建F1/F4的工程,最近打算开始研究threadX,使用cubeMX可能是最简便的办法
由于最近正好在测试USB,所以现在学习一下使用cubeMX创建USBX工程,记录一下主要步骤

1.准备工作
1.1安装cubeMX
官网下载并安装STM32CubeMX
下载STM32CubeMX.png

1.2安装软件包

1. 打开包管理器(6.11.1会要求登录账号,需要先注册,老版本不需要)
打开包管理器.png

2. 在STM32CubeMX的包管理器中安装STM32H7芯片包,或者其它对应芯片的软件包
安装STM32H7.png

3. 在STM32CubeMX的包管理器中安装X-CUBE-AZRTOS-H7,或者其它对应芯片的软件包
安装X-CUBE-AZRTOS-H7.png

2.新建cubeMX工程

1. 省略了选择芯片步骤,按照使用的芯片自行新建工程。若需要demo作参考,可以选择ACCESS TO EXAMPLE SELETOR,在界面中筛选需要的芯片系列,筛选组件
新建cubeMX工程.png

2. 通过芯片新建好工程后,添加ThreadX组件和USBX组件
选择ThreadX组件.png 选择ThreadX和USBX组件.png

3. 将HAL库的时钟换成systick之外的时钟源,不换的话软件要处理HAL时间基准(参考安富莱例程)
HAL时钟基准使用TIM7.png

4. 设置USB外设(选择实际使用的外设,此处使用的FS),主要更改是打开全局中断
设置USB外设.png

5. 设置ThreadX和USBX(这个不理解可以参考cube提供的例程,参数可以照搬)
设置ThreadX任务.png 设置ThreadX参数.png 设置USBX参数.png

6. USB时钟需要设置为48M
USB时钟.png

7. 设置一个串口,使用发送DMA(参考cube提供的例程)  
8. 设置其余外设和时钟等环境
9. 工程设置,只拷贝需要的库,外设生成独立的c文件,串口、USB外设上电不初始化
USB外设上电不初始化.png

3.MDK修改源码
主要修改app_usbx_device.c和ux_device_cdc_acm.c两个文件,这两个文件可以直接从cube提供的例程中复制过来(通过文件比较工具也可)
主要修改的文件.png

1. app_usbx_device.c  
此文件主要是创建USB相关任务和初始化USB、串口硬件。
USBX_APP_Device_Init函数要注意:
  FIFO需要对USB硬件外设有一定的理解,否则先直接照抄例程,注意需要和2.5中cubeMX中的设置关联
  例程可能是USB_OTG_HS,需要根据实际外设更改
  USB的句柄需要写实际的
[C] 纯文本查看 复制代码
/**
  * @brief  USBX_APP_Device_Init
  *         Initialization of USB device.
  * @param  none
  * @retval none
  */
VOID USBX_APP_Device_Init(VOID)
{
  /* USER CODE BEGIN USB_Device_Init_PreTreatment_0 */

  /* USER CODE END USB_Device_Init_PreTreatment_0 */

  /* USB_OTG_HS init function */
  MX_USB_OTG_FS_PCD_Init();  //在这初始化的USB硬件

  /* USER CODE BEGIN USB_Device_Init_PreTreatment_1 */

  /* Set Rx FIFO */
  HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x200); //这几个FIFO需要和cubeMX中的设置关联

  /* Set Tx FIFO 0 */
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x10);//具体如何设置FIFO,需要阅读STM32手册

  /* Set Tx FIFO 2 */
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x10);

  /* Set Tx FIFO 3 */
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 2, 0x20);
  /* USER CODE END USB_Device_Init_PreTreatment_1 */

  /* Initialize and link controller HAL driver */
  ux_dcd_stm32_initialize((ULONG)USB_OTG_FS, (ULONG)&hpcd_USB_OTG_FS);//这个USB_OTG_FS要和硬件一致

  /* Start the USB device */
  HAL_PCD_Start(&hpcd_USB_OTG_FS);

  /* USER CODE BEGIN USB_Device_Init_PostTreatment */

  /* USER CODE END USB_Device_Init_PostTreatment */
}


2. ux_device_cdc_acm.c  
此文件主要是CDC相关的接口和接收发送两个任务,可以直接从demo例程中复制过来

4.下载验证

下载前需要设置好下载器,下载后打开控制面板即可看到串口设备
识别出串口设备.png

5.测试代码: cubeMX-USBX.zip (4.78 MB, 下载次数: 89)

评分

参与人数 2金币 +120 收起 理由
王海靖 + 20
eric2013 + 100 很给力!

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2024-5-28 08:09:53 | 显示全部楼层
谢谢楼主分享,很详细。
回复

使用道具 举报

19

主题

337

回帖

394

积分

高级会员

积分
394
发表于 2024-11-17 12:05:41 | 显示全部楼层
附件下载不了,提示网络问题
回复

使用道具 举报

6

主题

74

回帖

92

积分

初级会员

积分
92
 楼主| 发表于 2024-12-8 11:03:02 | 显示全部楼层
王海靖 发表于 2024-11-17 12:05
附件下载不了,提示网络问题

可能真的是网络问题,换一下网络环境看看,我这里测试了一下是可以下载的
回复

使用道具 举报

16

主题

43

回帖

91

积分

初级会员

积分
91
发表于 2025-2-11 08:40:15 | 显示全部楼层
mark下
回复

使用道具 举报

19

主题

272

回帖

329

积分

高级会员

积分
329
发表于 2025-6-11 11:15:17 | 显示全部楼层
标记一下,谢谢楼主分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 20:54 , Processed in 0.044280 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表