立创梁山派GD32F470ZGT6串口的配置和使用

 

一.串口的文件创建

首先,先创建usart.c和usart.h文件。

然后把Firmware导入gd32f4xx-usart.c文件

然后就开始写我们的串口文件配置了

1.在创建好的usart.h引入usart.h的头文件

#include "Usart.h"

2.在usart.h文件中引用gd32f4xx.h和systick.h文件

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

#endif

 二.串口的配置

3.在usart.c文件写串口的配置

(1)开启时钟     

首先开启时钟 rcu_periph_clock_enable();

然后我们转跳这个函数的定义,看这个函数的注释,

参数注释:

    \param[in]  periph: RCU peripherals, refer to rcu_periph_enum
                only one parameter can be selected which is shown as below:
      \arg        RCU_GPIOx (x = A, B, C, D, E, F, G, H, I): GPIO ports clock

开启GPIO几的时钟,这里我们开启的是GPIOA,

我们要用的usart0这个串口,也就是我们下载器链接连接的串口,TX0:PA9,RX0:PA10

开启TX和RX的GPIO的时钟

片段代码:

       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA

 然后接着往下划

看到这个串口的时钟注释

参数注释:

 \arg        RCU_USARTx (x = 0, 1, 2, 5): USART clock

然后开启串口的时钟

片段代码:

rcu_periph_clock_enable(RCU_UASRT);
#define RCU_UASRT RCU_USART0

 完整代码片段:

usart.c

#include "Usart.h"

void Usart_Init(void)
{
       /*开启时钟  */  
       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
       rcu_periph_clock_enable(RCU_UASRT);

}

usart.h的宏定义 

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

/*开启时钟的宏定义*/
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA
#define RCU_UASRT RCU_USART0

#endif

(2)GPIO复用   

第一

调用GPIO的复用函数:gpio_af_set();

然后我们也是转到定义看

参数注释:

    \param[in]  gpio_periph: GPIO port
                only one parameter can be selected which is shown as below:
      \arg        GPIOx(x = A,B,C,D,E,F,G,H,I)

第一个参数我们是是GPIOA

参数注释:

      \arg        GPIO_AF_7: USART0, USART1, USART2, SPI1, SPI2

然后第二个参数我们复用GPIO_AF_7,这里注释也写着,复用串口的

参数注释:

    \param[in]  pin: GPIO pin
                one or more parameters can be selected which are shown as below:
      \arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL

第四个参数是GPIO_PIN_9和GPIO_PIN_10 ,TX:PA9,RX:PA10

片段代码:

       gpio_af_set(USART_TX_RORT,USART_AF,USART_TX_PIN);
       gpio_af_set(USART_RX_RORT,USART_AF,USART_RX_PIN);
/*GPIO配置宏定义*/
#define USART_TX_RORT GPIOA
#define USART_RX_RORT GPIOA
#define USART_AF GPIO_AF_7
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10

第二

设置TX和RX的复用模式gpio_mode_set();我们设置为上拉

参数注释:

    \param[in]  gpio_periph: GPIO port
                only one parameter can be selected which is shown as below:
      \arg        GPIOx(x = A,B,C,D,E,F,G,H,I)

第一个参数是GPIOA

参数注释:

    \param[in]  mode: GPIO pin mode
      \arg        GPIO_MODE_INPUT: input mode
      \arg        GPIO_MODE_OUTPUT: output mode
      \arg        GPIO_MODE_AF: alternate function mode
      \arg        GPIO_MODE_ANALOG: analog mode

第二个参数是GPIO_MODE_AF,    复用模式

参数注释:

    \param[in]  pull_up_down: GPIO pin with pull-up or pull-down resistor
      \arg        GPIO_PUPD_NONE: floating mode, no pull-up and pull-down resistors
      \arg        GPIO_PUPD_PULLUP: with pull-up resistor
      \arg        GPIO_PUPD_PULLDOWN:with pull-down resistor

第三个参数是GPIO_PUPD_PULLUP ,上拉模式

