STC8G之PCA模块详解

本文详细介绍了STC8G系列单片机的PCA模块,包括PCA基准定时器、中断、引脚重映射和四种工作模式:软件定时器、脉冲输出、8位及10位PWM输出、输入捕获模式。PCA模块具有丰富的功能,如PWM输出的占空比控制、输入信号捕获等,通过配置不同的寄存器和选择合适的模式,可以实现多种定时和信号处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

STC8G系列有1个PCA控制器,它带有3个通道(3 channel),或者说3个子模块,他们都共用一个16位的定时器:PCA Base Timer。这个定时器为3个子模块提供时基。每个子模块对应一个PCA通道,且可以独立配置为4种不同的功能,使得不同的通道可以发挥不同的作用,这些功能包括:

  • PWM发生器(对外输出PWM波)
  • 软件定时器(定时到期产生中断)
  • 脉冲输出(输出可编程的方波信号)
  • 捕获模式(对外部输入到引脚的电平信号进行采样)

PCA模块相关寄存器

PCA基准定时器(PCA Base Timer)

PCA 的3个子模块的功能都依赖于PCA Base Timer。PCA Base Timer本质上就是一个对特定信号进行加法计数的16位定时器(工作在非自动重装模式),所以它具有常规定时器的下面这种控制和功能:

  • 计数时钟源:PCA Base Timer计数时钟频率由CMOD[3:1]配置,可以选择Sysclk、Sysclk的分频、T0的溢出脉冲信号以及从单片机的ECI引脚输入的脉冲信号
  • 计数启停开关:由CCON.CR控制,CR=1开启计数,CR=0停止计数。同时也受CMOD.CIDL位控制:即当单片机进入到空闲(IDLE)模式时,是否停止计数?CMOD.CIDL=0:计数只受CR控制,不受单片机IDLE模式影响;CMOD.CIDL=1:单片机进入空闲模式时,PCA Base Timer停止计数
  • 计数存储寄存器:计数值存储在CH和CL这2个寄存器中。工作在非自动重装模式,当计数移除后,CH和CL自动从0开始新的计数周期。
  • 计数溢出中断和标志:PCA Base Timer计数溢出时会产生中断。中断使能位CMOD.ECF;中断标志位CCON.CF(CF溢出标志只能由软件清0)

 【示例代码】

PCA模块的中断

整个PCA模块的中断包含:

  • PCA Base Timer溢出中断,中断标志为CF,中断使能控制位为ECF
  • PCA子模块0的中断,中断标志为CCF0,中断使能控制位为ECCF0
  • PCA子模块1的中断,中断标志为CCF1,中断使能控制位为ECCF1
  • PCA子模块2的中断,中断标志为CCF2,中断使能控制位为ECCF2

这4个中断事件共用同一个中断向量,使用同一个中断服务函数,所以在进入到中断函数中时,要先读中断标志,查看中断发生的原因,再去具体处理中断,也正是由于这个原因,PCA模块的4个中断标志都必须由软件清0。

PCA Base Timer的中断由其溢出事件触发,而子模块的中断则根据子模块配置的功能不同触发原因也不同。例如在软件定时器模式下,到定时到期时则触发中断;在输入捕获模式下,当子模块引脚检测到一个目标电平边沿时触发。

PCA模块的中断优先级由IPH.bit7和PPCA两个位共同配置,可设置4极优先级。

PCA模块的引脚重映射选择

PCA模块的3个子模块的4种功能中,除了软件定时器外,其他3种功能都需要通过单片机引脚接收信号或者输出信号。子模块所使用的引脚组可以通过P_SW1[5:4]位段进行选择,使得PCB布线更加灵活。例如对于STC8G1K08-20Pin系列有2种选择:

P_SW1[5:4]

PCA通道0

PCA通道1

PCA通道2

ECI输入引脚

第一组管脚

00

CCP0/P1.1

CCP1/P1.0

CCP2/P3.7

P1.2

第二组管脚

01

CCP0_2//P3.5

CCP1_2/P3.6

CCP2_2/P3.7

P3.4

 注:ECI引脚的作用,Base Timer在选择计数信号源时,可以选择从外部ECI引脚输入时钟源。

PCA模块的功能选择

