【CH32V305FBP6】USBD HS 虚拟串口分析

文章目录

  • 前言
  • 分析
    • 端点 0
      • USBHS_UIS_TOKEN_OUT
    • 端点 2
      • USBHS_UIS_TOKEN_OUT
      • USBHS_UIS_TOKEN_IN

前言

虚拟串口,端口 3 单向上报,端口 2 双向收发。

分析

端点 0

USBHS_UIS_TOKEN_OUT

设置串口参数:

  1. 判断 USBHS_SetupReqCode == CDC_SET_LINE_CODING;
  2. 波特率:USBHS_EP0_Buf 前四个字节,小端模式;
  3. 停止位:USBHS_EP0_Buf 第五个字节(0:1 停止位;1:1.5 停止位;2:2 停止位);
  4. 校验位:USBHS_EP0_Buf 第六个字节(0:None;1:Odd;2:Even;3:Mark;4:Space);
  5. 数据位:USBHS_EP0_Buf 第七个字节();
/* Non-standard request end-point 0 Data download */
if( USBHS_SetupReqCode == CDC_SET_LINE_CODING )
{
    /* Save relevant parameters such as serial port baud rate */
    /* The downlinked data is processed in the endpoint 0 OUT packet, the 7 bytes of the downlink are, in order
       4 bytes: baud rate value: lowest baud rate byte, next lowest baud rate byte, next highest baud rate byte, highest baud rate byte.
       1 byte: number of stop bits (0: 1 stop bit; 1: 1.5 stop bit; 2: 2 stop bits).
       1 byte: number of parity bits (0: None; 1: Odd; 2: Even; 3: Mark; 4: Space).
       1 byte: number of data bits (5,6,7,8,16); */
    Uart.Com_Cfg[ 0 ] = USBHS_EP0_Buf[ 0 ];
    Uart.Com_Cfg[ 1 ] = USBHS_EP0_Buf[ 1 ];
    Uart.Com_Cfg[ 2 ] = USBHS_EP0_Buf[ 2 ];
    Uart.Com_Cfg[ 3 ] = USBHS_EP0_Buf[ 3 ];
    Uart.Com_Cfg[ 4 ] = USBHS_EP0_Buf[ 4 ];
    Uart.Com_Cfg[ 5 ] = USBHS_EP0_Buf[ 5 ];
    Uart.Com_Cfg[ 6 ] = USBHS_EP0_Buf[ 6 ];
    Uart.Com_Cfg[ 7 ] = DEF_UARTx_RX_TIMEOUT;

    /* save bauds */
    baudrate = USBHS_EP0_Buf[ 0 ];
    baudrate += ((uint32_t)USBHS_EP0_Buf[ 1 ] << 8 );
    baudrate += ((uint32_t)USBHS_EP0_Buf[ 2 ] << 16 );
    baudrate += ((uint32_t)USBHS_EP0_Buf[ 3 ] << 24 );
    Uart.Com_Cfg[ 7 ] = Uart.Rx_TimeOutMax;

    /* Uart usb init */
    UART_USB_Init( );
}

在这里插入图片描述

端点 2

USBHS_UIS_TOKEN_OUT

USBHSD->UEP2_RX_CTRL ^= USBHS_UEP_R_TOG_DATA1;
/* Record related information & Switch DMA Address*/
Uart.Tx_PackLen[ Uart.Tx_LoadNum ] = USBHSD->RX_LEN;
Uart.Tx_LoadNum++;
USBHSD->UEP2_RX_DMA = (uint32_t)(uint8_t *)&UART2_Tx_Buf[ ( Uart.Tx_LoadNum * DEF_USB_HS_PACK_LEN ) ];
if( Uart.Tx_LoadNum >= DEF_UARTx_TX_BUF_NUM_MAX )
{
    Uart.Tx_LoadNum = 0x00;
    USBHSD->UEP2_RX_DMA = (uint32_t)(uint8_t *)&UART2_Tx_Buf[ 0 ];
}
Uart.Tx_RemainNum++;