参数注释:

    \param[in]  pin: GPIO pin
                one or more parameters can be selected which are shown as below:
      \arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL

第四个参数是GPIO_PIN_9和GPIO_PIN_10 

片段代码:

       /*配置TX为复用模式 上拉模式*/
       gpio_mode_set(USART_TX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_TX_PIN);
       /*配置RX为复用模式 上拉模式*/
       gpio_mode_set(USART_RX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_RX_PIN);

第三

配置TX和RX为推挽输出    gpio_output_options_set();

参数注释:

    \param[in]  gpio_periph: GPIO port
                only one parameter can be selected which is shown as below:
      \arg        GPIOx(x = A,B,C,D,E,F,G,H,I)

第一个参数依旧是GPIOA 

参数注释:

    \param[in]  otype: GPIO pin output mode
      \arg        GPIO_OTYPE_PP: push pull mode
      \arg        GPIO_OTYPE_OD: open drain mode

第二个参数是 GPIO_OTYPE_PP  推挽输出

 参数注释:

    \param[in]  speed: GPIO pin output max speed
      \arg        GPIO_OSPEED_2MHZ: output max speed 2MHz
      \arg        GPIO_OSPEED_25MHZ: output max speed 25MHz
      \arg        GPIO_OSPEED_50MHZ: output max speed 50MHz

第三个参数是频率 50MHZ

参数注释:

    \param[in]  pin: GPIO pin
                one or more parameters can be selected which are shown as below:
      \arg        GPIO_PIN_x(x=0..15), GPIO_PIN_ALL

第四个参数是GPIO_PIN_9和GPIO_PIN_10 

片段代码:

       /*配置TX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_TX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_TX_PIN);
       /*配置RX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_RX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_RX_PIN);

完整代码片段:

usart.c

#include "Usart.h"

void Usart_Init(void)
{
       /*开启时钟  */  
       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
       rcu_periph_clock_enable(RCU_UASRT);

       /*GPIO复用功能*/
       gpio_af_set(USART_TX_RORT,USART_AF,USART_TX_PIN);
       gpio_af_set(USART_RX_RORT,USART_AF,USART_RX_PIN);
       /*配置TX为复用模式 上拉模式*/
       gpio_mode_set(USART_TX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_TX_PIN);
       /*配置RX为复用模式 上拉模式*/
       gpio_mode_set(USART_RX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_RX_PIN);
       /*配置TX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_TX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_TX_PIN);
       /*配置RX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_RX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_RX_PIN);
}

usart.h的宏定义 

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

/*开启时钟的宏定义*/
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA
#define RCU_UASRT RCU_USART0

/*GPIO配置宏定义*/
#define USART_TX_RORT GPIOA
#define USART_RX_RORT GPIOA
#define USART_AF GPIO_AF_7
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10

#endif

(3)配置串口参数

第一

复位串口  usart_deinit();

    \param[in]  usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)

 这里看注销信息,这个参数是要传的调用那个串口,我们调用的是串口0,所以这个参数填写USART0

片段代码:

usart_deinit(USART);
#define USART USART0

 第二

配置串口的波特率  usart_baudrate_set();

参数注释:

    \param[in]  usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)

第一个参数是USART0

参数注释:

\param[in]  baudval: baud rate value

第二个参数是波特率,这里我们设置为115200

片段代码:

usart_baudrate_set(USART,USART_BAUDRATE);
/*串口宏定义*/
#define USART USART0
/*串口波特率*/
#define USART_BAUDRATE 112500

 第三

配置串口校验位   usart_parity_config();

参数注释:

    \param[in] usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)

第一个参数 USART0

参数注释:

     \param[in] paritycfg: configure USART parity
               only one parameter can be selected which is shown as below:
      \arg       USART_PM_NONE: no parity
      \arg       USART_PM_EVEN: even parity
      \arg       USART_PM_ODD:  odd parity


       /*配置串口校验位
       USART_PM_NONE : 没有校验位
       USART_PM_EVEN : 奇校验
       USART_PM_ODD  : 偶校验
       */

第二个参数 USART_PM_NONE 没有校验位