每一路子模块的工作模式选择通过它的配置寄存器CCAPMn(n=0,1,2)实现。CCAPMn(n=0,1,2)的最低位是子模块的中断使能,与工作模式配置无关。3路子模块的配置和工作原理完全相同,在学习时只需弄懂一路子模块的功能即可

下图说明了PCA子模块不同功能的选择与配置寄存器CCAPMn(n=0,1,2)的关系。子模块的四种不同功能就是由配置寄存器CCAPMn(n=0,1,2)中的不同位对应功能的组合形成的。

  • ECOMn:compare,比较。即用PCA Base Timer 的 [CH,CL]和子模块的[CCAPnH,CCAPnL]进行比较大小
  • CAPPn:子模块对应的引脚的输入或输出的电平正向跳变时触发中断
  • CAPNn:子模块对应的引脚的输入或输出的电平负向跳变时触发中断
  • MATn:match,匹配。即用PCA Base Timer 的 [CH,CL]和子模块的[CCAPnH,CCAPnL]进行匹配看是否相等
  • TOGn:toggle,翻转子模块对应的引脚输出的电平,用于高速脉冲输出模式
  • PWMn:PWM输出功能

软件定时器模式

前面说了这么多,现在开始讲解PCA模块的四种模式中最简单的一个,软件定时器模式。

工作原理:由于PCA Base Timer的运行,导致(CH,CL)会递增变化,每次(CH,CL)发生变化时,都会使得(CH,CL)与子模块的捕获比较寄存器(CCAPnH,CCAPnL)做一次比较。当二者相等时,子模块的中断标志位CCFn硬件置1。如果使能了子模块的中断,则还会触发中断。例如,PCA Base Timer的计数时钟设置为1MHz,这样(CH,CL)就每隔1us计数值增加一次。我们想使用软件定时器模式定时100us,则可以将初始化时(CH,CL)=0,子模块的(CCAPnH,CCAPnL)=100,当PCA Base Timer计数100次后触发子模块的中断,这样就代表100us定时到期。如果想持续这个过程,则需要在中断中将子模块的(CCAPnH,CCAPnL)值增加100到200,等下一个100us到来会再次出发中断。但要注意(CH,CL)和(CCAPnH,CCAPnL)的溢出问题。

模式配置:软件定时器模式必须将ECONn和MATn位置1。

引脚配置:软件定时器不需要引脚即可工作。

注意事项软件定时器模式下,在给CCAPnH寄存器和CCAPnL寄存器赋值时,应先写CCAPnL,再写CCAPnH。因为每次对CCAPnL写入数据会导致ECOMn硬件置0,而每次对CCAPnH写入数据会导致ECOMn硬件置1,而软件定时器模式正常工作必须将ECOMn置1。之所以这样设计,是因为在每次给CCAPnH和CCAPnL赋值时,是无法用一个指令瞬间完成的,例如先赋值CCAPnL,而在给CCAPnH赋值之前他还是上一次的值,这个时候子模块的16位比较值实际上是错乱的,为了防止此时产生非预期的定时到期中断,因此是不能使能比较机制的。只有当新的CCAPnH的值赋值完成后才能开启比较机制。

PCA模块的软件定时器有一个不好用的点,如果要产生连续固定周期的定时中断,必须每次在产生软件定时器中断后,要再重新给(CCAPnH,CCAPnL)赋值,这样才能起到每次中断间隔时间都一致的效果。否则除了第一次中断,后面的中断都是在PCA Base Timer计数65536次后产生定时器到期中断。比如你想每5次计数中断一次,则(CCAPnH,CCAPnL)新值 = {(CCAPnH,CCAPnL)旧值+5 } %65536。最好的情况是,你恰好需要的中断间隔时间为PCA Base Timer计数65536次中断一次,这样就无需在每次中断时给(CCAPnH,CCAPnL)赋新的值。因此软件定时器模式最好用的情况是单次定时,连续的周期性定时需要在中断中软件重新给(CCAPnH,CCAPnL)赋值,这也是为什么叫软件定时器的原因。

【示例代码】

脉冲输出模式

高速脉冲模式就是在软件定时器模式的基础上多了一个引脚电平自动翻转的功能。使用软件定时器模式,并手动在中断中翻转GPIO电平也可以达到同样的效果,只不过相比硬件翻转有一定延迟。

