用ccs进行天猛星MSPM0G3507开发板程序调试和烧录时都出现报错:Unable to read file ‘D:DS\code sheets\2025\25E.theia-work...如何解决

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!
  
📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提炼出多种经过验证的高可行性解决方案,供开发者们参考与借鉴。
  
欢迎 关注、收藏并订阅本专栏,持续更新的干货内容将与您同行,让我们携手精进,技术跃迁,步步高升!

📢 问题描述

问题来源:https://ask.csdn.net/questions/8588027

问题描述:用ccs进行天猛星MSPM0G3507开发板程序调试和烧录时都出现如下截图中的报错:Unable to read file 'D:DS\code sheets\2025\25E.theia-work…具体如何解决?

📣 请知悉:如下方案不保证一定适配你的问题!

  如下是针对上述问题进行专业角度剖析答疑,不喜勿喷,仅供参考:

✅️问题理解

根据题主提供的错误信息,这是一个在使用CCS(Code Composer Studio)对天猛星MSPM0G3507开发板进行程序调试和烧录时遇到的典型配置文件缺失问题。

错误分析:
  1. 错误类型ENOENT: no such file or directory - 系统找不到指定的文件或目录
  2. 缺失文件launch.json - 这是调试器启动配置文件
  3. 问题路径D:\DS\code_sheets\2025\25E.theia-workspace.theia\launch.json
  4. 根本原因:CCS调试配置不完整或工作空间配置异常
深层原因分析:
  • 工作空间路径中包含了异常的.theia-workspace.theia目录,这表明可能存在IDE配置冲突
  • CCS项目的调试配置文件缺失或损坏
  • 可能是首次创建项目时调试器配置不完整
  • 工作空间权限或路径问题

✅️问题解决方案

方案一:重新配置CCS调试环境(推荐)

步骤1:清理工作空间

# 建议将项目移动到简单路径
# 从: D:\DS\code_sheets\2025\25E.theia-workspace.theia\
# 到: D:\MSPM0_Projects\YourProject\

步骤2:在CCS中重新创建调试配置

// 1. 右键项目 -> Debug As -> Debug Configurations
// 2. 创建新的Code Composer Studio配置
// 3. 配置目标设备
Target Configuration: MSPM0G3507
Connection: XDS110 USB Debug Probe (天猛星开发板一般使用此调试器)

步骤3:手动创建launch.json(如果需要)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "MSPM0G3507 Debug",
            "type": "ccs",
            "request": "launch",
            "program": "${workspaceFolder}/Debug/${workspaceFolderBasename}.out",
            "cwd": "${workspaceFolder}",
            "targetConfig": "MSPM0G3507.ccxml",
            "preLaunchTask": "build"
        }
    ]
}
方案二:完整的项目重建流程

步骤1:创建新的CCS项目

// File -> New -> CCS Project
// Target: MSPM0G3507
// Template: Empty Project (with main.c)
// Compiler: TI ARM Compiler

步骤2:配置目标连接

<!-- 创建.ccxml配置文件 -->
<?xml version="1.0" encoding="UTF-8"?>
<configurations>
    <configuration XML_version="1.2" id="MSPM0G3507">
        <instance XML_version="1.2" 
                   desc="XDS110 USB Debug Probe_0" 
                   href="connections/TIXDS110_Connection.xml" 
                   id="XDS110 USB Debug Probe_0" 
                   xml:id="XDS110 USB Debug Probe_0">
            <platform XML_version="1.2" id="platform_0">
                <instance XML_version="1.2" 
                          desc="MSPM0G3507" 
                          href="devices/MSPM0G3507.xml" 
                          id="MSPM0G3507" 
                          xml:id="MSPM0G3507"/>
            </platform>
        </instance>
    </configuration>
</configurations>

步骤3:验证硬件连接

// 基础连接测试代码
#include "ti_msp_dl_config.h"

int main(void) {
    SYSCFG_DL_init();
    
    // 简单的LED闪烁测试
    while(1) {
        DL_GPIO_togglePins(LED_PORT, LED_PIN);
        delay_cycles(1000000);
    }
}
方案三:使用命令行调试(备用方案)

步骤1:安装CCS命令行工具

# 使用CCS安装目录下的命令行工具
cd "C:\ti\ccs1200\ccs\tools\compiler\ti-cgt-armllvm_2.1.3.LTS\bin"

步骤2:命令行编译和烧录

