【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.mzph.cn/news/864749.shtml

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

相关文章

[AIGC] Spring Boot 整合 ClickHouse:优雅使用的指南

在大数据处理的场景中&#xff0c;ClickHouse的极高效率和强大功能使其在众多数据库系统中脱领而出。而Spring Boot作为流行的Java框架&#xff0c;与ClickHouse的结合&#xff0c;将使得数据分析如虎添翼。 文章目录 1. 添加依赖2. 配置连接3. 创建连接工厂4. 执行SQL操作 接下…

同星TTS系列产品全新亮相:让开发测试变得更简单!

TTS系列产品 如果需要完整地测试 ECU&#xff0c;不仅需要将通信网络连接到测试系统&#xff0c;还需要连接 I/O 接口。同星的TTS测试系统将连接 I/O 通道所需的所有电路组件集成在一个模块中&#xff0c;可以极大地简化测试台架和HIL测试系统的设置&#xff0c;提高搭建和测试…

武汉星起航:跨境电商领域的领航者,助力合作伙伴全球布局

在跨境电商的汹涌浪潮中&#xff0c;武汉星起航电子商务有限公司如同一颗璀璨的明星&#xff0c;自2017年起便以亚马逊自营店铺为核心业务&#xff0c;不断积累实战运营经验&#xff0c;逐步建立了自己在市场中的稳固地位。随着2020年公司的正式成立&#xff0c;武汉星起航明确…

layui 中 css 如何设置input placeholder 字体颜色和大小

在 Layui 中设置输入框&#xff08;input&#xff09;的占位符&#xff08;placeholder&#xff09;的字体颜色和大小&#xff0c;可以通过 CSS 来实现。以下是具体的步骤&#xff1a; 1. 添加 CSS 样式&#xff1a;在你的 CSS 文件或 <style> 标签中添加自定义样式。 …

学习笔记——动态路由——IS-IS中间系统到中间系统(背景)

一、IS-IS技术背景 1、前言 IS-IS最初是国际标准化组织ISO(the International Organization for Standardization)为它的无连接网络协议CLNP(ConnectionLess Network Protocol)设计的一种动态路由协议。 和OSPF一样&#xff0c;IS-IS也是一种基于链路状态并使用最短路径优先…

浅谈制造企业如何借力EHS,让安全管理上新台阶

当今商业环境中&#xff0c;企业管理不仅关注经济效益&#xff0c;更将目光投向了长远发展的基石——EHS&#xff08;环境Environment、健康Health、安全Safety&#xff09;管理体系。这一体系的崛起&#xff0c;标志着企业管理理念的一次深刻变革&#xff0c;它如同企业的守护…

Chisel学习笔记(1)——Chisel安装与Verilog代码仿真

参考链接&#xff1a; https://www.chisel-lang.org/docs/installation 使用Chisel语言编写硬件描述语言&#xff0c;相比于使用Verilog会更加地灵敏快捷&#xff0c;Coding效率更高&#xff0c;但似乎debug会出现一些小问题。但新工具还是要尝试一下才知道好不好用。 1 安装C…

构建RAG+nebula graph(知识图谱KG)

目标&#xff1a;通过利用 LlamaIndex 和 NebulaGraph 为费城费城人队&#xff08;Philadelphia Phillies&#xff09;构建一个RAG流程&#xff0c;深入探讨知识图谱。 NebulaGraph 是市场上最好的知识图谱数据库之一。它是开源的、分布式的&#xff0c;并且能够处理具有亿万边…

【linux】网络基础(2)——udp协议

文章目录 引言udp协议的特点udp的头部结构UDP的工作原理简单的UDP网络程序套接字的认识udp服务端代码udp客户端代码服务端运行 引言 用户数据报协议&#xff08;User Datagram Protocol, UDP&#xff09;是一种无连接的传输层协议。它是因特网协议家族的一部分&#xff0c;定义…

表单长时间无响应,页面失效提示

先贴代码&#xff0c;有时间在解释 <template><div :class"$style.root"><div>主页面</div><el-input v-model"txt" input"onChange" /></div> </template> <script> const TIME 10; //时间&…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

超酷的打字机效果?分享 1 段优质 CSS 代码片段!

大家好&#xff0c;我是大澈&#xff01; 本文约 900 字&#xff0c;整篇阅读约需 1 分钟。 每日分享一段优质代码片段。 今天分享一段优质 CSS 代码片段&#xff0c;实现打字机般的效果或其他类似的离散动画效果。 老规矩&#xff0c;先阅读代码片段并思考&#xff0c;再看代…

Python入门 2024/7/2

目录 格式化的精度控制 字符串格式化 对表达式进行格式化 小练习&#xff08;股票计算小程序&#xff09; 数据输入 布尔类型和比较运算符 if语句 小练习&#xff08;成人判断&#xff09; if-else语句 if-elif-else语句 练习&#xff1a;猜猜心里数字 嵌套语句 猜…

Pytest+Allure+Yaml+PyMsql+Jenkins+Gitlab接口自动化(四)Jenkins配置

一、背景 Jenkins&#xff08;本地宿主机搭建&#xff09; 拉取GitLab(服务器)代码到在Jenkins工作空间本地运行并生成Allure测试报告 二、框架改动点 框架主运行程序需要先注释掉运行代码&#xff08;可不改&#xff0c;如果运行报allure找不到就直接注释掉&#xff09; …

offer7.重建二叉树

根据二叉树的前序遍历和中序遍历重建二叉树 问题描述&#xff1a;输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如&#xff0c;输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3…

二叉树之遍历OJ(含迭代)

目录 1.递归实现 前言 &#xff08;1&#xff09;前序遍历 &#xff08;2&#xff09;中序遍历 &#xff08;3&#xff09;后序遍历 2.迭代实现 前言 &#xff08;1&#xff09;前序遍历 方法一 方法二 &#xff08;2&#xff09;中序遍历 方法一 方法二 &#x…

2023年“科创中国”系列榜单发布

在7月2日召开的第二十六届中国科协年会上&#xff0c;中国科协正式发布2023年“科创中国”系列榜单。榜单经初评、终评&#xff0c;遴选出先导技术榜150项、新锐企业榜50项、融通创新组织榜10项、技术经理人先锋榜20项&#xff0c;共计230项入榜项目。 作为“科创中国”建设的…

BIOS设置与系统分区

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 目录 一BIOS 1破解密码的前提 2B…

《植物大战僵尸融合版》1.0预览版下载以及安装教程

游戏介绍 《植物大战僵尸融合版》是一款基于经典游戏《植物大战僵尸》的创新改版&#xff0c;由B站UP主蓝飘飘fly开发。这款游戏的特色在于引入了植物融合系统&#xff0c;允许玩家将两种不同的植物合体&#xff0c;创造出具有新特性的植物&#xff0c;从而带来全新的策略对战…

Canvas:掌握贝塞尔曲线与封装路径

想象一下&#xff0c;用几行代码就能创造出如此逼真的图像和动画&#xff0c;仿佛将艺术与科技完美融合&#xff0c;前端开发的Canvas技术正是这个数字化时代中最具魔力的一环&#xff0c;它不仅仅是网页的一部分&#xff0c;更是一个无限创意的画布&#xff0c;一个让你的想象…