工作原理:由于PCA Base Timer的运行,导致(CH,CL)会递增变化,每次(CH,CL)变化时,都会使得(CH,CL)与 (CCAPnH,CCAPnL)做一次比较。当二者相等时,子模块对应的引脚电平会自动翻转,且中断标志位CCFn硬件置1;如果使能了对于子模块的中断,则还会触发中断。

模式配置:脉冲输出模式必须将ECONn,MATn和TOGn位都置1。

引脚配置:软件定时器对应的引脚要配置为推挽输出。

注意事项:同软件定时器模式。

【示例代码】

8位PWM输出模式

STC8G的PCA支持6、7、8和10位PWM模式,这里以最常用的8位PWM模式讲解。

工作原理

由于PCA Base Timer的运行,导致CL会递增变化,每次CL增加时,都会使得(0,CL)与 (EPCnL,CCAPnL)做一次比较:

  • 如果 (0,CL) < (EPCnL,CCAPnL),则PWM引脚输出低电平;
  • 如果 (0,CL) >=(EPCnL,CCAPnL),则PWM引脚输出高电平。
  • 如果想输出占空比为0,即绝对低电平,则应该让 (EPCnH,CCAPnH) = (1,0xFF)
  • 如果想输出占空比为100%,即绝对高电平,则应该让 (EPCnH,CCAPnH) = (0,0x00)
  • 当CL溢出时, (EPCnH,CCAPnH)的值会自动装载到 (EPCnL,CCAPnL),这样就实现了软件无干扰的更新PWM占空比

模式配置:PWM模式必须将CCAPMn寄存器中的ECONn和PWMn位置1,而CCAPn和CCANn这2个位则用于设置PWM输出的电平在怎样的变化情况下发生中断。一般情况下不需要PWM带中断。

8位PWM分辨率配置:每个子模块都有一个PWM配置寄存器:PCA_PWMn(n=0,1,2)。PWM的分辨率由PCA_PWMn(n=0,1,2)的 [EBS1,EBS0] 位段配置,当 [EBS1,EBS0] =00时,为8位PWM。最低2位 [EPCnH,EPCnL] 位段分别是重装载值的最高位和比较值的最高位。其余位在8位PWM模式下不使用。

引脚配置:PWM输出模式对应的引脚要配置为推挽输出。

8位PWM的频率:PWM频率=PCA Base Timer的计数时钟频率/256。

8位PWM的占空比:比较值(EPCnL,CCAPnL)直接影响占空比。每次修改占空比时,可同时修改重装值 (EPCnH,CCAPnH) 和 比较值(EPCnL,CCAPnL),如果只修改重装值 (EPCnH,CCAPnH),则新的占空比会在下一次PCA Base Timer的CL溢出时才生效。

注意事项:无。
 

【示例代码】

//PWM8模式下设置占空比,参数n范围0~255,占空比为 n / 255
#define PCA_MD0_PWM8_SET_DUTY(n) do{                                                 \
	if((n)==0)        { PCA_PWM0 |= B0000_0011; CCAP0L=0xFF;   }  /*固定输出低电平*/  \
	else if((n)==255) { PCA_PWM0 &= B1111_1100; CCAP0L=0;      }  /*固定输出高电平*/  \
	else              { PCA_PWM0 &= B1111_1100; CCAP0L=255-(n); CCAP0H=255-(n);    } \
}while(0)

