数模转换器(ADC):AD7606+GD32F407固件参考代码

AD7606数据采集模块使用方法 AD7606是一块八通道,双极性输入,同步采样16位ADC。内置2.5V基准电压。由于AD7606没有内部的寄存器,需要直接利用引脚配置ADC的模式,所以AD7606的控制原理也是很简单,但是需要占用的I/O口的资源很多。...... 阅读详情
AI摘要

博主分享项目中AD7606转换芯片使用笔记。介绍芯片关键参数,如通道、过采样率、通信协议等;进行时序分析,说明读数据时机;还给出参考代码,包括管脚定义、过采样率设置等内容,代码仅提供思路未验证。

项目上使用到该转换芯片,写点笔记,希望对大家有帮助。我接触这个芯片也就几天,整体来说,没寄存器,很好控制。但是我的代码仅提供思路,现在没有板子,不能验证。刚入职的硬件开发岗萌新,先写这么多,有机会再更新,如有错误地方请各位指正,谢谢。

1. 芯片关键参数介绍

        AD7606支持8通道模拟输入;7种过采样率设置;SPI/QSPI™/MICROWIRE™/DSP多种通信协议;模拟输入范围选择;参考电压选择。

  •   Pin OS0~PinOS2用于控制过采样率选择,OS2是MSB控制位,OS0是LSB控制位。可以根据需要选择硬件或者软件的方式控制过采样,真值表如下:

  •  Pin6(PAR_N/SER/BYTE SEL)管脚用于选择通信方式,我这里用的是并行方式,直接将管脚接地即可。数据吞吐量大,GPIO口不够用则改用字节传输或者串行模式。
  • Pin7(STBY_N)用于选择省电模式,不在意功耗直接拉高即可,如果需要切换芯片工作模式,则需要配合使用RANG引脚。
  • Pin8(RANG)用于选择输入电压范围,RANG=0,输入电压范围是±5 V;RANG=1,输入电压范围是±10 V。
  • Pin9和Pin10(CONVST A, CONVST B)用于控制转换选择,A对应1234,B对应5678,通常直接将AB短接,一起控制,逻辑1表示开始转换,逻辑0表示未转换。
  • Pin12(RD_N/SCLK),并行模式下是读数据控制信号,低电平有效;串行模式下是时钟输出控制引脚。
  • Pin13(CS_N),片选引脚,并行模式下通常将其与Pin12短接,低电平有效。
  • Pin14(BUSY),在CONVST A, CONVST B的上升沿跳转为高电平,表示开始转换;所有通道转换结束后才转为低电平;下降沿表明数据已存储在输出寄存器。
  • Pin15(FRSTDATA):目前我觉得没用的引脚

    2. 时序分析 

        首先是读数据的时机,可以在转换结束之后在读取本次转换结果,也可以在转换的过程中读取上一次的转换结果,分别对应下面图片中的Figure 2和Figure 3。区别在于前者在BUSY为低之后才拉低CS管脚开始读数据,而后者则是在BUSY期间就拉低了CS管脚进行读数据。注意:手册提到,在BUSY高时读取的任何数据必须在BUSY下降沿发生之前完成。当BUSY信号高时,CONVST A或CONVST B上的上升沿没有影响。

        下面是并行模式下读取数据的时序图,为了方便,直接将CS和RD管脚短接,一起控制数据读取过程。另外,根据该时序图和手册说明,FRSTDATA仅表示通道1的数据读取情况。

3. 参考代码

 #管脚定义,根据自己的电路图做调整

uint16_t ADC_Data[8];

//尽量将控制Pins和数据Pins分别接到同名GPIO口
#define		ADC_DataPort					GPIOB			//16 bits并行数据端口
#define		ADC_CtrlPort					GPIOC			//其它的必要控制端口