# 编译项目
armcl -mv7M0+ --code_state=16 --float_support=none -O2 --include_path="." main.c

# 使用DSS脚本烧录
dss.bat -f flash_program.js

✅️问题延伸

1. CCS环境配置最佳实践

工作空间管理策略:

项目模板创建:

// 创建标准化的项目模板
// project_template/
├── src/
│   ├── main.c
│   ├── hardware_init.c
│   └── user_config.h
├── include/
│   └── hardware_abstraction.h
├── Debug/
├── Release/
├── targetConfigs/
│   └── MSPM0G3507.ccxml
└── .cproject
2. 调试器配置深度优化

XDS110调试器设置:

// 在CCS中优化调试器性能
// Window -> Preferences -> Code Composer Studio -> Debug
void debug_config_optimization(void) {
    // 设置调试选项
    // 1. 禁用不必要的调试功能
    // 2. 优化刷新率
    // 3. 配置断点策略
    
    // SWD接口配置
    // 频率设置:1MHz(推荐)
    // 复位策略:Connect on reset
}

多核调试配置:

<!-- 针对MSPM0G3507的优化配置 -->
<property Type="choicelist" Value="1" id="SWD Frequency">
    <choice Name="Fixed - 1.0 MHz" value="1"/>
</property>
<property Type="boolean" Value="true" id="Connect on reset"/>
<property Type="boolean" Value="false" id="Halt on reset"/>
3. 错误诊断和日志分析

CCS日志分析工具:

// 启用详细日志记录
// Help -> CCS Logs -> Enable All Logs

void analyze_ccs_logs(void) {
    // 检查关键日志文件
    // 1. .metadata\.log - 主要错误日志
    // 2. DebuggerLog.txt - 调试器日志  
    // 3. TargetTrace.log - 目标连接日志
    
    printf("检查CCS日志以诊断问题根源\n");
}

✅️问题预测

1. 未来可能遇到的相关问题

问题1:调试器连接不稳定

// 预防措施:添加连接检测
bool check_debugger_connection(void) {
    // 检查XDS110调试器状态
    // 返回连接状态
    return debugger_status == CONNECTED;
}

// 解决方案:重新配置USB驱动
void fix_debugger_connection(void) {
    // 1. 更新XDS110驱动程序
    // 2. 检查USB端口
    // 3. 重启CCS
}

问题2:烧录失败

// 常见烧录错误及解决方案
typedef enum {
    FLASH_VERIFY_ERROR,     // 烧录验证失败
    FLASH_ERASE_ERROR,      // 擦除失败  
    FLASH_WRITE_ERROR,      // 写入失败
    TARGET_NOT_HALTED       // 目标未停止
} flash_error_t;

void handle_flash_error(flash_error_t error) {
    switch(error) {
        case FLASH_VERIFY_ERROR:
            // 降低烧录频率,检查电源稳定性
            break;
        case TARGET_NOT_HALTED:
            // 添加复位序列
            break;
        // ... 其他错误处理
    }
}

问题3:项目迁移兼容性

// 版本兼容性检查
void check_ccs_version_compatibility(void) {
    // CCS版本要求:12.0.0或更高
    // MSPM0-SDK版本:1.20.01.02或更高
    // 编译器版本:TI ARM Clang 2.1.3或更高
    
    if(ccs_version < required_version) {
        printf("警告:CCS版本过低,建议升级\n");
    }
}
2. 长期维护策略

自动化构建脚本:

#!/bin/bash
# auto_build.sh - 自动化构建和烧录脚本

echo "开始自动化构建..."

# 1. 清理项目
make clean

# 2. 重新构建
make all

# 3. 检查构建结果
if [ $? -eq 0 ]; then
    echo "构建成功,开始烧录..."
    # 4. 烧录程序
    uniflash.sh -ccxml MSPM0G3507.ccxml -program output.hex
else
    echo "构建失败,请检查代码"
    exit 1
fi

✅️小结