void PCA_config(void)
{
	PCA_SEL_IO_GROUP1;      //选择PCA模块的引脚映射
	PCA_INT_PRIORITY0;      //配置PCA模块的中断优先级
	
	PCA_BT_CR0;             //停止PCA Base Timer运行
	PCA_BT_INT_FLAG_CLR;    //清除PCA Base Timer溢出中断标志
	PCA_BT_CLK_SYSCLKDIV12; //选择PCA Base Timer的计数时钟
	PCA_BT_IDLE_WORK;       //设置PCA Base Timer在IDLE模式下是否继续运行
	PCA_BT_INT_DEN;         //使能PCA Base Timer溢出中断
	PCA_BT_CL=0;            //设置PCA Base Timer的计数初始值
	PCA_BT_CH=0;            //设置PCA Base Timer的计数初始值
	
	//模块0:8位PWM模式
	GPIO_MODE_PP(1,1);      //模块0引脚工作模式
	PCA_MD0_PWM8;           //模块0工作模式配置
	PCA_MD0_INT_FLAG_CLR;   //模块0中断标志
	PCA_MD0_INT_DEN;        //模块0中断使能
	PCA_MD0_PWM8_SET_DUTY(0);   //初始化占空比为0
	
	//模块1:8位PWM模式
	GPIO_MODE_PP(1,0);      //模块1引脚工作模式
	PCA_MD1_PWM8;           //模块1工作模式配置
	PCA_MD1_INT_FLAG_CLR;   //模块1中断标志
	PCA_MD1_INT_DEN;        //模块1中断使能
	PCA_MD1_PWM8_SET_DUTY(0); //初始化占空比为0
	
	//模块2:8位PWM模式
	GPIO_MODE_PP(3,7);      //模块2引脚工作模式
	PCA_MD2_PWM8;           //模块2工作模式配置
	PCA_MD2_INT_FLAG_CLR;   //模块2中断标志
	PCA_MD2_INT_DEN;        //模块2中断使能
	PCA_MD2_PWM8_SET_DUTY(0); //初始化占空比为0
	
	PCA_BT_CR1;             //开始PCA Base Timer运行  
}

void main(void)
{
	PCA_config();
	EA=1;
	
	PCA_MD0_PWM8_SET_DUTY(128);  //设置占空比为50%
	PCA_MD1_PWM8_SET_DUTY(128);  //设置占空比为50%
	PCA_MD2_PWM8_SET_DUTY(128);  //设置占空比为50%
	
	while(1)
	{
	}
}

10位PWM输出模式

相比STC15F系列的PCA,STC8G系列的PCA模块赠加了10位PWM模式的支持。PWM的分辨率越高,输出的占空比就可以控制的更加精细。

工作原理:10位PWM模式的工作原理与8位PWM是相似的。只不过是使用PCA Base Timer的(CH[1:0],CL)与子模块的(EPCnL,XCCAPnL,CCAPnL)进行比较。

  • 如果 (0,CH[1:0],CL) < (EPCnL,XCCAPnL[1:0],CCAPnL),则PWM引脚输出低电平;
  • 如果 (0,CH[1:0],CL) >=(EPCnL,XCCAPnL[1:0],CCAPnL),则PWM引脚输出高电平。
  • 如果想输出占空比为0,即绝对低电平,则应该让 (EPCnH,XCCAPnH[1:0],CCAPnH) = (1,3,0xFF)。
  • 如果想输出占空比为100%,即绝对高电平,则应该让(EPCnH,XCCAPnH[1:0],CCAPnH) = (0,0,0x00)。
  • 当(CH[1:0],CL)溢出时,重装载值(EPCnH,XCCAPnH,CCAPnH)的值送入到(EPCnL,XCCAPnL,CCAPnL),实现无干扰的PWM占空比更新。

模式配置:同8位PWM。PWM模式必须将CCAPMn寄存器中的ECONn和PWMn位置1,而CCAPn和CCANn这2个位则用于设置PWM输出的电平在怎样的变化情况下发生中断。一般情况下不需要PWM带中断。

10位PWM分辨率配置:PWM的分辨率由PCA_PWMn(n=0,1,2)的 [EBS1,EBS0] 位段配置,当 [EBS1,EBS0] =11时,为10位PWM。

引脚配置:PWM输出模式对应的引脚要配置为推挽输出。

10位PWM的频率:PWM频率=PCA Base Timer的计数时钟频率/1024。

10位PWM的占空比:比较值(EPCnL,XCCAPnL,CCAPnL)直接影响占空比。每次修改占空比时,可同时修改重装值 (EPCnH,XCCAPnH,CCAPnH) 和 比较值(EPCnL,XCCAPnL,CCAPnL),如果只修改重装值 (EPCnH,XCCAPnH,CCAPnH),则新的占空比会在下一次PCA Base Timer的(CH[1:0],CL)溢出时才生效。

注意事项:无。
 

【示例代码】

输入捕获模式

所谓捕获模式,就是用于测量和还原外部输入的方波信号,主要包括信号的上升下降沿以及他们之间的时间间隔。这样可以得到输入方波信号的周期、占空比等信息。由于PCA捕获模式可以在检测到上升下降沿时触发中断,因此这个模式也可以实现外部中断检测

