通过STM32CubeMx很容易生成测试代码

在左侧Connectivity中选择USART,USB_OTG_FS

在Middleware中选择USB_DEVICE,在USB_DEVICE Mode中Class For FS IP下拉框中选择Communication Device Class(Virtural Port Com)

如果需要利用Cubemx生成的代码进行移植:

1.文件需要

1.Middlewares\ST\STM32_USB_Device_Library\

Class \CDC        \Inc\usbd_cdc.h                      \Src\usbd_cdc.c

Core\                  \Inc\usbd_core.h                    \Src\usbd_core.c

\Inc\usbd_ctlreq.h                  \Src\usbd_ctlreq.c

\Inc\usbd_ioreq.h                  \Src\usbd_ioreq.c

2.USB_DEVICE

App\                  \Inc\usb_device.h                    \Src\usb_device.c

\Inc\usbd_cdc_if.h                    \Src\usbd_cdc_if.c

\Inc\usbd_desc.h                     \Src\usbd_desc.c

Target\              \Inc\usbd_conf.h                       \Inc\usbd_conf.c

文件组织结构如下。

如果自行移植需要在中断函数中添加中断处理函数

void OTG_FS_IRQHandler(void)
{/* USER CODE BEGIN OTG_FS_IRQn 0 *//* USER CODE END OTG_FS_IRQn 0 */HAL_PCD_IRQHandler(&hpcd_USB_OTG_FS);/* USER CODE BEGIN OTG_FS_IRQn 1 *//* USER CODE END OTG_FS_IRQn 1 */
}

我的测试main.c函数比较简单,生成一个递增序列,然后通过串口控制启动,通过USB的VCP类把数据发送上来。

/*** @brief  The application entry point.* @retval int*/
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MPU Configuration--------------------------------------------------------*/
//  MPU_Config();/* Enable I-Cache---------------------------------------------------------*/SCB_EnableICache();/* Enable D-Cache---------------------------------------------------------*/SCB_EnableDCache();/* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART1_UART_Init();MX_USB_DEVICE_Init();/* USER CODE BEGIN 2 */int j=0;for(int i=0;i<2048;i++){              if((j%256==0)){j=0;}Txbuff[i]=j; j++;}/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE */if(ReceiveCplt == 1){printf("%d\r\n",FrameCnt);FrameCnt++;CDC_Transmit_FS((uint8_t *)&head[0],8);for(uint8_t j=0;j<16;j++){for(uint8_t i=0;i<16;i++){while(CDC_Transmit_FS((uint8_t*)&Txbuff[0],256)!=USBD_OK);}}HAL_Delay(500);}  /* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

串口中断处理函数

/*** @brief This function handles USART1 global interrupt.*/
void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */uint8_t temp;temp=USART1->RDR;                     //读寄存器的值aRxBuffer[times++] = temp;            //数据暂存在一个数组中if(temp==0x0A)                        //如果字符串末尾带有回车键,表明上位机发送完成{if(memcmp(aRxBuffer,"AT+START",8)==0){times=0;memset(aRxBuffer,0,sizeof(aRxBuffer));ReceiveCplt=SET;}if(memcmp(aRxBuffer,"AT+RESET",8)==0){NVIC_SystemReset();while(1);}}/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 *//* USER CODE END USART1_IRQn 1 */
}