//关键控制Pins
#define		ADC_RANG						GPIO_PIN_9		//输入电压范围选择;0:+-5V;1:+-10V
#define		ADC_STBY						GPIO_PIN_8		//下电模式选择;低电平有效;默认电平:1
#define		ADC_OS0							GPIO_PIN_7      //默认电平:0
#define		ADC_OS1							GPIO_PIN_6      //默认电平:0
#define		ADC_OS2							GPIO_PIN_5      //默认电平:0
#define		ADC_RD							GPIO_PIN_4      //读取和片选控制信号;低电平有效;默认电平:1
#define		ADC_RESET						GPIO_PIN_3      //复位信号;高电平有效;默认电平:0
//#define		ADC_FRSTDATA					GPIO_PIN_2      //低电平有效;默认电平:0
#define		ADC_BUSY						GPIO_PIN_1      //转换状态信号;输入0:转换结束;1:正在转换
#define		ADC_CONVST_AB					GPIO_PIN_0      //开始转换信号;高电平有效;默认电平:0

//用于设置over sampling率
#define		ADC_SetOS0()					gpio_bit_set(ADC_CtrlPort, ADC_OS0)
#define		ADC_SetOS1()					gpio_bit_set(ADC_CtrlPort, ADC_OS1)
#define		ADC_SetOS2()					gpio_bit_set(ADC_CtrlPort, ADC_OS2)
#define		ADC_ResetOS0()					gpio_bit_reset(ADC_CtrlPort, ADC_OS0)
#define		ADC_ResetOS1()					gpio_bit_reset(ADC_CtrlPort, ADC_OS1)
#define		ADC_ResetOS2()					gpio_bit_reset(ADC_CtrlPort, ADC_OS2)

#过采样率设置

/*!
    \brief        ADC过采样选择
    \param[in]    OS: 过采样率选择
				  可选择参数:0、2、4、8、16、32、64
    \param[out]   无
    \retval       无
*/
void AD7606_SetOversampling(uint8_t OS)
{
    switch(OS)
    {
        case 0:  // 000
            ADC_ResetOS2(); 
            ADC_ResetOS1(); 
            ADC_ResetOS0();
            break;

        case 2:  // 001
            ADC_ResetOS2(); 
            ADC_ResetOS1(); 
            ADC_SetOS0();
            break;

        case 4:  // 010
            ADC_ResetOS2(); 
            ADC_SetOS1(); 
            ADC_ResetOS0();
            break;

        case 8:  // 011
            ADC_ResetOS2(); 
            ADC_SetOS1(); 
            ADC_SetOS0();
            break;

        case 16: // 100
            ADC_SetOS2(); 
            ADC_ResetOS1(); 
            ADC_ResetOS0();
            break;

        case 32: // 101
            ADC_SetOS2(); 
            ADC_ResetOS1(); 
            ADC_SetOS0();
            break;

        case 64: // 110
            ADC_SetOS2(); 
            ADC_SetOS1(); 
            ADC_ResetOS0();
            break;

        default: // default case
            ADC_ResetOS2(); 
            ADC_ResetOS1(); 
            ADC_ResetOS0();
            break;
    }
}

#AD7606初始化

/*!
    \brief        ADC初始化配置
    \param[in]    无
    \param[out]   无
    \retval       无
*/
void AD7606_Init(void)
{
	rcu_periph_clock_enable(ADC_DataPort | ADC_CtrlPort);
	
	//数据输入引脚配置
	gpio_mode_set(ADC_DataPort, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_ALL);
	
	//输入反馈信号
	gpio_mode_set(ADC_CtrlPort, GPIO_MODE_INPUT, GPIO_PUPD_NONE, ADC_BUSY);
	
	//输出控制信号:默认低电平的信号
	gpio_mode_set(ADC_CtrlPort, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLDOWN, ADC_RANG | ADC_OS0 | ADC_OS1 | ADC_OS2 | ADC_RESET | ADC_CONVST_AB);
	gpio_output_options_set(ADC_CtrlPort, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, ADC_RANG | ADC_OS0 | ADC_OS1 | ADC_OS2 | ADC_RESET | ADC_CONVST_AB);
	
	//输出控制信号:默认高电平的信号
	gpio_mode_set(ADC_CtrlPort, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, ADC_STBY | ADC_RD);
	gpio_output_options_set(ADC_CtrlPort, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, ADC_STBY | ADC_RD);
	
	//上电复位ADC芯片
	gpio_bit_set(ADC_CtrlPort, ADC_RESET);
	delay_1ms(1);
	gpio_bit_reset(ADC_CtrlPort, ADC_RESET);
}