工作原理:当工作在捕获模式时,子模块对输入引脚的方波信号进行采样,一旦捕获到一个目标边沿(可选择上升、下降或者上升下降沿)跳变,则PCA Base Timer的CH和CL会装载到CCAPnH和CCAPnL,同时子模块的中断标志硬件置1,如果使能了子模块的中断,则还会触发CPU中断。每次发生捕获中断后,可以提取CCAPnH和CCAPnL的值,用于计算两个目标沿之间的时间差,可以用于测量输入的信号的周期,占空比等信息。例如,为了测量输入信号的连续的2个下降沿之间的间隔,则在第一个下降沿到来时,触发输入捕获中断,软件保存此时(CCAPnH,CCAPnL)的值,假设为5,下一次下降沿到来时再次输入捕获中断,软件读取此时(CCAPnH,CCAPnL)的值假设为105,则差值为100,代表两个下降沿期间PCA Base Timer计数了100次(假设这个期间PCA Base Timer没有溢出),如果PCA Base Timer计数时钟为1MHz,那么代表两个下降沿的时间间隔为100us。

模式配置:输入捕获模式需要将CCAPMn寄存器的CAPPn位或者CAPNn位中的至少一位置1,其他位无关均置0。

  • CAPPn,CAPNn = 1,0:捕获上升沿
  • CAPPn,CAPNn = 0,1:捕获下降沿
  • CAPPn,CAPNn = 1,1:即捕获上升沿又捕获下降沿

引脚配置:输入捕获模式对应的引脚要配置为高阻输入模式。

注意事项:在输入捕获中断中提取CCAPnH,CCAPnL进行计算分析时,需要考虑PCA Base Timer溢出问题。

【示例代码】