STM32-H750利用USB虚拟端口(VCP)类进行数据发送的移植记录相关推荐

  1. USB设备驱动开发之扩展(利用USB虚拟总线驱动模拟USB摄像头)

    fanxiushu 2016-10-08 转载或引用,请注明原始作者 做这个事情写这篇文章之前,压根没朝模拟USB摄像头这方面去想过. 直到CSDN上一位朋友提出问题,才想到还有这么一个玩意. 因此花 ...

  2. RT_Thread Studio使用——USB虚拟串口(VCP)

    硬件:正点原子阿波罗F429开发板,主控STM32F429IGT6 软件:RT-Thread Studio 2.2.5 RT-Thread 版本:4.1.0 在RT-Thread Studio中开启外 ...

  3. 【正点原子STM32连载】第五十八章 USB虚拟串口(Slave)实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  4. stm32f103gd32的usb虚拟串口,打印类printer组合设备

    stm32f103&gd32的usb虚拟串口+打印类printer组合设备@TOC stm32f103&gd32的usb虚拟串口,打印类printer组合设备 由于gd32和stm32 ...

  5. USB虚拟串口实验_STM32F1开发指南——USB学习笔记

    前言 STM32F103系列芯片都自带USB接口,不过STM32F103的USB都只能用来做设备,而不能用作主机. 目录: 53.1 USB简介 USBF103自带的USB符合USB2.0规范.   ...

  6. linux平台实现USB虚拟总线驱动一(原理以及开发流程)

    by fanxiushu 2019-11-07 转载或引用请注明原始作者. 之前的文章阐述过在windows平台下,如何实现USB虚拟总线驱动, 以及如何在windows平台采集真实USB设备的数据, ...

  7. stm32usb做虚拟串口和键盘_关于stm32f103的USB虚拟串口程序移植

    手边有个项目要用到USB传数据到主机,虽然有很多种方式,但最后还是选择了USB虚拟串口模式,将数据上传至pc端: 然而这就涉及到了移植问题,在keil下官方已经给出了一个完整的USB TO VCOM的 ...

  8. stm32 usb 虚拟串口 相同_为什么说你要学习USB?(一)

    来源:公众号[鱼鹰谈单片机]作者:鱼鹰OspreyID   :emOsprey本篇笔记为 USB 系列教程第一篇,一共有多少篇鱼鹰心里也没底,鱼鹰不会因为篇幅多而停止,会尽可能的将 USB 讲透,让你 ...

  9. STM32 USB虚拟串口原理(上)

    USB虚拟串口是使用USB的CDC(CDC为communication device class(virtual port com))类实现的一种通讯接口.使用STM32自带的USB slave功能可 ...

最新文章

  1. 【转】图形学基础之透视校正插值
  2. 限制外来计算机访问,准入网关|网络准入控制|非法接入检测|限制非法访问解决方案...
  3. Set的实现类HashSet与TressSet代码实现
  4. 【转】linux下安装ssh服务器端及ssh的安全配置
  5. 写c语言会出现哪些常见错误,C语言编写常见错误
  6. 牛客网练习赛26B(简单的dp)
  7. artemis服务_artemis小结
  8. Vercel部署网易云音乐api
  9. 你真的懂协程 (Coroutine) 吗 ? Kotlin Coroutines — Suspending Functions
  10. 测试用例的设计-面试常见问题(基础篇)
  11. 【WiFi】WiFi6E 6G 信道与频宽对应关系
  12. 计算机色颜色有几种,电脑显示器怎么选?10、8、6bit不同色深都有哪些区别?...
  13. HTML+CSS好看的小黄人网页制作(首页部分)
  14. 用户留存统计 java_用户留存率以及DNU、DAU、WAU、MAU关系
  15. 华信短信平台接口文档
  16. maya中redshift渲染深度景深后nuke合成方法
  17. NVIDIA Deepstream 4.0笔记(一):加速基于实时AI的视频和图像分析
  18. 第十九天:初识Linux+系统与设置命令+目录管理
  19. 使用Java+SSM(Spring+SpringMVC+Mybatis)开发在线美食推荐网 美食推荐系统 美食天下美食爬虫 基于用户、物品的协同过滤推荐算法实现 大数据、人工智能、机器学习项目开发
  20. 学习 VS2010编程经典示例

热门文章

  1. 最全Python数据清理终极指南
  2. error:03000086:digital envelope routines::initialization error
  3. 吊打面试官!MySQL灵魂100问,你能答出多少?
  4. MySQL 5.7 界面安装 - Windows(结尾附视频)
  5. 如何在线下载简历模板?手机上怎么下载简历?
  6. HDU 3966 POJ 3237 HYSBZ 2243 HRBUST 2064 树链剖分
  7. 三星使用android auto,如何使用手機的Android Auto連接汽車
  8. 【愚公系列】2022年04月 Python教学课程 63-DRF框架安装与配置
  9. shiro cas 遇到 票根验证问题
  10. 如何为自定义相机添加 取景框|扫描框 |预览框|矩形框