#AD7606转换的开始和结束

/*!
    \brief        ADC开始转换
	\param[in]    无
    \param[out]   无
    \retval       无
*/
void AD7606_StartConv(void)
{
	gpio_bit_set(ADC_CtrlPort, ADC_CONVST_AB);
}

/*!
    \brief        ADC结束转换
	\param[in]    无
    \param[out]   无
    \retval       无
*/
void AD7606_StopConv(void)
{
	gpio_bit_reset(ADC_CtrlPort, ADC_CONVST_AB);
}

#省电模式选择

void AD7606_SwitchPowerDownMode(uint8_t Mode)
{
    switch(Mode)
    {
        case 1  : 
            gpio_bit_reset(ADC_CtrlPort, ADC_STBY); 
            gpio_bit_set(ADC_CtrlPort, ADC_RANG);
            break; 

        case 0  : 
            gpio_bit_reset(ADC_CtrlPort, ADC_STBY); 
            gpio_bit_reset(ADC_CtrlPort, ADC_RANG);
            break; 

        default : 
            gpio_bit_reset(ADC_CtrlPort, ADC_STBY); 
            gpio_bit_set(ADC_CtrlPort, ADC_RANG);
            break; 
    }
}

#读取转换结果

uint16_t* AD7606_ReadData(void)
{	
	//开始单次转换
	AD7606_StartConv();
	
	//等待转换结束
	while(gpio_input_bit_get(ADC_CtrlPort, ADC_BUSY));
	
	//结束转换准备读取数据寄存器中的数据
	AD7606_StopConv();
	
	//读取数据:并行模式读取数据
	for(uint8_t i = 0; i < 8; i ++)
		{
            //这两个延时有点长了,或许不需要延时也许,30ns的时间内即可读完一个通道数据
			gpio_bit_reset(ADC_CtrlPort, ADC_RD);
            //delay_1ms(1);
			ADC_Data[i] = gpio_input_port_get(ADC_DataPort);
			delay_1ms(1);            
			gpio_bit_set(ADC_CtrlPort, ADC_RD);			
		}
	
	return ADC_Data;
}
/*!
	\brief        ADC复位
    \param[in]    无				  
    \param[out]   无
    \retval       无
*/
void AD7606_Reset(void)
{
	gpio_bit_set(ADC_CtrlPort, ADC_RESET);
	
	delay_1ms(1);			//最小50 ns
	
	gpio_bit_reset(ADC_CtrlPort, ADC_RESET);
}

【GD32篇】驱动AD7616完成数据采集 GD32F10X驱动AD7616完成数据采集 阅读详情

相关推荐

AD7606调试笔记

文章目录AD7606接线图AD7606SPI通讯接口说明AD7606时序图AD7606时序图讲解AD7606 STM32引脚配置AD7606 程序模块遇到的问题以及总结 由于训练电赛,需要选取一块测量速度快,精度更高速度更快的外部ADC,所以选了一块AD7606。 AD7606是一块八通道,双极性输入,同步采样16位ADC。内置2.5V基准电压。由于AD7606没有内部的寄存器,需要直接利用引脚配置ADC的模式,所以AD7606的控制原理也是很简单,但是需要占用的I/O口的资源很多。 AD7606接线图 A

做个好码的博客 1万+

AD7606驱动源代码完整版

AD7606驱动软件模拟及硬件驱动源代码完整版

qq_39626643的博客 1846

FPGA控制AD7606进行数据采集

