Stm32复习资料

  • 简答题
  • 嵌入式技术系统的特点?(嵌入式系统和通用计算机有什么相同点和不同点)
  • 答:共同点
  • (1). 都需要处理器、内存、外设等基本硬件设备。
  • (2). 都需要通过软件编程实现特定功能。
  • 不同点
  • 1. 嵌入式系统通常只完成一个或几个特定的任务,而通用计算机可以执行各种应用程序。
  • 2. 嵌入式系统的硬件资源通常比较有限,而通用计算机的硬件资源相对较丰富。
  • 3. 嵌入式系统的实时性要求比通用计算机高。
  • 4. 嵌入式系统的能耗要求比通用计算机低。
  • 5. 嵌入式系统的可靠性要求比通用计算机高。
  • 中断优先级位的分组有哪几种方式?
  • 固定优先级分组:将中断优先级位分为若干个固定的组,每个组包含若干个优先级位,中断请求被分配到某个组中的某个优先级位上,中断处理程序按照组和优先级位的大小来依次处理请求。
  • 动态优先级分组:根据中断请求的实时情况和系统负载情况,动态地改变中断优先级位的分组结构和优先级位的大小,以达到更好的中断处理效率和系统响应能力。  
  • 怎么配置中断优先级分组(写出抢占优先级和响应优先级各占几位)
  • 在ARM Cortex-M系列处理器中,中断优先级位的位数可以根据具体的处理器型号进行配置,通常为8位或16位。其中抢占优先级占用的位数由NVIC_PRIO_BITS宏定义指定,响应优先级占用的位数为总位数减去抢占优先级占用的位数。
  • 外部中断配置 (初始化时,写出初始化函数和各个函数的功能是什么?例:u32 EXTI_Line; //外部中断线)
  • 在STM32系列单片机中,外部中断的配置需要涉及到以下几个函数:
  • 1. RCC_APB2PeriphClockCmd()函数:用于使能外设时钟,可以在系统初始化时调用该函数。
  • 2. GPIO_Init()函数:用于初始化GPIO引脚,设置其输入/输出模式、上拉/下拉模式等,可以在系统初始化时调用该函数。
  • 3. EXTI_Init()函数:用于初始化外部中断线,设置其触发方式、优先级等,可以在系统初始化时调用该函数。
  • 4. NVIC_Init()函数:用于初始化中断向量表,使能中断请求,可以在系统初始化时调用该函数。
  •   
  • 4数据通信方式分类,要写出每一个分类的特点
  • 数据通信方式可以分为以下几类
  • 1. 串行通信:串行通信是指数据按位按序一个一个地传输,通常使用单根线路进行传输。串行通信的特点是传输速度较慢,但线路数量较少,适合长距离传输和单片机等嵌入式系统中使用。
  • 2. 并行通信:并行通信是指数据同时按位传输,通常使用多根线路进行传输。并行通信的特点是传输速度较快,但线路数量较多,适合短距离传输和需要高速数据传输的场合。
  • 3. 半双工通信:半双工通信是指数据在同一时间内只能在一个方向上传输,即数据只能单向传输。半双工通信的特点是通信效率低,但适用于单向数据传输的场合,如遥控器、传感器等。
  • 4. 全双工通信:全双工通信是指数据在同一时间内可以同时在两个方向上传输,即数据可以双向传输。全双工通信的特点是通信效率高,适用于需要双向数据传输的场合,如网络通信、对讲机等。
  • 5. 同步通信:同步通信是指通信双方通过时钟信号进行同步,保证数据传输的准确性。同步通信的特点是传输速度快,但需要精确的时钟同步,适用于需要高速、高精度数据传输的场合,如高清视频传输。
  • 6. 异步通信:异步通信是指通信双方不需要通过时钟信号进行同步,而是通过起始位、数据位、校验位和停止位等来保证数据传输的准确性。异步通信的特点是传输速度较慢,但不需要时钟同步,适用于低速数据传输的场合,如串口通信、蓝牙通信等。
  • 5通用定时器tinmer常用的工作模式是什么(6种)
  •  计数模式 输出比较模式  输入捕获模式  PWM输出模式  PWM输入模式 单脉冲模式
  • 6.局部代码,分析代码功能
  • 以发送一个字符串为例
  • 怎么发送字符串
  • 1. 首先,在main函数中初始化串口通信模块,配置波特率等参数:
  • ```
  • #include "stm32f1xx_hal.h"
  • #include "stdio.h"
  • /* 串口句柄 */
  • UART_HandleTypeDef huart1;
  • /* 串口初始化函数 */
  • void UART_Init(void)
  • {
  •   huart1.Instance = USART1;
  •   huart1.Init.BaudRate = 115200;
  •   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  •   huart1.Init.StopBits = UART_STOPBITS_1;
  •   huart1.Init.Parity = UART_PARITY_NONE;
  •   huart1.Init.Mode = UART_MODE_TX_RX;
  •   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  •   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  •   HAL_UART_Init(&huart1);
  • }
  • ```
  • 2. 然后,在需要发送字符串的地方,调用HAL库中的UART发送函数:
  • ```
  • /* 字符串发送函数 */
  • void send_string(char* str)
  • {
  •   HAL_UART_Transmit(&huart1, (uint8_t*)str, strlen(str), HAL_MAX_DELAY);
  • }
  • ```
  • 3. 最后,在main函数中调用send_string函数发送字符串:
  • ```
  • int main(void)
  • {
  •   /* 系统初始化 */
  •   HAL_Init();
  •   /* 串口初始化 */
  •   UART_Init();
  •   /* 发送字符串 */
  •   char* str = "Hello, STM32!";
  •   send_string(str);
  •   /* 死循环 */
  •   while (1);
  • }
  • stm32系列处理器使用的内核是什么?目前市场上主流的控制芯片以及应用场景有哪些?
  • STM32系列处理器使用的内核是ARM Cortex-M系列的处理器内核,包括Cortex-M0、Cortex-M0+、Cortex-M3、Cortex-M4和Cortex-M7等.
  • 这些处理器内核具有低功耗、高性能、高效率和可靠性等优点,适用于各种物联网、工业自动化、智能家居、消费类电子产品等应用场景。
  • Stm32f103系列芯片的通用定时器分别有几个独立通道
  • STM32F103系列芯片的通用定时器共有14个独立通道(4个TIM1通道+2个TIM2通道+4个TIM3通道+4个TIM4通道)。
  • Stm32系列芯片的主时钟频率是多少
  •   1. STM32F0系列:4 MHz ~ 48 MHz
  • 2. STM32F1系列:24 MHz ~ 72 MHz
  • 3. STM32F2系列:120 MHz ~ 168 MHz
  • 4. STM32F3系列:4 MHz ~ 72 MHz
  • 5. STM32F4系列:100 MHz ~ 180 MHz
  • 6. STM32F7系列:216 MHz
  • 7. STM32H7系列:400 MHz
  • 使用固件库函数开发的好处
  • 1. 方便快捷:固件库函数提供了丰富的API接口,可以快速地实现各种功能,例如GPIO控制、定时器配置、中断处理等。相比手写底层驱动代码,使用固件库函数可以节省大量时间和精力。
  • 2. 可移植性:固件库函数是针对特定芯片系列和型号的,使用固件库函数编写的代码可以在不同的芯片上运行,只需要相应地修改配置参数即可。因此,使用固件库函数开发具有很好的可移植性。
  • 3. 可维护性:使用固件库函数可以使代码结构更加清晰,易于维护和修改。固件库函数的接口清晰明了,使用起来比较简单,避免了手写底层驱动代码时可能出现的错误和漏洞。
  • 4. 可靠性:固件库函数经过严格的测试和验证,具有较高的可靠性。使用固件库函数可以避免一些底层驱动代码中可能出现的问题,例如时序不准确、寄存器配置错误等,从而提高系统的稳定性和可靠性。
  • 综上所述,使用固件库函数开发具有方便快捷、可移植性、可维护性和可靠性等优点,特别是在嵌入式系统开发中,使用固件库函数可以大大提高开发效率和系统稳定性。
  • 分析计算
  • 给一个STM32F103存储器的结构映射图
  • 指出哪里是Code区,哪里是代码区,哪里是片上sram区,片上外设区,片外外设区,片外系统区等,并且每个区的地址范围,存储大小都要写上,画一个方框图
  • 答:  | 0x1FFFF000 - 0x1FFFF7FF| System Memory (2KB)
  •           +-----------------------+
  •           | 0x1FFFC800 - 0x1FFFCFFF| Option Bytes (256B)
  •           +-----------------------+
  •           | 0x08000000 - 0x0801FFFF| Main Flash Memory (128KB)
  •           +-----------------------+
  •           | 0x08020000 - 0x0803FFFF| Main Flash Memory (128KB)
  •           +-----------------------+
  •           | 0x08040000 - 0x0805FFFF| Main Flash Memory (128KB)
  •           +-----------------------+
  •           | 0x08060000 - 0x0807FFFF| Main Flash Memory (128KB)
  •           +-----------------------+
  •           | 0x40000000 - 0x400FFFFF| APB1 Peripherals (1MB)
  •           +-----------------------+
  •           | 0x40010000 - 0x4001FFFF| APB2 Peripherals (64KB)
  •           +-----------------------+
  •           | 0x20000000 - 0x2000FFFF| SRAM (64KB)
  •           +-----------------------+
  • ```
  • 其中,各个区的地址范围和存储大小如下:
  • 1. System Memory:0x1FFFF000 - 0x1FFFF7FF,2KB。
  • 2. Option Bytes:0x1FFFC800 - 0x1FFFCFFF,256B。
  • 3. Main Flash Memory:0x08000000 - 0x0807FFFF,共512KB,分为4个扇区,每个扇区大小为128KB。
  • 4. APB1 Peripherals:0x40000000 - 0x400FFFFF,共1MB。
  • 5. APB2 Peripherals:0x40010000 - 0x4001FFFF,共64KB。
  • 6. SRAM:0x20000000 - 0x2000FFFF,共64KB。其中,Code区和代码区指的是存储程序代码的区域,实际上在STM32F103芯片中,它们都是存储在Flash Memory中的。片上SRAM区指的是存储数据的区域,而片上外设区和片外外设区则是存储外设寄存器的区域,分别对应于APB1和APB2总线上的外设。片外系统区指的是存储外部设备的区域。
  • STM32是有外挂的低速和高速的设备,低速与高速以时钟频率为主,36MHZ,72 MHZ
  • 问:AHB高速总线时钟,时钟频率是多少?
  • 答:AHB高速总线时钟的频率是与CPU时钟频率相同的,最高可以达到72MHz,这个频率可以通过PLL倍频器来调节。
  • 会调用AHB高速时钟总线函数(使能或禁止):
  • 答:在STM32中,可以通过设置RCC寄存器来使能或禁止AHB高速总线时钟。具体的使能或禁止操作可以使用以下代码示例:
  • ```
  • // 使能AHB高速总线时钟
  • RCC->AHBENR |= RCC_AHBENR_DMA1EN;
  • // 禁止AHB高速总线时钟
  • RCC->AHBENR &= ~RCC_AHBENR_DMA1EN;
  • ```
  • 其中,RCC_AHBENR寄存器用于控制AHB总线上的外设时钟,每个外设都对应一个特定的位。通过将对应位设置为1或0,可以使能或禁止特定外设的AHB总线时钟。
  • (1)数据校验的方式有几种(5种)
  • 答:奇偶校验,二进制校验,CRC校验,奇偶校验和,海明码
  • (2)给一串数据,要能够指出哪个是偶检验,哪个是寄校验等数据帧的格式:
  • 答:在一串数据中,如果每一个字节的最后一位都是1,那么这个数据使用的是奇校验。如果每一个字节的最后一位都是0,那么这个数据使用的是偶校验。如果数据中有一段类似于校验码的数据,那么这个数据使用的是奇校验。
  • (3)一个串行通信,给出数据帧结构,传送速率,要发送一个1kb(1kb=1024Bytes,1Byte=8Bit)的文件,求发送时间?
  • 答:1KB = 1024 Bytes
  • 1 Byte = 8 bits
  • 因此,1KB = 8192 bits
  • 传输1KB文件需要的时间 = 8192 bits / 9600 bps
  •                         = 0.8533 秒
  • 分析
    给一个DMA功能图表
  • DMA有几大部分组成
  • 答:DMA控制器,DMA通道,DMA请求信号,存储器地址寄存器,外设地址寄存器
  • DMA有几个通道,当多个通道过来,用哪一块来响应? 
  • 答:DMA通道的数量取决于具体的芯片型号和DMA控制器的实现。在STM32中,通常具有多个DMA通道,每个通道可以连接到不同的外设和存储器。当多个通道同时发出请求时,DMA控制器会根据优先级和先后顺序来决定哪个通道被优先响应。
  • 数据发送方向有哪些?
  • 答: 数据传输方向有两种:从外设到存储器(DMA读取)和从存储器到外设(DMA写入)。其中,从外设到存储器的传输被称为DMA读取,从存储器到外设的传输被称为DMA写入。
  • 最大传输数据大小(65535)
  • 一个微控制器的最小系统是指能使微控制器正常工作所需要的少量元件
  • 分析stm32最小应用系统结构
  • 答:STM32微控制器芯片,外部晶体振荡器,电源,复位电路,调试接口
  • USART1,SP11,GPIOA,TIM1分别使用的时钟源
  • 答:USART1使用的时钟源是PCLK2;SPI1使用的时钟源是PCLK2;GPIOA使用的时钟源是AHB1;TIM1使用的时钟源是APB2。
  • 写上四个片上外设时钟使能函数的函数名
  • 答:RCC_APB2PeriphClockCmd:用于使能APB2总线上的外设时钟,如TIM1,SPI1等。
  • - RCC_APB1PeriphClockCmd:用于使能APB1总线上的外设时钟,如USART1,SPI2等。
  • - RCC_AHB1PeriphClockCmd:用于使能AHB1总线上的外设时钟,如GPIOA,DMA等。
  • - RCC_AHB2PeriphClockCmd:用于使能AHB2总线上的外设时钟,如USB OTG FS等。
  • 5.假设 STM32F103 微控制器的 USART! 设置为 38.410ps,,7位数据位,一位偶校验位,2位停止位,此时想要发送一个大小1kb的文件,请回答
  • (1)一个字符帧发送需要哪三个部分
  • 答:起始位:1个低电平位,表示该字符帧的开始。
  • - 数据位:7位数据位,表示要发送的数据。
  • - 停止位:2位高电平位,表示该字符帧的结束。
  • (2)此次发送文件需要多少时间
  • 答:首先需要计算每个字符帧的发送时间:1/38400 = 26.04us。由于每个字符帧包含1个起始位、7个数据位、1个校验位和2个停止位,因此1个字符帧的总时间为:26.04us * 11 = 286.44us。因此,1kb文件中包含1024个字符,则总共需要的发送时间为:286.44us * 1024 = 293.2736ms。
  • stm32库函数操作USART DR寄存器读取串口接收到数据的函数是什么?判断数据发送是否完成的函数是什么
  • 答:TM32库函数操作USART DR寄存器读取串口接收到数据的函数是USART_ReceiveData()。判断数据发送是否完成的函数是USART_GetFlagStatus(),可以通过检查USART_FLAG_TC标志位来确定数据是否发送完成。
  • 6.模拟数字转换器,其功能是将模拟信号转化为数字信号,以便于微控制器进行数据处理,回答问题
  • (1) STM32中的ADC一有多少通道 交换通道可分为哪两种
  • 答:STM32芯片的ADC共有10个通道,标号为ADC1~ADC10。交换通道可分为两种:规则通道和注入通道。
  • (2) STM32F103的ADC能测量的模拟信号VIN的范围
  • 答:STM32F103的ADC能测量的模拟信号VIN的范围为0V~3.3V。如果输入电压超过3.3V,需要使用外部电压分压电路将电压降低到3.3V以下。
  • 当ADCLK为14MNz时,采样时间送取1.5个ADC时钟周期,那么此时ADC的最短转换时间是多少?
  • 答:当ADCLK为14MHz时,采样时间为1.5个ADC时钟周期,因此ADC的最短转换时间为:1.5 / 14MHz = 107.1ns。注意,这只是ADC的转换时间,还需要考虑采样保持时间等其他因素。
  • 综合应用
  • 1.基于STMF103系列芯片,利用定时器1输出1000Hz的PWM方波。配置不同的占空比可以使LED发出不同的亮;定时路2定时每20ms中断一次,实现LED的渐明渐暗效果。部分代码如下:
  • 函数名:Tim2init,接TIM2配置为定时器中断,时钟4分频,72预分频,重载值为5000。
  • void Tim2Init (void)
  • NVIC InitTypeDef NVIC Initstructure:
  • TIM TimeBaselnitTypeDer TIM TimeBaseStructure;
  • 广优先级分组*
  • NYIC_ PriorityGroupConfig (NVIC_PriorityGroup_o);
  • /*TIM2中断优先级设定*/
  • NVIC_Initstructure.NVIC_IROChannel-TIM2 IROn;
  • NVIC_Initstructure.NVIC_IRQChannelPreemptionPriority=0;
  • NVIC_Initstructure.NVIC_IRQChannelSubPriority-3;
  • NVIC Initstructure.NVIC_IRQChannelCmd-ENABLE;
  • NVIC_Init(&NVIC_InitStructure);
  • ,开启TIM2时钟*
  • RCC_APBIPeriphClockCmd (RCC_ APB1Periph TIM2, ENABLE);
  • TIM_ Delnit(TTM2);/TIM2设为默认方式
  • 1/自动重装载寄存器周期的值(计数值)
  • //时钟预分频数72
  • 1时钟4分频,TM CKD_DTV4
  • 向上计数模式,TIM_ CounterMode_Up
  • TIM TimeBaselnit(TIM2, &TIM TimeBaseStructure);
  • 1/清除港出中断标志,TIM FLAG_Update
  • TIM ITConfg(TIM2, TIM IT_Update, ENABLE);
  • i使能中断
  • //开启TIM2
  • 回答下列问题:
  • 什么是PWM波?介绍一种pWM的应用场景。
  • 答:PWM波(Pulse Width Modulation)是一种周期性的方波信号,其占空比可以调整,从而控制输出信号的平均电平。PWM信号广泛应用于电机控制、LED亮度控制、音频放大器等领域。例如,LED灯可以通过改变PWM信号的占空比来调节亮度,电机可以通过PWM信号的频率和占空比控制转速和转向。
  • (2)除了向上计数模式,STM32通用定时器TIV的16位计数器还可以采用哪些方式工作?
  • 答:向上计数模式(TIM_COUNTERMODE_UP)
  • - 向下计数模式(TIM_COUNTERMODE_DOWN)
  • - 向上/向下计数模式(TIM_COUNTERMODE_CENTERALIGNED1/2/3)
  • - 编码器模式(TIM_COUNTERMODE_CENTERALIGNED1/2/3)
  • (3)补全上述代码。
  • void Tim2Init(void) {
  •     NVIC_InitTypeDef NVIC_InitStructure;
  •     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  •     
  •     // 时钟预分频数72,时钟4分频
  •     TIM_TimeBaseStructure.TIM_Prescaler = 71;
  •     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
  •     // 重载值为5000,每20ms产生一次中断
  •     TIM_TimeBaseStructure.TIM_Period = 5000;
  •     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  •     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  •     
  •     // 清除更新中断标志
  •     TIM_ClearFlag(TIM2, TIM_FLAG_Update);
  •     // 使能更新中断
  •     TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
  •     
  •     // TIM2中断优先级设定
  •     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  •     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
  •     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  •     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
  •     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  •     NVIC_Init(&NVIC_InitStructure);
  •     
  •     // 开启TIM2时钟
  •     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  •     // TIM2设为默认方式
  •     TIM_Cmd(TIM2, ENABLE);
  • }
  • 提示:参照时基初始化结构体变量。清除港出中断西数为void
  • TIM_ ClearFlag(rIM_ TypeDer TMs, uinr16 1 TIM FLAC); 定时器使能函数为
  • TIM_Cnd(TIM_ TypeDer TIMx, FunctionalState New State)
  • 附:时基初始化结构体变量
  • typedef struct
  • 1
  • wint16 I TIM Prescaler; uint16 I TIM CounterMode; wint16 I TIM Period; uintI6_1 TIM_ClockDivision; wint8_1 TIM_RepetitionCounter;
  • I TIM TimeBaselnitTypeDef;
  • 2.利用stm32点亮LED灯,led按固定时间一直闪烁 部分代码如下
  • #inclade *stm3300s.
  • void L.EDO Confe (void void LEDO On (void) void LEDO OfT (void);
  • void Delay (unsigned long int main (void)
  • LEDO Config O;
  • while (1) I
  • LEDO On 0;
  • Delay (0x5FFFFF);
  • LEDO_OfF O;
  • Delay (0x5FFFFF);
  • void LEDO Config(void)
  • void LED0_On (void) {
  • GPIO_ ResetBits (GPIOA, GPIO_Pin_8);
  • void LED0_Off (void)
  • GPIO_SetBits (GPIOA, GPIO_Pin_8);
  • void Delay (unsigned long x) | unsigned long i;
  • for (i=0; i<x; i#+);)
  • 请回答下列问题:(14分)
  • 在查看 《STM32数据手册》 中的GPIO的表格时,会看到有“口”一列,这是什么意思?
  • 答:“口”一列指的是GPIO口的编号,STM32F系列芯片有多个GPIO口,每个GPIO口都有一个编号,方便用户在程序中进行引脚配置和操作。
  • (2) STM32F103ZET6芯片GPIO口支持三种最大翻转速度,分别是什么?
  • 答:STM32F103ZET6芯片GPIO口支持三种最大翻转速度,分别是10MHz、2MHz和50MHz。
  • STM32F103的GPIO端口一共可分为哪几种输入状态?
  • 答:STM32F103的GPIO端口一共可分为4种输入状态,分别是浮空输入、带上拉输入、带下拉输入和模拟输入。
  • (4) 函数LED0_ Configo的作用为打开GPIOA端口的时钟、配置PA8为推挽输出以及物出速率为S0MHZ,请写出该西数代码。
  • 答:void LED0_Config(void)
  • {
  •     GPIO_InitTypeDef GPIO_InitStructure;
  •     
  •     // 打开GPIOA时钟
  •     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  •     
  •     // 配置PA8为推挽输出
  •     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  •     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  •     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  •     GPIO_Init(GPIOA, &GPIO_InitStructure);
  • }
  • 附:GPIO初始化结构体定义和工作模式宏定义:
  • typedef struct
  • wint16_t GPIO Pin;
  • GPIOSpeed_TypeDef GPIO_Speed;
  • GPIOMode TypeDef GPIO_Mode;
  • }GPIO InitTypeDef;
  • #define IS _GPIO MODE(MODE) (((MODE)
  • GPIO Mode AIN) || ((MODE)=
  • GPIO _Mode_IN _FLOATING) || ((MODE)
  • GPIO Mode_IPD) || ((MODE) == GPIO_ Mode_IPU)
  • 使用定时器1输出矩形波,写出子程序内容
  • void TIM1_Proc(void)
  • {
  • u16 CCR1_Val;
  • if(TIM1->SR&1)
  • {
  • TIM1->SR=~1;
  • CCR1_Val=TIM1->CCR1+200;
  • if(CCR1_Val==2000)  CCR1_Val=200;
  • TIM1->CCR1=CCR1_Val;
  • printf(“%4u\r\n”,CCR1_Val);
  • }
  • }
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值