片段代码:

       /*配置串口校验位
       USART_PM_NONE : 没有校验位
       USART_PM_EVEN : 奇校验
       USART_PM_ODD  : 偶校验
       */
       usart_parity_config(USART,USART_PM_NONE);

 第四

配置串口数据位    usart_word_length_set();      一般设置为八位 

参数注释:

    \param[in] usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)
    \param[in] wlen: USART word length configure
               only one parameter can be selected which is shown as below:
      \arg       USART_WL_8BIT: 8 bits
      \arg       USART_WL_9BIT: 9 bits

第一个参数    USART0

第二个参数 USART_WL_8BIT    

片段代码:

       /*配置串口数据位    一般设置为八位*/
       usart_word_length_set(USART,USART_WL_8BIT);

 第五

配置串口停止位    usart_stop_bit_set();    我们设置为一位 

参数注释:

    \param[in] usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)
    \param[in] stblen: USART stop bit configure
               only one parameter can be selected which is shown as below:
      \arg       USART_STB_1BIT:   1 bit
      \arg       USART_STB_0_5BIT: 0.5 bit(not available for UARTx(x=3,4,6,7))
      \arg       USART_STB_2BIT:   2 bits
      \arg       USART_STB_1_5BIT: 1.5 bits(not available for UARTx(x=3,4,6,7))

第一个参数  USART0

第二个参数 USART_STB_1BIT

片段代码:

       /*配置串口的停止位    设置为一位*/
       usart_stop_bit_set(USART,USART_STB_1BIT);

完整代码片段:

usart.c

#include "Usart.h"
/*
串口Usart0的引脚 TX0 PA9 , 
                RX0 PA10
*/
void Usart_Init(void)
{
       /*开启时钟  */  
       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
       rcu_periph_clock_enable(RCU_UASRT);

       /*GPIO复用功能*/
       gpio_af_set(USART_TX_RORT,USART_AF,USART_TX_PIN);
       gpio_af_set(USART_RX_RORT,USART_AF,USART_RX_PIN);
       /*配置TX为复用模式 上拉模式*/
       gpio_mode_set(USART_TX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_TX_PIN);
       /*配置RX为复用模式 上拉模式*/
       gpio_mode_set(USART_RX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_RX_PIN);
       /*配置TX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_TX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_TX_PIN);
       /*配置RX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_RX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_RX_PIN);

       /*配置串口参数
       一.复位串口
       二.配置波特率
       三.配置校验位
       四.配置数据位
       五.配置停止位
       */
       /*复位串口*/
       usart_deinit(USART);
       /*配置串口波特率*/
       usart_baudrate_set(USART,USART_BAUDRATE);
       /*配置串口校验位
       USART_PM_NONE : 没有校验位
       USART_PM_EVEN : 奇校验
       USART_PM_ODD  : 偶校验
       */
       usart_parity_config(USART,USART_PM_NONE);
       /*配置串口数据位    一般设置为八位*/
       usart_word_length_set(USART,USART_WL_8BIT);
       /*配置串口的停止位    设置为一位*/
       usart_stop_bit_set(USART,USART_STB_1BIT);
       

}

usart.h

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

/*开启时钟的宏定义*/
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA
#define RCU_UASRT RCU_USART0

/*GPIO配置宏定义*/
#define USART_TX_RORT GPIOA
#define USART_RX_RORT GPIOA
#define USART_AF GPIO_AF_7
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10

/*串口宏定义*/
#define USART USART0
/*串口波特率*/
#define USART_BAUDRATE 112500

#endif

(4)打开串口

第一

使能串口  usart_enable();

参数是 USART0

代码片段:

       /*使能串口*/
       usart_enable(USART);

第二

设置串口发送     usart_transmit_config();

参数注释:

    \param[in]  usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)
    \param[in]  txconfig: enable or disable USART transmitter
                only one parameter can be selected which is shown as below:
      \arg        USART_TRANSMIT_ENABLE: enable USART transmission
      \arg        USART_TRANSMIT_DISABLE: enable USART transmission