一、AD7606数据手册 1.ADC采样原理 在实际的工程中,经前端传感器出来的信号基本都是模拟信号,而后端mcu主控芯片是基于数字信号进行处理的,因此需要用到ADC进行模数转换。ADC包括三个基本功能:抽样、量化和编码。抽样过程是将模拟信号在时间上离散化,使之成为抽样信号;量化是将抽样信号的幅度离散化使之成为数字信号;而编码则是将数字信号转换成数字系统所能接受的形式。如何实现这三个功能就决定了ADC的形式和性能。同时,ADC的分辨率(即采样精度)越高,需要的转换时间就......

求学者 2万+

gd32f103 调试 ad7606

使用的是spi接线方式,需要注意DB7数据线也就是MISO,接一根就行,也不需要给ad7606发数据。而且最重要的是DB15需要接地,是串口并口选择线,会影响数据的稳定性。 用cubemx生成stm32的工程然后用GD的库编译,生成时可以选择 /* SPI1 init function */ void MX_SPI1_Init(void) { hspi1.Instance = SPI1; hspi1.Init.Mode = SPI_MODE_MASTER; hspi1.Init.Dire...

wy212670的博客 1495

STM32与AD7606通过SPI接口实现高精度数据采集

本文还有配套的精品资源,点击获取 简介:在嵌入式系统中,STM32微控制器与AD7606模拟数字转换器通过SPI总线进行数据通信,用于实现高精度数据采集。本项目展示了如何配置STM32作为SPI主设备,控制AD7606进行多通道16位数据采样。介绍了STM32的功能特性,AD7606的高精度ADC转换能力,以及SPI通信协议的实现细节。开发者需要掌握SPI协议,STM32的...

weixin_42327217的博客 6207

AD7606与STM32F407串行通信

AD7606与STM32F407串行通信

AD7606 ADC的SPI驱动——FPGA学习笔记17

AD7606 支持 2 种时序转换, 由于我们采用的时串行 SPI 模式, 本身 SPI 读取数据就会耽误很多时间, 所以必须采用第二种工作时序, 才能确保 200Kbps 的采样率。空闲SCLK为高,CPOL为1 在SCLK第一个上升沿进行数据读取,CPHA为1。

m0_69082048的博客 5028

GD32F303RCT6驱动AD7656驱动程序

GD32F303RCT6驱动AD7656驱动程序,ad7656采集电压,dac输出采集的电压

STM32F407-基于AD7606进行多路数据采集

1.原理图 2.管脚定义 2.1OS2,OS1,OS0 查阅数据手册 这三个管脚组合控制过采样模式。 000 表示无过采样,最大 200Ksps 采样速率。 001 表示 2 倍过采样, 也就是硬件内部采集 2 个样本求平均。 010 表示 4 倍过采样, 也就是硬件内部采集 4 个样本求平均。 011 表示 8 倍过采样, 也就是硬件内部采集 8 个样本求平均。 100 表示 16 倍过采样, 也就是硬件内部采集 16 个样本求平均。 101 表示 32 倍过采样..

如何心安理得的在老板眼皮下摸鱼 2万+

stm32f407和adc7606采集

采用stm32f407,spi总线采集8路16位精度的adc

逆向解析喜马拉雅新版xm-sign算法:从dws.1.6.8.js到签名生成

本文详细解析了喜马拉雅新版xm-sign算法的逆向破解方法。通过定位核心JS文件dws.1.6.8.js,构建本地Node.js模拟执行环境,并解密关键参数cid与appKey,最终实现签名算法的本地化稳定生成,为数据采集提供可靠解决方案。

weixin_29250403的博客 214

AD7606使用指南与参考代码

为了方便更改,关键的控制pin尽量链接到同名的GPIO_Port,做不到就老实更改初始化的部分;注意开启自己使用的SPIx时钟源。//尽量将控制Pins和数据Pins分别接到同名GPIO口#define AD7606_CtrlPort GPIOD //其它的必要控制端口#define AD7606_DataPort GPIOB //SPI相关端口以及输入信号//GPIOB。

magicssss的博客 1719

从零构建智能监控系统:ZLMediaKit与SpringBoot的RTSP流处理实战

本文详细介绍了如何从零构建智能监控系统,结合ZLMediaKit与SpringBoot实现RTSP流处理。通过多协议支持、高性能架构设计及工业级部署优化,解决传统监控方案的兼容性差、延迟高等问题,适用于物联网和智能安防领域。

weixin_29002209的博客 370

STM32F4探索者,基于SPI实现AD7606信号串行采集

模块名称:AD7606 多通道AD 数据采集模块模块尺寸:50mm * 48mm模块供电:5V模块输入电压范围:±5V,±10V(由RANGE 引脚的逻辑电平决定,该引脚与逻辑高电平连接时,所有通道模拟输入范围为±10V。该引脚与逻辑低电平连接时,所有通道模拟输入范围为±5V。程序默认±5V)输入阻抗:1MΩ内部基准电压源:2.5V(可自行配置外部基准电压)模拟输入箝位保护:±16.5V模块采样率:200KSPS(所有8 个通道)模块分辨率:16 bit。

binocthrx的博客 1万+

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

Mac电脑用Latex论文排版3天速成5天实战de笔记

我后悔了,这五天竞赛搞得我视力都下降了...一个冲动的决定后成为数模竞赛论文写手,3天速成+5天时间=点亮攻克latex写论文技能💡关于Overleaf我是Mac,曾经按照大部分推荐的方式用TEXshop+vs code,但是把模板导入就开始报错。跟着少之又少的适配mac的教程(此时我已知道大概是走错路了)改了配置也无效。海鲜市场找佬改了半天,佬问我:一定要用VC吗?我说,那倒也不是。于是佬推荐我overleaf,三下五除二帮我挑配了环境,美汁汁收了我30块钱。

luwanjoyce的博客 2250

AD7606模块

STM32F103+AD7606

m0_69752994的博客 1万+

使用 MATLAB/Simulink 进行锂电池SOC估算和等效电路建模

本文介绍了使用MATLAB/Simulink进行锂电池SOC估算与等效电路建模的方法。首先阐述了SOC估算和等效电路模型的背景及重要性,然后详细讲解了系统结构设计的主要组成部分,包括电池模块、SOC估算模块(采用卡尔曼滤波器算法)和等效电路模型等。文章重点分步说明了建模过程:从创建Simulink项目、搭建电池模块,到实现SOC估算算法(提供示例代码),构建等效电路模型(Thevenin模型示例),添加传感器模块,最后设置仿真参数。通过仿真运行分析关键指标(SOC估算误差、电压偏差等)来评估模型性能,为锂电

xiaoheshang_123的博客 264

stm32 AD7606 芯片驱动 hal库 spi通讯

这个三个引脚用于配置芯片的采样频率,只要不设置为111即可正常采样;CONVSTA CONVSTB 这两个引脚用于启动芯片采集转换,默认高电平,上升沿后,采样芯片开始数据采集RESET 用于开始采样前对芯片的复位,如果没有复位,后续采集的数据可能是乱码,只需要在开机的时候复位一次即可。RD引脚即数据通讯时钟CS引脚通讯使用,低电平有效BUSY引脚,默认低电平,下降沿表示数据转换成功DOUTA,DOUTB 使用spi通信只需要这两个引脚。

qq_45019496的博客 6346

Skills入门学习路线

简单来说,Skills就像是给Claude准备的”插件包"或”工具箱”。它是一个集合,里面装了特定的操作指令(Instructions)、可执行脚本(Scripts)和相关素材(Resources)。2025 年 10 月中旬,Anthropic 正式发布 Claude Skills。两个月后,Agent Skills 作为开放标准被进一步发布,意在引导一个新的 AI Agent 开发生态。OpenAI、Github、VS Code、Cursor 均已跟进。为了更好的理解,你可以把。

十二测试录 1098

LeRobot 入门教程(十六)Isaac Lab LeIsaac 叠衣服、夹橙子仿真环境

LeRobotEnvHub现已支持通过LeIsaac进行机器人模仿学习,提供摘橙子、搬立方体等日常任务仿真环境。用户可通过HuggingFace共享环境,使用一行代码加载任务,支持随机动作测试和远程操控。系统提供云端仿真方案,无需本地GPU即可运行。当前支持4种任务环境,通过make_env函数切换,其中折叠布料任务需先调用initialize()函数。该平台集成了数据采集、转换和训练全流程,为机器人学习提供便捷工具链。

2506_90492529的博客 1483

基于STM32HAL库AD7606调试避坑指南

比较容易踩坑的是上面提到的一些特殊时序及引脚,其余如BUSY、FRSTDATA是AD7606的指示引脚,单片机可选择中断方式读取,但是若选择定时采样的话也可以不处理这两个信号。该引脚用于将AD7606/AD7606-6/AD7606-4置于两种断电模式之一:待机模式或关机模式。我选用的是串行接口,所以PAR/SER/BYTE SEL拉高,DB15拉低。过采样是指在ADC位数固定的硬件条件下,来提升ADC的有效位数,进而提高ADC的分辨率。一共有三种模式,分别是并行接口模式、串行接口模式、并行字节接口模式。

weixin_55024277的博客 2370

Python遥感图像处理应用篇(二十三):Python+GDAL 批量拼接图像

遥感影像拼接分多种不同的情况,比如比较常用的是两幅影像拼接或者多个图像合并为一个图像。GDAL中实现影像拼接的方式也有多种,比如常用可以通过numpy读取影像数组,并计算各个图像的numpy数组范围,合并多个numpy数组为一个最终的结果,并将其重新输出为一幅新的图像,即可实现图像的拼接。另外比较方便的一种方法便是使用GDAL.warp()函数方法。这个函数的功能很多,可以实现多种不同的目的,比如用于坐标系转换、投影变换、图像合并与镶嵌、地理范围裁剪、更改分辨率、矢量裁剪等多种功能。这些功能可以通过设置Op

soderayer的博客 4643

从零构建高精度数据采集系统:AD7606与GD32F407的硬件协同设计指南

本文详细介绍了如何从零构建基于AD7606 ADC和GD32F407微控制器的高精度数据采集系统。重点解析了硬件协同设计中的并行接口优化、电源管理、抗干扰策略以及性能调试方法,为工业自动化和精密测量应用提供完整的解决方案和实践指南。

a1b2c的博客 249

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

通过DSP采集AD7606的转换结果

前情提要 DSP芯片中自带的AD转换芯片为12位,而在实际应用中,我们常会使用精度更高、转换速率更快的AD芯片,我们使用DSP读取片外AD芯片的转换结果。下面我们以AD7606为例,介绍其工作原理、引脚配置以及主程序。 工作原理 AD7606为16位AD芯片,其可接受8路输入信号,将其转化为16位二进制数输出。本例中我们使用其并行输出模式。 在配置引脚之前,我们需要知道AD7606相关重要引脚的作用。 上图所示为AD7606的原理...

lowestsimulinkee的博客 9239

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

为什么学习率预热(warmup)能显著改善Transformer等大模型的训练稳定性?

t$ 的分母 $(1-\beta_2^t)$ 极小,导致方差估计值波动剧烈。若此时 $\eta$ 较大,更新步长 $\Delta \theta$ 将不可控。Adam 优化器的参数更新公式为 $\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}{warmup}$ 时人为压低 $\eta_t$,从而保证 $\Delta \theta$ 的数值稳定性。在训练初期($t$ 很小),$\hat{v}{warmup}}$,在 $t < T。

2402_84593233的博客 182

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: Keil5下载程序或debug过程提示Error: ‘D:\Keil VS\ARM\BIN\SARMCM3.DLL‘ not found
下一篇: AD7606使用指南与参考代码
Steppenwolfff
博客等级 码龄6年 35粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值