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

esp32开发与应用(esp和wch芯片的USB配合)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

除了网络配合之外,还有一种情况就是usb处理。对于wch芯片来说,usb更是自己的看家本领。大家如果经常买开发板,就会看到很多的usb转串口芯片,很多就是他们家的。但如果不想单独买一个转串口的芯片,则可以直接用mcu的usb功能去生成。

1、大部分usb都是为了给pc当device

mcu自己当usb host的机会有,但是不多。大多数情况下,要么是pc通过usb,读取mcu模块上面的文件;要么是通过usb,实时给mcu模块发命令,这两种情况都是把mcu当device进行使用。

当然实际使用的时候,可以把自己report成HID类设备,类似于鼠标和键盘;也可以把自己report成CDC,也就是串口,还有一种就是CDC-HID,两种一起report,适合用于私有协议处理。两个都是免驱的。

2、ch32v307支持两个usb

一个usb是fs,一个是hs,用的时候别选错了。

3、最适合入门的demo

不管是fs,还是hs,里面都有usb/device的folder。找到之后,可以寻找一下SimulatorCDC这个目录,可以把工程看一看。这个工程的主要目的,就是实现一个usb转串口的功能。编译后,根据自己选择的usb,用type c线连上去之后,pc端就会显示多一个com口。而tx/rx呢,则是a2/a3,也就是说usb收到的内容,会a2发出去;而a3收到的内容,也会report给usb。

4、测试方法

直接杜邦线短接a2和a3,这样就会形成一个自环测试。测试的时候,这个波特率是假的,可以任意进行设置。

5、实际usb使用与改造

实际使用的时候,usb测这部分一般是保留的,还是当成com口。但是uart这部分,未必需要。很多情况下,我们需要的是一个usb通信的机制,但不是当成tx/rx转成串口。

6、代码分析

里面比较重要的代码,有几处。一处是main.c最后的循环,让我们了解到串口收发的本质,

while(1) { UART2_DataRx_Deal( ); UART2_DataTx_Deal( ); }

还有一个是就是usb_desc.c,里面的MyCfgDescr,把自己report成了一个CDC设备,

/* Configuration Descriptor */ const uint8_t MyCfgDescr[] = { /* Configure descriptor */ 0x09, 0x02, 0x43, 0x00, 0x02, 0x01, 0x00, 0x80, 0x32, /* Interface 0 (CDC) descriptor */ 0x09, 0x04, 0x00, 0x00, 0x01, 0x02, 0x02, 0x01, 0x00, /* Functional Descriptors */ 0x05, 0x24, 0x00, 0x10, 0x01, /* Length/management descriptor (data class interface 1) */ 0x05, 0x24, 0x01, 0x00, 0x01, 0x04, 0x24, 0x02, 0x02, 0x05, 0x24, 0x06, 0x00, 0x01, /* Interrupt upload endpoint descriptor */ 0x07, 0x05, 0x81, 0x03, (uint8_t)DEF_USBD_ENDP1_SIZE, (uint8_t)( DEF_USBD_ENDP1_SIZE >> 8 ), 0x01, /* Interface 1 (data interface) descriptor */ 0x09, 0x04, 0x01, 0x00, 0x02, 0x0A, 0x00, 0x00, 0x00, /* Endpoint descriptor */ 0x07, 0x05, 0x02, 0x02, (uint8_t)DEF_USBD_ENDP2_SIZE, (uint8_t)( DEF_USBD_ENDP2_SIZE >> 8 ), 0x00, /* Endpoint descriptor */ 0x07, 0x05, 0x83, 0x02, (uint8_t)DEF_USBD_ENDP3_SIZE, (uint8_t)( DEF_USBD_ENDP3_SIZE >> 8 ), 0x00, };

再就是ch32v30x_usbfs_device.c里面的USBFS_IRQHandler函数。和pc之间的usb交互,主要就是通过这个函数实现的。而串口和usb的通信,则是在UART.c里面,函数就是刚刚说的UART2_DataTx_Deal和UART2_DataRx_Deal。

/********************************************************************* * @fn UART2_DataTx_Deal * * @brief Uart2 data transmission processing * * @return none */ void UART2_DataTx_Deal( void ) { // ... } /********************************************************************* * @fn UART2_DataRx_Deal * * @brief Uart2 data receiving processing * * @return none */ void UART2_DataRx_Deal( void ) { // ... }
http://www.gsyq.cn/news/1616863.html

相关文章:

  • 微信论坛小程序毕业设计全套:前端源码+Node.js后端+MySQL数据库+详细文档
  • Playwright自动化测试中身份认证与验证码处理实战策略
  • 深度解析exif-js:5大应用场景与完整掌握图片元数据读取
  • 为什么你的家庭WiFi总是不稳定?用Python热图工具3分钟找到信号盲区
  • PHP开发中AI生成代码的七大安全漏洞与自动化防御方案
  • Docusaurus文档网站自动化测试实战:Jest与Playwright全链路覆盖
  • Python自动化测试进阶:从脚本到企业级框架的架构设计与工程实践
  • 基于大语言模型的移动端UI自动化测试:OpenClaw+Gemma+Appium实践
  • CSEF技术:人机协作中的工效学优化方法
  • 风能+水能互补发电Simulink仿真包(带模糊控制逻辑与MATLAB运行脚本)
  • Python+Pytest+Playwright构建企业级UI自动化测试框架实战
  • Sqribble深度解析:模板驱动的云原生数字出版流水线
  • Selenium自动化测试框架的AI智能化实践:从元素定位到用例生成
  • 图像频域分析与抗混叠降采样实操包:含FFT可视化、多种FIR滤波对比及完整MATLAB实验代码
  • 性能测试实战:从基准测试到TPS瓶颈排查的系统性方法
  • 3分钟解锁QQ音乐格式限制:QMCFLAC2MP3让你的音乐真正自由
  • 基于CertJava的自动化安全编码实践:从SAST工具链到CI/CD门禁
  • 【Vibe Coding从入门到精通】第10篇:Vibe Coding实战——从零到一打造一个真实项目
  • 渗透测试实战指南:PTES标准与法律合规的融合应用
  • 19-审批策略详解
  • Video.js精简版播放器包:内置RTMP Flash回退与HLS/m3u8原生支持,纯静态开箱即用
  • 104、peewee 轻量级 ORM:小型项目的数据库解决方案与 SQLite 最佳拍档
  • 微服务精准压力测试实战:基于Locust的性能调优与瓶颈分析
  • 如何高效使用智能语音识别工具:5个实战场景全面指南
  • Silk音频格式转换:5步解决微信QQ语音播放难题的技术指南
  • 从单点漏洞到全域沦陷:10大经典网络攻击路径深度剖析与防御实战
  • JMeter实现单用户双WebSocket连接压测:方案详解与实战
  • MATLAB实操包:从白噪声到非线性输出的完整信号链仿真(含FIR滤波+限幅/整流检测)
  • 基于AES-128与Matlab的图像加密:从原理到工程实践
  • 多任务 NLP 性能对比:公平实验比排行榜更重要