【CH32V305FBP6】USBD 初始化分析

文章目录

  • 前言
  • 实现
    • 时钟初始化分析
    • USBD 设备初始化分析
      • 端点初始化分析

前言

分析 V305 USBD 初始化程序。

实现

初始化

/* main.c */
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);SystemCoreClockUpdate();// USB 初始化USBHS_RCC_Init();USBHS_Device_Init(ENABLE);while(1);
}

初始化时钟

USBHS_RCC_Init();

初始化 USBD 设备

USBHS_Device_Init(ENABLE);

时钟初始化分析

void USBHS_RCC_Init( void )
{// 时钟源选择:USB PHYRCC_USBCLK48MConfig( RCC_USBCLK48MCLKSource_USBPHY );// USBHS PLL 参考源选择:HSERCC_USBHSPLLCLKConfig( RCC_HSBHSPLLCLKSource_HSE );// USBHS PLL 参考源分频:2分频RCC_USBHSConfig( RCC_USBPLL_Div2 );// USBHS PLL 参考时钟频率选择:4MHzRCC_USBHSPLLCKREFCLKConfig( RCC_USBHSPLLCKREFCLK_4M );// USBHS PLL 内部 PLL 控制使能RCC_USBHSPHYPLLALIVEcmd( ENABLE );// USBHS 模块时钟使能RCC_AHBPeriphClockCmd( RCC_AHBPeriph_USBHS, ENABLE );
}

USBD 设备初始化分析