/* Determine if the downlink needs to be paused */
if( Uart.Tx_RemainNum >= ( DEF_UARTx_TX_BUF_NUM_MAX - 2 ) )
{
    USBHSD->UEP2_RX_CTRL &= ~USBHS_UEP_R_RES_MASK;
    USBHSD->UEP2_RX_CTRL |= USBHS_UEP_R_RES_NAK;
    Uart.USB_Down_StopFlag = 0x01;
}

USBHS_UIS_TOKEN_IN

Uart.USB_Up_IngFlag = 0x00;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/765912.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解锁应用商店新玩法:Xinstall渠道包,让你的App推广效率飙升

在移动应用竞争日益激烈的今天&#xff0c;如何在众多应用商店中脱颖而出&#xff0c;实现精准推广与高效获客&#xff0c;成为每位App开发者与广告主的共同追求。幸运的是&#xff0c;Xinstall作为一款一站式App全渠道统计服务商&#xff0c;以其专业的渠道包解决方案&#xf…

Yi-1.5 9B Chat 上线Amazon SageMaker JumpStart

你是否对简单的API调用大模型感到不满足&#xff1f;是否因为无法亲自部署属于自己的大模型而烦恼&#xff1f; 好消息来了&#xff0c;Amazon SageMaker JumpStart 初体验 CloudLab实验上线啦&#xff01; 本实验将以零一万物最新发布的中文基础模型 Yi-1.5 9B Chat 为例&am…

如何指定Microsoft Print To PDF的输出路径

在上一篇文章中&#xff0c;介绍了三种将文件转换为PDF的方式。默认情况下&#xff0c;在Microsoft Print To PDF的首选项里&#xff0c;是看不到输出路径的设置的。 需要一点小小的手段。 运行输入 control 打开控制面板&#xff0c;选择硬件和声音下的查看设备和打印机 找到…

在卷积神经网络(CNN)中为什么可以使用多个较小的卷积核替代一个较大的卷积核,以达到相同的感受野

在卷积神经网络&#xff08;CNN&#xff09;中为什么可以使用多个较小的卷积核替代一个较大的卷积核&#xff0c;以达到相同的感受野 flyfish 在卷积神经网络&#xff08;CNN&#xff09;中&#xff0c;可以使用多个较小的卷积核替代一个较大的卷积核&#xff0c;以达到相同的…

探索大型语言模型自动评估 LLM 输出长句准确性的方法

LLM现在能够自动评估较长文本中的事实真实性 源码地址&#xff1a;https://github.com/google-deepmind/long-form-factuality 论文地址&#xff1a;https://arxiv.org/pdf/2403.18802.pdf 这篇论文是关于谷歌DeepMind的&#xff0c;提出了新的数据集、评估方法和衡量标准&am…

一篇文章搞懂时间复杂度和空间复杂度

不知道小伙伴们有没有刷过力扣上的算法题&#xff0c;我在上研究生的时候&#xff0c;刷过了前40道题&#xff0c;上面的算法题&#xff0c;我觉得还挺难的&#xff0c;当你写完代码的时候&#xff0c;就可以提交自己写的代码到系统上&#xff0c;系统会给你写的代码计算时间复…

嵌入式c语言1——gcc以及linux嵌入式

GCC全名GNU Complier Collection&#xff0c;是一个开源的程序语言解释器&#xff0c;运行在linux系统中 对以程序名后缀结尾源代码文件&#xff0c;gcc可以做解释并生成可执行文件

uniapp做小程序内打开地图展示位置信息

使用场景&#xff1a;项目中需要通过位置信息打开地图查看当前位置信息在地图那个位置&#xff0c;每个酒店有自己的经纬度和详细地址&#xff0c;点击地图按钮打开内置地图如图 方法如下&#xff1a; <view class"dttu" click"openMap(info.locationY,info.…

解决Linux环境Qt报“cannot find -lgl“问题

今天&#xff0c;在Ubuntu 18.04.6环境下&#xff0c;安装Qt5.14.2之后&#xff0c;运行一个QWidget工程&#xff0c;发现Qt报"cannot find -lgl"错误。     出现这种现象的原因&#xff1a;Qt的Path路径没有配置&#xff0c;缺少libqt4-dev依赖包和一些必要的组件…