第一个参数  是  USART0

第二个参数 是  USART_TRANSMIT_ENABLE

片段代码:

       /*配置串口发送*/
       usart_transmit_config(USART,USART_TRANSMIT_ENABLE);

第三

串口接收   sart_receive_config();

参数注释:

    \param[in]  usart_periph: USARTx(x=0,1,2,5)/UARTx(x=3,4,6,7)
    \param[in]  rxconfig: enable or disable USART receiver
                only one parameter can be selected which is shown as below:
      \arg        USART_RECEIVE_ENABLE: enable USART reception
      \arg        USART_RECEIVE_DISABLE: disable USART reception

第一个参数是USART0

第二个参数是 USART_RECEIVE_ENABLE

片段代码:

       /*配置串口接收*/
       usart_receive_config(USART,USART_RECEIVE_ENABLE);

完整代码片段:

usart.c

#include "Usart.h"
/*
串口Usart0的引脚 TX0 PA9 , 
                RX0 PA10
*/
void Usart_Init(void)
{
       /*开启时钟  */  
       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
       rcu_periph_clock_enable(RCU_UASRT);

       /*GPIO复用功能*/
       gpio_af_set(USART_TX_RORT,USART_AF,USART_TX_PIN);
       gpio_af_set(USART_RX_RORT,USART_AF,USART_RX_PIN);
       /*配置TX为复用模式 上拉模式*/
       gpio_mode_set(USART_TX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_TX_PIN);
       /*配置RX为复用模式 上拉模式*/
       gpio_mode_set(USART_RX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_RX_PIN);
       /*配置TX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_TX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_TX_PIN);
       /*配置RX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_RX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_RX_PIN);

       /*配置串口参数
       一.复位串口
       二.配置波特率
       三.配置校验位
       四.配置数据位
       五.配置停止位
       */
       /*复位串口*/
       usart_deinit(USART);
       /*配置串口波特率*/
       usart_baudrate_set(USART,USART_BAUDRATE);
       /*配置串口校验位
       USART_PM_NONE : 没有校验位
       USART_PM_EVEN : 奇校验
       USART_PM_ODD  : 偶校验
       */
       usart_parity_config(USART,USART_PM_NONE);
       /*配置串口数据位    一般设置为八位*/
       usart_word_length_set(USART,USART_WL_8BIT);
       /*配置串口的停止位    设置为一位*/
       usart_stop_bit_set(USART,USART_STB_1BIT);
       

       /*打开串口
       一.使能串口
       二.配置串口发送
       三.配置串口接收
       */
       /*使能串口*/
       usart_enable(USART);
       /*配置串口发送*/
       usart_transmit_config(USART,USART_TRANSMIT_ENABLE);
       /*配置串口接收*/
       usart_receive_config(USART,USART_RECEIVE_ENABLE);

}

usart.h

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

/*开启时钟的宏定义*/
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA
#define RCU_UASRT RCU_USART0

/*GPIO配置宏定义*/
#define USART_TX_RORT GPIOA
#define USART_RX_RORT GPIOA
#define USART_AF GPIO_AF_7
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10

/*串口宏定义*/
#define USART USART0
/*串口波特率*/
#define USART_BAUDRATE 112500

#endif

到这里我们的基本配置就已经配置好了  

然后我们就开始串口的发送函数了

三.串口的信息打印发送 

首先c语音的printf函数中不断循环调用fputc函数,所以我们使用printf打印信息到串口的时候在这个地方,是需要重新写fputc函数,这个函数的功能就是打印输出一个字符。

代码片段:

/*重写printf函数*/
int fputc(int ch,FILE *f)
{
    usart_data_transmit(USART,(uint8_t)ch);
    while(RESET == usart_flag_get(USART0,USART_FLAG_TBE));
    // 等待发送数据缓存区标志位
    return ch;
}

这时候会报错找不到FILE;我们只需要在上面再添加stdio.h这个头文件即可

四,完整代码演示

 main.c

