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

STM32CubeMX生成的CDC收发接口分析

研究hal库生成的CDC接收接口

uint8_tUserRxBufferFS[APP_RX_DATA_SIZE];//自动生成的接收buffuint8_tUserTxBufferFS[APP_TX_DATA_SIZE];//初始化VCP收发缓冲区staticint8_tCDC_Init_FS(void){/* USER CODE BEGIN 3 *//* Set Application Buffers */USBD_CDC_SetTxBuffer(&hUsbDeviceFS,UserTxBufferFS,0);//该缓冲区可以在发送的时候自定义,在此可以注释USBD_CDC_SetRxBuffer(&hUsbDeviceFS,UserRxBufferFS);//该缓冲区不能注释,虽然在接收回调函数里可以重新指定接收缓冲区,但在枚举阶段(收发之前)需要用到,但可以修改该缓冲区的大小return(USBD_OK);/* USER CODE END 3 */}uint32_tCDC_Rx_Buff_Addr;uint8_tCDC_Test_Rx_Buff[100];//自定义接收缓冲区/* CDC_Receive_FS()该函数被USB设备回调用于USB外设数据接收, 在这个回调函数中通过Len获取数据长度,通过Buf指针获取数据, 通过USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);重新设置接收缓冲区地址, 通过USBD_CDC_ReceivePacket(&hUsbDeviceFS);启动设备继续接收。 */staticint8_tCDC_Receive_FS(uint8_t*Buf,uint32_t*Len){/* USER CODE BEGIN 6 *///CDC_Rx_Buff_Addr = &Buf[0]; //地址验证USBD_CDC_SetRxBuffer(&hUsbDeviceFS,&Buf[0]);// Buf[0]地址就是UserRxBufferFS[]的地址//USBD_CDC_SetRxBuffer(&hUsbDeviceFS, CDC_Test_Rx_Buff); //接收缓冲区修改USBD_CDC_ReceivePacket(&hUsbDeviceFS);return(USBD_OK);/* USER CODE END 6 *//* CDC接收缓冲区疑问 USBD_CDC_SetRxBuffer()是重置CDC接收缓冲区 1.在CDC_Receive_FS()中调用USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]),Buf[0]地址就是UserRxBufferFS[]的地址 2.在CDC_Receive_FS()中不调用USBD_CDC_SetRxBuffer(),使用默认缓冲UserRxBufferFS[] 3.在CDC_Receive_FS()中调用USBD_CDC_SetRxBuffer(),自定义缓冲 */}uint8_tCDC_Transmit_FS(uint8_t*Buf,uint16_tLen){uint8_tresult=USBD_OK;/* USER CODE BEGIN 7 */USBD_CDC_HandleTypeDef*hcdc=(USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;if(hcdc->TxState!=0){returnUSBD_BUSY;}USBD_CDC_SetTxBuffer(&hUsbDeviceFS,Buf,Len);result=USBD_CDC_TransmitPacket(&hUsbDeviceFS);/* USER CODE END 7 */returnresult;}

CDC接收缓冲区疑问
USBD_CDC_SetRxBuffer()是重置CDC接收缓冲区
1.在CDC_Receive_FS()中调用USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]),Buf[0]地址就是UserRxBufferFS[]的地址
2.在CDC_Receive_FS()中不调用USBD_CDC_SetRxBuffer(),使用默认缓冲UserRxBufferFS[]
3.在CDC_Receive_FS()中调用USBD_CDC_SetRxBuffer(),自定义缓冲

http://www.jsqmd.com/news/1406244/

相关文章:

  • Firefox Reality VR浏览器完整实战指南:从源码构建到多设备适配
  • 深圳当事人如何高效跟律师沟通,少走弯路,用好法律服务 - 厚道搬家
  • 告别模拟器:APK安装器让Windows直接运行安卓应用,只需一个文件
  • 奢二网服务适配:北京西城区首饰升级处置场景指南 - 大牌科普时报
  • Scrcpy-iOS 实战指南:iPhone 远程控制 Android 手机的完整方案
  • Docker安装与配置全指南:从入门到实践
  • C语言动态内存分配可视化:miniC-hosting的ALLOC指令深度剖析
  • 2026年山东钢丸厂家实力梳理:中兴金属等企业核心信息整理 - 拜了拜了
  • GEE与Xarray高效提取遥感时间序列数据实战
  • 南京餐饮连锁品牌如何抢占AI搜索入口?2026年GEO服务商选择指南 - 小随科技
  • 预算四千买二手iPhone的真实经历:爱回收和转转买二手手机哪个更靠谱 - 滚动商讯
  • FANUC A61L-0001-0094 14英寸彩色显示器替代方案详解
  • 无锡自动化解决方案企业如何做好AI获客?2026年GEO服务商及代理加盟本地靠谱推荐 - 企业新闻快传
  • 从BIO/NIO/AIO到Netty:Java网络编程IO模型演进与实践
  • 深入 lsp-status.nvim 源码(一):LSP 诊断与进度消息模块的实现原理
  • URP-LWRP-Shaders 完全指南:Unity URP 着色器合集项目终极入门教程
  • PowerToys汉化包完整安装指南:5分钟把英文界面换成地道中文
  • 2026年泉州装修公司哪家好?别再被这5个坑骗了 - 滚动商讯
  • 又被百度网盘限速卡到100KB/s?三步装好提速插件,附8个高频报错自救手册
  • PowerToys 汉化包实测笔记:让满屏英文的效率工具真正说中文
  • AI建站工具:7分钟打造专业网站的秘诀
  • 2026年上海徐汇区电路维修上门高口碑服务商选择全攻略 - 匠心24小时快修
  • 2026年红舵建材等水磨石生产厂家选购指南及行业信息汇总 - 拜了拜了
  • Mac 百度网盘下载速度慢怎么解决?免费提速插件一键安装实战指南
  • 2026 八月西城区,旧款首饰焕新适配服务资源测评 - 大牌科普时报
  • 提升代码可读性的秘诀:palenight.vim 斜体显示配置技巧
  • 2026睢宁标识标牌公司实力推荐出炉!第一名江苏蓝天广告,本土靠谱首选 - 产品推荐官
  • 杭州自动化解决方案企业如何布局AI获客?GEO服务商代理加盟本地靠谱推荐 - 科技快讯
  • 洛雪音乐音源配置教程:5步上手,畅享全网无损音乐
  • 百度网盘Mac版提速指南:三步上手 BaiduNetdiskPlugin-macOS