核心解决方案总结:
  1. 立即解决方案

    • 将项目移动到简单英文路径(如D:\MSPM0_Projects\
    • 在CCS中重新创建调试配置
    • 确保XDS110调试器驱动正确安装
  2. 根本原因:工作空间路径包含异常目录结构,导致CCS无法正确创建和定位调试配置文件

  3. 预防措施

    • 使用标准化的项目结构和命名规范
    • 定期备份CCS工作空间配置
    • 建立项目模板,避免重复配置
  4. 关键技术要点

    • MSPM0G3507调试需要正确的.ccxml目标配置文件
    • 天猛星开发板通常使用XDS110调试接口
    • CCS调试配置与具体的开发板硬件设计密切相关
  5. 最佳实践建议

    • 项目路径保持简洁,避免中文和特殊字符
    • 使用CCS官方推荐的项目模板
    • 定期更新CCS和相关SDK到最新稳定版本

通过以上系统性的解决方案,您应该能够彻底解决CCS调试和烧录天猛星MSPM0G3507开发板时遇到的配置文件问题,并建立起稳定可靠的开发环境。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

🧧🧧 文末福利,等你来拿!🧧🧧

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《全栈Bug调优(实战版)》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

🫵 Who am I?

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云多年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;更多精彩福利点击这里;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿。

-End-

<think>首先,用户的问题是:“我想在立创·MSPM0G3507开发板上使用I2C接口的指南或示例 请问立创 MSPM0G3507 开发板 I2C 使用指南 示例”。用户要求提供关于在立创·MSPM0G3507开发板上使用I2C接口的指南或示例。 现在,回顾系统级指令: - 所有行内数学表达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如:[^1]。 用户可见层: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 参考站内引用: - [^1]: 关于开发板的简介。 - [^2]: 讨论软件IIC的问题解决方案。 - [^3]: 关于安装环境SDK的指南。 - [^4]: 一个I2C头文件的内容。 我需要基于这些引用提供指南或示例。用户特别提到了I2C接口,所以焦点在I2C上。 从引用[^2]中,我看到用户提到了软件IIC的问题:MSPM0G3507最多只能设置两个IO口为开漏输出。这导致了在配置OLEDMPU6050的冲突。解决方案是使用硬件IIC或共享引脚。 引用[^4]提供了一个I2C头文件的内容,这可能是软件IIC的实现。 引用[^3]是关于安装环境的。 所以,我应该提供使用I2C的指南,包括硬件软件IIC的选项。 结构化回答: 1. **引言**:简要介绍开发板I2C接口。 2. **硬件IIC vs 软件IIC**:解释两者的区别限制,基于引用[^2]。 3. **使用硬件IIC的指南**:提供步骤示例代码。 4. **使用软件IIC的指南**:提供步骤示例代码,基于引用[^4]。 5. **常见问题解决**:如引用[^2]中提到的开漏输出问题。 6. **总结**:给出建议。 7. **生成相关问题**:根据系统指令。 确保使用中文。 生成相关问题:我需要创建3-5个相关问题,基于回答内容。 现在,构建回答大纲: - **步骤1: 介绍开发板I2C** - 基于引用[^1],介绍开发板- 解释I2C接口在嵌入式系统中的作用。 - **步骤2: 硬件IIC使用指南** - 使用官方SDKSysConfig工具配置硬件IIC。 - 参考引用[^3]的安装步骤。 - 提供示例代码片段。 - **步骤3: 软件IIC使用指南** - 基于引用[^4]的头文件,解释软件IIC的实现。 - 提供示例代码,如初始化、发送数据等。 - 讨论限制,如开漏输出问题(引用[^2])。 - **步骤4: 示例应用** - 如连接OLED或MPU6050(引用[^2])。 - **步骤5: 常见问题** - 解决引脚冲突问题。 - **步骤6: 总结** - **步骤7: 相关问题** 在回答中,自然地添加引用标识。例如,当提到开漏输出问题,添加[^2]。 使用LaTeX格式:用户问题中没有数学表达式,所以可能不需要,但如果有变量或方程,确保正确格式。 最终,生成相关问题。</think>### 立创· MSPM0G3507 开发板 I2C 使用指南与示例 立创· MSPM0G3507 开发板基于 TI MSPM0G3507 微控制器,支持 I2C(Inter-Integrated Circuit)接口,用于连接传感器、显示屏等外设。I2C 是一种同步串行通信协议,使用 SCL(钟线) SDA(数据线)两根线实现主从设备通信。本指南将逐步介绍 I2C 的使用方法,包括硬件 I2C 软件 I2C(模拟 I2C)两种方式,并提供完整示例代码。内容基于官方文档用户实践[^1][^2][^3][^4],确保可靠性可操作性。 --- #### 步骤 1: 准备工作 在开始 I2C 开发前,需搭建开发环境: 1. **安装 SDK 工具**: - 下载并安装 TI MSPM0 SDK(版本 2.02.00.05) SysConfig 工具(版本 1.21.1),用于配置硬件外设[^3]。 - 安装 IAR Embedded Workbench(推荐版本 9.60)或 Keil MDK,作为集成开发环境(IDE)。 - 参考立创官方安装指南:[开发环境搭建](https://wiki.lckfb.com/zh-hans/tmx-mspm0g3507/keil-beginner/install.html)。 2. **硬件连接**: - MSPM0G3507 支持多路 I2C 接口(如 I2C0、I2C1)。默认引脚映射为: - I2C0: SCL = PA8, SDA = PA9 - I2C1: SCL = PB0, SDA = PB1 - 连接外设(如 OLED 屏或 MPU6050 传感器),确保 VCC/GND 正确接线,SCL/SDA 线需加上拉电阻(通常 4.7kΩ)。 3. **重要限制**: - MSPM0G3507 的 GPIO 引脚在开漏输出模式下有硬件限制:最多只能同配置两个引脚为开漏输出(用于软件 I2C)。如果超出,会导致配置失败[^2]。 - 建议优先使用硬件 I2C,以避免引脚冲突问题。 --- #### 步骤 2: 使用硬件 I2C(推荐) 硬件 I2C 利用微控制器内置的 I2C 控制器,效率高且节省 CPU 资源。以下是配置步骤示例。 1. **SysConfig 工具配置**: - 打开 SysConfig 工具,创建新工程。 - 选择 `MSPM0G3507` 芯片,在 "Peripherals" 中添加 `I2C` 模块。 - 配置 I2C 参数: - 模式: Master(主模式) - 钟频率: 100 kHz(标准模式)或 400 kHz(快速模式) - 引脚分配: 例如,选择 I2C0(SCL=PA8, SDA=PA9) - 生成代码:SysConfig 会自动生成初始化代码(`.c/.h` 文件),集成到您的工程中[^3]。 2. **代码实现**: - 在 IAR 或 Keil 中创建工程,包含生成的 SDK 文件。 - 示例代码:发送数据到 I2C 从设备(如 OLED 屏)。 ```c #include "ti_msp_dl_config.h" // 包含 SDK 配置头文件 void I2C_WriteData(uint8_t slaveAddress, uint8_t *data, uint8_t length) { // 初始化 I2C DL_I2C_Master_Init(I2C0_INST); // 使用 I2C0 实例 // 设置从设备地址 DL_I2C_setSlaveAddress(I2C0_INST, slaveAddress << 1); // 地址左移 1 位(I2C 协议要求) // 启动传输 DL_I2C_startMasterWrite(I2C0_INST, data, length); while (DL_I2C_isBusBusy(I2C0_INST)); // 等待传输完成 } int main(void) { // 系统初始化 SYSCFG_DL_init(); uint8_t oledData[] = {0x00, 0x01}; // 示例数据 I2C_WriteData(0x3C, oledData, sizeof(oledData)); // OLED 地址通常为 0x3C while (1); } ``` - **说明**:此代码使用 SDK 提供的 API 实现 I2C 写操作。`DL_I2C_Master_Init` 初始化硬件,`DL_I2C_startMasterWrite` 启动数据传输。确保从设备地址正确(OLED 通常为 7 位地址 0x3C)[^1][^3]。 3. **优点与注意**: - 高效稳定,适合高速通信。 - 支持多从设备共享总线(通过地址区分)。 - 无需担心开漏输出限制问题[^2]。 --- #### 步骤 3: 使用软件 I2C(模拟 I2C) 软件 I2C 通过 GPIO 模拟 I2C 序,灵活性高但占用 CPU。适用于引脚受限或特殊需求场景。注意:MSPM0G3507 最多支持两个开漏输出引脚,需谨慎分配[^2]。 1. **实现基础**: - 基于用户提供的头文件 `myiic.h`(引用[^4]),实现 I2C 协议的核心函数。 - 核心函数包括:起始信号、停止信号、发送字节、接收字节等。 2. **代码示例**: - 头文件 `myiic.h`(直接引用自用户实践[^4]): ```c #ifndef __MYI2C_H #define __MYI2C_H #include "stdint.h" void MyI2C_Init(void); void MyI2C_Start(void); void MyI2C_Stop(void); void MyI2C_SendByte(uint8_t Byte); uint8_t MyI2C_R_SDA(void); uint8_t MyI2C_ReceiveByte(void); void MyI2C_SendAck(uint8_t AckBit); uint8_t MyI2C_ReceiveAck(void); void MyI2C_W_SCL(uint8_t BitValue); void MyI2C_W_SDA(uint8_t BitValue); #endif ``` - 源文件 `myiic.c` 实现(简化版): ```c #include "myiic.h" #include "ti_msp_dl_config.h" // 包含 SDK 引脚控制函数 // 定义 SCL SDA 引脚(例如使用 PB10 PB11) #define SCL_PIN DL_GPIO_PIN_10 #define SDA_PIN DL_GPIO_PIN_11 #define I2C_PORT GPIOB void MyI2C_Init(void) { // 配置引脚为开漏输出(最多两个引脚) DL_GPIO_setDriveMode(I2C_PORT, SCL_PIN, DL_GPIO_DRIVE_MODE_OPEN_DRAIN); DL_GPIO_setDriveMode(I2C_PORT, SDA_PIN, DL_GPIO_DRIVE_MODE_OPEN_DRAIN); DL_GPIO_setOutputMode(I2C_PORT, SCL_PIN, DL_GPIO_OUTPUT_PUSH_PULL); DL_GPIO_setOutputMode(I2C_PORT, SDA_PIN, DL_GPIO_OUTPUT_PUSH_PULL); MyI2C_W_SCL(1); // 初始高电平 MyI2C_W_SDA(1); } void MyI2C_Start(void) { MyI2C_W_SDA(1); MyI2C_W_SCL(1); delay_us(5); MyI2C_W_SDA(0); // 起始信号: SDA 下降沿 delay_us(5); MyI2C_W_SCL(0); } void MyI2C_SendByte(uint8_t Byte) { for (uint8_t i = 0; i < 8; i++) { MyI2C_W_SDA(Byte & (0x80 >> i)); // 高位先发 delay_us(2); MyI2C_W_SCL(1); delay_us(5); MyI2C_W_SCL(0); } } // 其他函数实现类似,需添加延确保序正确 ``` - **主函数示例**:驱动 OLED 屏(基于用户实践[^2]) ```c #include "myiic.h" #include "oled.h" // 假设 OLED 库已移植 int main(void) { SYSCFG_DL_init(); MyI2C_Init(); // 初始化软件 I2C // OLED 初始化序列 MyI2C_Start(); MyI2C_SendByte(0x78); // OLED 地址 + 写位 MyI2C_SendAck(1); // 发送 ACK // ... 发送更多命令 MyI2C_Stop(); while (1) { OLED_DisplayString("Hello I2C!"); // 调用 OLED 显示函数 } } ``` 3. **解决常见问题**: - **引脚冲突问题**:如引用[^2]所述,如果同使用多个软件 I2C 设备(如 OLED MPU6050),可能因开漏输出限制导致失败。解决方案: - 共享 SCL/SDA 引脚:将多个从设备连接到同一组 I2C 引脚,通过地址区分。 - 改用硬件 I2C:优先使用内置控制器。 - 示例:在 MPU6050 项目中复用 OLED 的引脚,只需修改引脚定义即可[^2]。 - **函数命名冲突**:软件 I2C 函数名(如 `I2C_WaitAck`)可能与 SDK 冲突。重命名函数或使用命名空间解决[^2]。 --- #### 步骤 4: 调试与测试 - **调试工具**:使用逻辑分析仪或示波器检查 SCL/SDA 波形,确保序正确(起始/停止信号、ACK 响应)。 - **常见错误**: - 无响应:检查上拉电阻、地址设置(7 位地址需左移 1 位)。 - 总线冲突:确保同一间只有一个主设备。 - **性能优化**:硬件 I2C 适合高速应用;软件 I2C 可通过减少延提升速度,但需测试稳定性。 --- #### 总结 在立创· MSPM0G3507 开发板上使用 I2C 接口- **推荐硬件 I2C**:高效稳定,利用 SDK SysConfig 简化配置。 - **软件 I2C 备用**:灵活但需注意开漏输出限制,最多两个引脚[^2]。 - 完整代码示例可参考立创官方资源或用户分享项目[^2][^4]。实践中,优先测试硬件 I2C 以规避硬件限制问题。 如需更多帮助,请访问 [立创开发板技术文档中心](https://wiki.lckfb.com)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

bug菌¹

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

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

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

打赏作者

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

抵扣说明:

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

余额充值