#include "gd32f4xx.h"
#include "systick.h"
#include <stdio.h>
#include "main.h"
#include "LED.h"
#include "sys.h"
#include "Usart.h"
/*!
    \brief    main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{


    systick_config();
    // led_gpio_config();
    Usart_Init();
    // usart_send_String("hello\r\n");
    

    while(1) {
    //    PDout(7) = 1;
    //    delay_1ms(500);
    //    PDout(7) = 0;
    //    delay_1ms(500);
       printf("hello\r\n");
    }
}

 usart.c

#include "Usart.h"
#include "stdio.h"
/*
串口Usart0的引脚 TX0 PA9 , 
                RX0 PA10
*/
void Usart_Init(void)
{
       /*开启时钟  */  
       rcu_periph_clock_enable(RCU_USART_TX);
       rcu_periph_clock_enable(RCU_USART_RX);
       rcu_periph_clock_enable(RCU_UASRT);

       /*GPIO复用功能*/
       gpio_af_set(USART_TX_RORT,USART_AF,USART_TX_PIN);
       gpio_af_set(USART_RX_RORT,USART_AF,USART_RX_PIN);
       /*配置TX为复用模式 上拉模式*/
       gpio_mode_set(USART_TX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_TX_PIN);
       /*配置RX为复用模式 上拉模式*/
       gpio_mode_set(USART_RX_RORT,GPIO_MODE_AF,GPIO_PUPD_PULLUP,USART_RX_PIN);
       /*配置TX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_TX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_TX_PIN);
       /*配置RX为推挽输出 50MHZ*/
       gpio_output_options_set(USART_RX_RORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,USART_RX_PIN);

       /*配置串口参数
       一.复位串口
       二.配置波特率
       三.配置校验位
       四.配置数据位
       五.配置停止位
       */
       /*复位串口*/
       usart_deinit(USART);
       /*配置串口波特率*/
       usart_baudrate_set(USART,USART_BAUDRATE);
       /*配置串口校验位
       USART_PM_NONE : 没有校验位
       USART_PM_EVEN : 奇校验
       USART_PM_ODD  : 偶校验
       */
       usart_parity_config(USART,USART_PM_NONE);
       /*配置串口数据位    一般设置为八位*/
       usart_word_length_set(USART,USART_WL_8BIT);
       /*配置串口的停止位    设置为一位*/
       usart_stop_bit_set(USART,USART_STB_1BIT);
       

       /*打开串口
       一.使能串口
       二.配置串口发送
       三.配置串口接收
       */
       /*使能串口*/
       usart_enable(USART);
       /*配置串口发送*/
       usart_transmit_config(USART,USART_TRANSMIT_ENABLE);
       /*配置串口接收*/
       usart_receive_config(USART,USART_RECEIVE_ENABLE);

}



/*重写printf函数*/
int fputc(int ch,FILE *f)
{
    usart_data_transmit(USART,(uint8_t)ch);
    while(RESET == usart_flag_get(USART0,USART_FLAG_TBE));
    // 等待发送数据缓存区标志位
    return ch;
}

 usart.h

#ifndef _USART_H_
#define _USART_H_

#include "gd32f4xx.h"
#include "systick.h"

/*开启时钟的宏定义*/
#define RCU_USART_TX RCU_GPIOA
#define RCU_USART_RX RCU_GPIOA
#define RCU_UASRT RCU_USART0

/*GPIO配置宏定义*/
#define USART_TX_RORT GPIOA
#define USART_RX_RORT GPIOA
#define USART_AF GPIO_AF_7
#define USART_TX_PIN GPIO_PIN_9
#define USART_RX_PIN GPIO_PIN_10

/*串口宏定义*/
#define USART USART0
/*串口波特率*/
#define USART_BAUDRATE 112500

/*串口初始化*/
void Usart_Init(void);
/*发送函数*/
void usart_send_data(uint8_t ucch);
/*发送函数    发送一个字符串*/
void usart_send_String(uint8_t *ucstr);

#endif

 五.效果演示

这里我用VSCode进行演示

需要keil代码的话私我

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵宝宝爱喝奶茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值