128陷阱详解

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

基于机器学习的永磁同步电机矢量控制策略-高分资源-下载可用!

基于机器学习的永磁同步电机矢量控制策略 优势 训练了RL-Agent&#xff0c;能够提高电机在非线性负载下的性能。 部分程序 仿真结果 转矩估计及dq轴电流。 代码有偿&#xff0c;50&#xff0c;需要的可以联系。

Vue前端练习

此练习项目只涉及前端&#xff0c;主要是vue和ElementUI框架的使用。&#xff08;ElementUI官网&#xff1a;Element - The worlds most popular Vue UI framework&#xff09; 一、环境准备 安装idea 安装Node.js 一键式安装(不需要做任何配置) npm -v&#xff08;也可用nod…

C语言 | Leetcode C语言题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; int rob(int* nums, int numsSize){// dp0: 不偷这个屋子能窃到的最高金额int dp0 0;// dp1: 偷这间屋子能窃到的最高金额int dp1 nums[0];for (int i 1; i < numsSize; i) {int dp0new fmax(dp0, dp1);int dp1new dp0 nums[i];dp…

前端知识点

HTML、CSS 相关 1、 BFC 1、BFC 是什么&#xff1f; BFC&#xff08;Block Formatting Context&#xff09; 格式化上下文&#xff1b; 指一个独立的渲染区域&#xff0c;或者说是一个隔离的独立容器&#xff1b;可以理解为一个独立的封闭空间。无论如何不会影响到它的外面 …

day09了 加油

浅拷贝 指向同一个地址空间 右边不可取地址 左边一定是到了具体的位置 右值引用std&#xff1a;&#xff1a; move 相信大家默认构造函数都没有问题&#xff0c;所以就不贴例子了 浅拷贝构造函数 只负责复制地址&#xff0c;而不是真的把完整的内存给它 #include <iostre…

【MySQL备份】Percona XtraBackup基础篇

目录 1.关于Percona XtraBackup 2. Percona XtraBackup有哪些特点&#xff1f; 3.安装Percona XtraBackup 3.1.环境信息 3.2.安装步骤 4. xtrabackup内部流程图 5.Percona XtraBackup基础语法 5.1.全量备份 5.2.增量备份 5.2.1.基于全量备份的增量备份 5.2.2.基于前…

超越所有SOTA达11%!媲美全监督方法 | UC伯克利开源UnSAM

文章链接&#xff1a;https://arxiv.org/pdf/2406.20081 github链接&#xff1a;https://github.com/frank-xwang/UnSAM SAM 代表了计算机视觉领域&#xff0c;特别是图像分割领域的重大进步。对于需要详细分析和理解复杂视觉场景(如自动驾驶、医学成像和环境监控)的应用特别有…

深入解读OkHttp3中的Request5

OkHttp 是由 Square 开发的一个高效的 HTTP 客户端库&#xff0c;广泛应用于 Android 开发中。作为资深安卓开发工程师&#xff0c;我们经常需要与网络通信打交道&#xff0c;而 OkHttp 提供了一个简洁而强大的 API 来处理这些通信。在这篇文章中&#xff0c;我们将深入探讨 Ok…

python自动化运维--DNS处理模块dnspython

1.dnspython介绍 dnspython是Pyhton实现的一个DNS工具包&#xff0c;他几乎支持所有的记录类型&#xff0c;可以用于查询、传输并动态更新ZONE信息&#xff0c;同事支持TSIG&#xff08;事物签名&#xff09;验证消息和EDNS0&#xff08;扩展DNS&#xff09;。在系统管理方面&a…

EVE-NG网络仿真平台搭建

现在目前实验都是使用华为的Ensp模拟器&#xff0c;但是有时候一些功能模拟器无法实现&#xff0c;要不就是使用真机进行实验&#xff0c;第二个就是换个支持相关命令的模拟器了&#xff0c;今天来简单学习下EVE-NG这个模拟器。 一、EVE-NG简介 EVE-NG&#xff08;Emulated Vir…