<think>好的,我现在需要回答用户关于如何配置STC8G1K08A单片机的P32引脚使用PCA模块0的PWM模式的问题。首先,我需要回忆一下STC8G1K08A的相关知识,尤其是PCA模块和PWM配置的部分。 首先,STC8G1K08A的PCA(可编程计数器阵列)模块通常包含多个模块,比如PCA0、PCA1等,每个模块可以独立配置为不同的模式,比如PWM、捕获、比较等。用户的问题涉及到PCA模块0的PWM模式,并且指定使用P32引脚。 接下来,我需要确认P32引脚是否确实与PCA模块0相关联。根据STC8G1K08A的数据手册,PCA模块的输出引脚可能会因具体型号或封装不同而有所变化。例如,PCA模块0的PWM输出可能默认在某个特定引脚,比如P1.1或者其他,但用户提到的是P32,可能需要通过交叉开关或端口重映射功能来配置。因此,可能需要查阅数据手册中的引脚功能描述部分,确认P32是否支持作为PCA0的PWM输出,或者是否需要配置某些寄存器来实现引脚重映射。 然后,配置PCA模块0为PWM模式的一般步骤通常包括以下几个步骤: 1. 配置PCA的工作模式寄存器(CCON、CMOD等)。 2. 设置PCA的计数器(CL和CH)。 3. 配置PCA模块0的比较/捕获寄存器(CCAP0L和CCAP0H)。 4. 设置PCA模块0的工作模式为PWM(通过CCAPM0寄存器)。 5. 可能需要配置端口模式(准双向、推挽等)以使能P32引脚的输出功能。 需要注意的是,PCA模块的PWM模式通常有8位或更高分辨率,具体取决于寄存器的配置。例如,8位PWM会将CCAP0L和CCAP0H设置为相同的值,并自动重装载。 另外,关于时钟源的选择,CMOD寄存器中的CPS位用于选择PCA的时钟源,例如系统时钟分频后的信号,这会影响PWM的频率。用户需要根据所需的PWM频率来设置合适的时钟源和分频系数。 可能的疑问点包括: - P32是否默认支持PCA0 PWM输出,是否需要特殊配置? - 是否需要使能P32的推挽输出模式以提高驱动能力? - PCA模块0的PWM模式是8位还是其他位数? - 如何计算PWM的占空比和频率? 需要验证这些点,可能需要查阅数据手册中的相关章节,比如PCA模块章节和GPIO配置部分。如果数据手册中指出P32可以通过寄存器配置为PCA功能,那么需要设置P3M1和P3M0寄存器来配置端口模式,比如推挽输出。同时,在CCAPM0寄存器中设置ECOM和PWM位以使能比较器功能和PWM模式。 总结步骤可能为: 1. 配置P32引脚为推挽输出模式。 2. 设置PCA的时钟源(CMOD寄存器)。 3. 初始化PCA计数器(CL和CH清零)。 4. 配置CCAP0L和CCAP0H以设置PWM占空比。 5. 配置CCAPM0寄存器使能PWM模式。 6. 启动PCA计数器(CR位)。 需要确保每一步的寄存器配置正确,并注意可能的位组合。例如,CCAPM0寄存器中的ECOM和PWM位需要同时置1,而其他位如MAT和TOG可能需要置0。此外,PCA计数器一旦启动,就会根据时钟源开始计数,并在达到设定值时产生PWM波形。 最后,可能需要提供示例代码或具体的寄存器设置值,以帮助用户更直观地理解配置过程。例如,设置CMOD为0x80选择系统时钟/12作为时钟源,CCAPM0设为0x42使能ECOM和PWM,然后计算占空比对应的CCAP0L值。</think>以下是STC8G1K08A单片机配置P32引脚为PCA模块0的PWM模式的步骤详解: --- ### **1. 确认引脚功能映射** STC8G1K08A的**P32引脚默认复用功能为PCA模块0的PWM输出(CCP0)**,无需交叉开关重映射。需通过配置寄存器启用该功能。 --- ### **2. 配置P32引脚模式** 将P32设置为推挽输出模式以增强驱动能力: ```c P3M1 &= ~0x04; // P3M1.2 = 0 P3M0 |= 0x04; // P3M0.2 = 1 (推挽输出) ``` --- ### **3. 配置PCA模块0的PWM模式** #### **(1) 设置PCA时钟源** 通过`CMOD`寄存器选择时钟源(例如系统时钟/12): ```c CMOD = 0x80; // CPS[2:0]=000 (系统时钟/12), ECF=0 (关闭计数器中断) ``` #### **(2) 初始化PCA计数器** 清空PCA计数器`CL`和`CH`: ```c CL = 0x00; CH = 0x00; ``` #### **(3) 配置PCA模块0工作模式** 通过`CCAPM0`寄存器启用PWM模式: ```c CCAPM0 = 0x42; // ECOMn=1 (使能比较), PWMn=1 (PWM模式) ``` #### **(4) 设置PWM占空比** 写入比较值到`CCAP0L`和`CCAP0H`(8位PWM): ```c CCAP0L = 0x80; // 50%占空比 (0x80/0xFF) CCAP0H = 0x80; // 需与CCAP0L相同 ``` #### **(5) 启动PCA计数器** 置位`CR`位开始计数: ```c CR = 1; // 启动PCA计数器 ``` --- ### **4. PWM频率与占空比计算** - **频率公式**: $$ f_{PWM} = \frac{f_{sys}}{12 \times 256} $$ 例如:若$f_{sys}=24MHz$,则$f_{PWM}=7.8125kHz$。 - **占空比调节**: 占空比$D = \frac{CCAP0L}{256}$,范围0~255对应0%~99.6%。 --- ### **5. 完整示例代码** ```c #include "STC8G.H" void PCA0_PWM_Init() { // 配置P32为推挽输出 P3M1 &= ~0x04; P3M0 |= 0x04; // 配置PCA时钟源 CMOD = 0x80; // 系统时钟/12 // 初始化计数器 CL = 0x00; CH = 0x00; // 配置PWM占空比(50%) CCAP0L = 0x80; CCAP0H = 0x80; // 启用PCA0 PWM模式 CCAPM0 = 0x42; // 启动PCA计数器 CR = 1; } void main() { PCA0_PWM_Init(); while (1); } ``` --- ### **注意事项** - 修改`CCAP0L/H`时需关闭PCA计数器(`CR=0`),修改后重新启动。 - 若需更高频率,可调整`CMOD`的`CPS[2:0]`选择更快的时钟源(如系统时钟不分频)。 - 实际占空比精度为8位,即256级可调。 通过以上步骤,P32引脚将输出PCA模块0生成的PWM波形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值