void USBHS_Device_Init ( FunctionalState sta )
{if( sta ){USBHSD->CONTROL = USBHS_UC_CLR_ALL | USBHS_UC_RESET_SIE;Delay_Us(10);USBHSD->CONTROL &= ~USBHS_UC_RESET_SIE;USBHSD->HOST_CTRL = USBHS_UH_PHY_SUSPENDM;USBHSD->CONTROL = USBHS_UC_DMA_EN | USBHS_UC_INT_BUSY | USBHS_UC_SPEED_HIGH;USBHSD->INT_EN = USBHS_UIE_SETUP_ACT | USBHS_UIE_TRANSFER | USBHS_UIE_DETECT | USBHS_UIE_SUSPEND;// 端点初始化USBHS_Device_Endp_Init( );USBHSD->CONTROL |= USBHS_UC_DEV_PU_EN;NVIC_EnableIRQ( USBHS_IRQn );}else{USBHSD->CONTROL = USBHS_UC_CLR_ALL | USBHS_UC_RESET_SIE;Delay_Us(10);USBHSD->CONTROL = 0;NVIC_DisableIRQ( USBHS_IRQn );}
}

端点初始化分析

void USBHS_Device_Endp_Init ( void )
{// 端点发送和接收使能:端点1-15,端点0的收发使能信号始终有效USBHSD->ENDP_CONFIG = USBHS_UEP3_T_EN | USBHS_UEP3_R_EN |USBHS_UEP2_T_EN | USBHS_UEP2_R_EN |USBHS_UEP4_T_EN | USBHS_UEP4_R_EN;// 端点n最大长度包:可接收数据最大长度,超出部分丢弃,不写入缓存// 端口0最大支持 64 字节包,其他端点最大支持 1024 字节包USBHSD->UEP0_MAX_LEN  = DEF_USBD_UEP0_SIZE;    // 64USBHSD->UEP2_MAX_LEN  = DEF_USB_EP2_HS_SIZE;   // 512USBHSD->UEP3_MAX_LEN  = DEF_USB_EP3_HS_SIZE;USBHSD->UEP4_MAX_LEN  = DEF_USB_EP4_HS_SIZE;// 端点0缓冲区起始地址,4字节对齐USBHSD->UEP0_DMA    = (uint32_t)(uint8_t *)USBHS_EP0_Buf;// 端点n收发缓冲区起始地址,4字节对齐USBHSD->UEP2_RX_DMA = (uint32_t)(uint8_t *)&UART2_Tx_Buf[ 0 ];USBHSD->UEP2_TX_DMA = (uint32_t)(uint8_t *)USBHS_EP2_Tx_Buf;USBHSD->UEP3_RX_DMA = (uint32_t)(uint8_t *)USBHS_EP3_Tx_Buf;USBHSD->UEP4_TX_DMA = (uint32_t)(uint8_t *)USBHS_EP4_Tx_Buf;USBHSD->UEP4_RX_DMA = (uint32_t)(uint8_t *)USBHS_EP4_Rx_Buf;// 设置端点n准备发送的数据字节数,对于端点0,低7位有效USBHSD->UEP0_TX_LEN  = 0;// 端点n发送控制寄存器,应答 NAK 或忙USBHSD->UEP0_TX_CTRL = USBHS_UEP_T_RES_NAK;// 端点n接收控制寄存器,数据就绪并期望 ACKUSBHSD->UEP0_RX_CTRL = USBHS_UEP_R_RES_ACK;USBHSD->UEP2_TX_LEN  = 0;USBHSD->UEP2_TX_CTRL = USBHS_UEP_T_RES_NAK;USBHSD->UEP2_RX_CTRL = USBHS_UEP_R_RES_ACK;USBHSD->UEP3_TX_LEN  = 0;USBHSD->UEP3_TX_CTRL = USBHS_UEP_T_RES_NAK;USBHSD->UEP3_RX_CTRL = USBHS_UEP_R_RES_ACK;USBHSD->UEP4_TX_LEN  = 0;USBHSD->UEP4_TX_CTRL = USBHS_UEP_T_RES_NAK;USBHSD->UEP4_RX_CTRL = USBHS_UEP_R_RES_ACK;/* Clear End-points Busy Status */for(uint8_t i=0; i<DEF_UEP_NUM; i++ ){USBHS_Endp_Busy[ i ] = 0;}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis缓存管理机制

在当今快节奏的数字世界中&#xff0c;性能优化对于提供无缝的用户体验至关重要。缓存在提高应用程序性能方面发挥着至关重要的作用&#xff0c;它通过将经常使用或处理的数据存储在临时高速存储中来减少数据库负载并缩短响应时间&#xff0c;从而减少系统的延迟。Redis 是一种…

【有为己之心方能克己】

私欲会让人难受&#xff0c;为了自己舒服而去拔除&#xff0c;去除私欲小我&#xff0c;就可以为自己展现大我 “人不为己天诛地灭”&#xff0c;其实这句话不是自私自利的意思&#xff0c; 原意是&#xff1a;人如果不修为自己&#xff0c;不为那个真己而活&#xff0c;不活出…

【设计模式】【行为型模式】【责任链模式】

系列文章目录 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录…

Java 微信小程序自建平台开发票保存到微信卡包

Java 微信小程序自建平台开发票保存到微信卡包 1 获取Access token2 获取自身的开票平台识别码3 设置商户联系方式4 获取授权页ticket5 获取授权页链接6 小程序打开授权页7 收取授权完成事件推送8 创建发票卡券模板9 上传PDF10 将电子发票卡券插入用户卡包 1 获取Access token …

分文件编译(简单学生系统)

定义学生基本信息 ①输出所有学生信息 ②删除某个学生后&#xff0c;输出所有学生信息 ③修改某个学生信息后&#xff0c;输出所有学生信息 ④查找某个学生的信息 main.c #include"k11*.h" int main(int argc, const char *argv[]) {struct student p[4]{{"…

3.js - 纹理的 magfilter、minFilter、各向异性过滤(各项异性解决倾斜模糊问题)

效果图&#xff0c;就是一个PlaneGeometry&#xff0c;加了一个贴图&#xff0c;再设置下面这些属性&#xff0c;你就放大缩小着看吧&#xff0c;反正我看不出什么来 代码 // ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitContro…

Open3D 删除点云中重复的点

目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份   构造重叠区域   合并点云获得重叠点 2、主要…

产品设计的8大步骤

产品设计&#xff0c;通俗来说就是将创新想法或概念转化为落地实体的过程。一般来说&#xff0c;一个成功的产品应当具有创新性、美观性、实用性、可持续性以及经济效益&#xff0c;从而满足用户的使用需求以及市场的发展需求。产品设计也并不是一件简单的事情&#xff0c;产品…

医院挂号系统:基于JSP和MySQL的现代化医疗预约平台

开头语&#xff1a;您好&#xff0c;我是专注于医疗系统开发的IT学长。如果您对医院挂号系统感兴趣&#xff0c;欢迎联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术&#xff0c;B/S架构 工具&#xff1a;Eclipse&#xff0c;MyEclips…

最新CRMEB商城多商户java版源码v1.6版本+前端uniapp

CRMEB 开源商城系统Java版&#xff0c;基于JavaVueUni-app开发&#xff0c;在微信公众号、小程序、H5移动端都能使用&#xff0c;代码全开源无加密&#xff0c;独立部署&#xff0c;二开很方便&#xff0c;还支持免费商用&#xff0c;能满足企业新零售、分销推广、拼团、砍价、…

[方法] 为Cinemachine添加碰撞器

选中场景中的Cinemachine物体&#xff0c;在 Inspector 面板的最下方单击 Add Extension 下拉框&#xff0c;选择 CinemachineCollider。 之后在添加的碰撞器组件中选择要与之碰撞的层&#xff08;Collide Against&#xff09;和忽略的层&#xff08;Transparent Layers&#x…

非静压模型SWASH学习(8)——三维孤立波在锥形岛屿上的爬坡过程(Runup of solitary waves on a conical island)

三维孤立波在锥形岛屿上的爬坡过程&#xff08;Runup of solitary waves on a conical island&#xff09; 算例简介模型配置网格及参数设置网格与地形初始条件与边界条件数值求解方法输出设置模拟时间 波浪&#xff08;孤立波&#xff09;入射边界的时间序列.bnd文件模拟结果注…

机械设备制造企业MES系统解决方案介绍

机械设备制造行业涵盖了各类工业设备、工程机械、农业机械等多个领域&#xff0c;对生产精度、质量控制和效率提出了较高要求。为了提升生产效率、保证产品质量并满足客户需求&#xff0c;越来越多的机械设备制造企业引入了MES系统。本文将详细介绍MES系统在机械设备制造行业的…

5.Android逆向协议-初识HTTP和HTTPS协议

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;微尘网校 上一个内容&#xff1a;4.Android逆向协议-详解二次打包失败解决方案 从现在开始正式进入协议分析了。 首先客户端与服务端之…

Docker 一篇到位

目录 01. Docker使用导航 02. Build Share Run 样例 03. 理解容器 04. 安装 Docker 05. Docker 样例&#xff08;常见命令使用&#xff09; 下载镜像 启动容器 修改页面 保存镜像 docker commit docker save docker load 分享社区 docker login docker tag do…

MySQL 9.0 发布了!

从昨晚开始&#xff0c;在DBA群里大家就在讨论MySQL 9.0发布的事情&#xff0c;但是Release Note和官方文档都没有更新&#xff0c;所以今天早上一上班就赶紧瞅了下具体更新了哪些内容&#xff1f; 整体看来&#xff0c;基本没什么创新。下面是9.0新增或废弃的一些特性。 &…

【Qt知识】Geometry属性

一、走进Geometry的世界 Geometry属性是Qt框架中用于处理和操作几何形状的一系列类的集合。它包括了QPoint、QPointF、QSize、QSizeF、QRect和QRectF等。这些类分别代表点、大小、矩形等基本几何概念&#xff0c;它们的存在让图形界面的创建变得既简单又直观。 位置和尺寸。 其…

如何获取音频伴奏

如何获取音频伴奏 在今天的互联网上,有许多好听的音乐.面对这些音乐,我们有时需要伴奏音频,许多音频在网站上可以查找到,但有些不行,今天,我们要通过audacity软件截取音频伴奏. 下载audacity软件 audacity-64.exe 访问密码&#xff1a;8221 或官方网站(访问较慢) 选择简体…

Modbus TCP与TCP/IP协议间的差异与应用场景

Modbus TCP概述 Modbus协议简介 Modbus是一种专为工业自动化系统设计的通信协议&#xff0c;采用主从模式&#xff0c;即一个主设备&#xff08;通常是计算机或可编程逻辑控制器&#xff09;与多个从设备&#xff08;如传感器、执行器等&#xff09;进行通信。Modbus协议具有…

(漏洞检查项) | 任意文件包含漏洞 file-include

(漏洞检查项)|任意文件包含漏洞 file-include 漏洞场景 1.含有动态包含语句 2.有类似于文件读取的url 漏洞描述 攻击者可以利用任意文件包含漏洞&#xff0c;读取任意文件&#xff0c;对服务器造成危害。 程序开发人员为了代码的灵活性&#xff0c;常常会将包含文件的路径…