嵌入式arm学习总结(三)--IIC 基于AT24C02

STC12C5A60S2_HX711驱动 STC12C5A60S2的HX711驱动 阅读详情


1.IIC---SDA、SCL
IIC协议  发明者  Philips公司   通过IIC芯片收取版权税
近距离通信
标准模式  100KBIT/s
快速模式 400K    常用   S3C2440使用 
高速模式 3.4M  
上拉电阻  10K    如果速度越快,上拉电阻越小,增加驱动能力


2.IIC读写过程

IIC读过程:
1)开始
2)写芯片地址
3)写芯片内部地址
4)将写变成读
5)读数据
6)结束

IIC写过程
1)开始
2)写芯片地址
3)写芯片内部地址
4)写数据
5)结束


AT24c02芯片  它的芯片地址为 1010 a2,a1,a0,R/w      a2,a1,a0硬件接地
                            0xa0
                            1010 1110  = 0xae


AT24C02的操作模式:

对AT24C02的写模式: 
1).字节写模式:可进行随机写操作,每次写一字节,且每次都要发送从机地址和从机内部地址,写完一字节数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号
2).页写  模式:每次写一页,每页8个字节,每写一页都要写从机地址和从机内部地址(必须为8的倍数),
  如果写超过8个字节,会在页内进行循环写(即循环到当前页的第一字节开始写),覆盖之前写的数据。写完一页数据后回应一个ACK信号给MCU,MCU发送一个Stop停止信号


对AT24C02的读模式:
1).随机读模式:可进行随机读操作,每次读一字节,且每次都要发送从机地址和从机内部地址,读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号
2).当前地址读模式:读一个字节,需要发送从机地址,不用发送从机内部地址,
  而是继续接着当前最后操作的从机内部地址进行读(在没有断电的情况下),读完一个字节数据后,MCU不再发送ACK信号,而是直接发送一个Stop信号
3).顺序读模式:发送从机地址和随机内部地址(也可以是当前从机内部地址),进行顺序读操作,当收到MCU的Stop信号后才停止读。
  如果读取的数据长度超过范围,会循环到整个Memory的第一页的第一个字节进行读(注意:在写数据时超过范围只是会循环到当前页的第一字节)。
具体详情可以参考AT24C02的DataSheet

嵌入式ARM架构学习9——IIC 写位。 阅读详情

相关推荐

S3C2440微处理器实现对AT24C08A EEPROM的IIC通信实验

S3C2440是一款广泛应用于嵌入式系统的高性能微处理器,它由韩国三星公司设计。该处理器集成了丰富的外设接口,IIC(Inter-Integrated Circuit)接口便是其中之一。IIC接口因其低成本、高效率的串行通信能力,在消费电子产品中被广泛应用。它支持多主机系统,允许连接多达128个从设备,每个设备都可以有一个独立的地址。

weixin_36078669的博客 877

STM32F103C8T6驱动HX711称重模块 在OLED屏上(4针IIC)显示

HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的 24 位 A/D 转换器芯片。与同类型其它芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其它同类型芯片所需要的外围电路,具有集成度高、响应速度快、抗干扰性强等优点。降低了电子秤的整机成本,提高了整机的性能和可靠性。该芯片与后端 MCU 芯片的接口和编程非常简单,所有控制信号由管脚驱动,无需对芯片内部的寄存器编程。输入选择开关可任意选取通道 A 或通道 B,与其内部的低噪声可编程放大器相连。

优信电子的博客 5305

STM32F030 IIC HX711 AT24C02 程序

基于STM32F030的HX711,IIC,AT24C02程序,适合初学者。

关于adrduino HX711库的解析

资料在这里:链接:https://pan.baidu.com/s/1a3lbToJZKTeBq6lbU9SRCg 提取码:1234 实验室一个hx711称重模块,搞了一下,不稳定,所以解析一下代码: #ifndef __HX711__H__ #define __HX711__H__ #include <Arduino.h> #define HX711_SCK 2 //设置2号引脚发送时钟信号 #define HX711_DT 3 //设置3号引脚接收数据信号 exter

阿蛋的博客 4465

Arduino在oled12864(4线IIC总线)实现电子称hx711和红外测距

用Arduino在OLED12864上实现电子秤和红外测距。液晶用的是IIC总线,4线。电子秤模块为hx711,文档里有库文件。 测距为红外测距,模块为夏普的sharp0a41sk。

HX711-stm32f407

本资源主要是使用STM32-F407配置引脚通过HX711压力传感器模块进行测量物体重量,直接可以使用的,本人自己写的,可以看我的博客,有实际的效果图。

E2PROM(AT24C系列)的IIC通信底层原理

iic与eeprom通信 # include"reg51.h" # include"i2c.h" //单片机是主机,AT24C02芯片是从机,其中AT24C02芯片的SCL和SDA //已与硬件连接单片机管脚P21和P20 typedef unsigned int u16; //typedef unsigned char u8; u8 dat; u...

SUR0608的博客 4261

AT24C02驱动程序(I2C串行总线的组成及工作原理)

基于IIC总线的AT24C02驱动程序详解

(imx6ull)linux系统驱动hx711模块

基于imx6ull实现hx711驱动,实现秤的简单功能

dclfriend的博客 1672

嵌入式系统/ARM技术中的基于Keil C的AT24C02串行E2PROM的编程

AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2.5~5.5 V)、擦写次数多(大于10 000次)、写入速度快(小于10 ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。 1 AT24C02的引脚功能 AT24C02引脚如图1所示。 他的的1、2、3脚是3根地址线,用于确定芯片的硬件地址。第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这根双向I2C总线串

PCB布线避坑指南:晶振布局的5个致命错误(附正确示例图)

本文深入解析PCB布线中晶振布局的5个致命错误,包括底层布线、电容布局、地平面处理等关键问题,并提供实战解决方案。通过真实案例和量化数据,帮助硬件开发者避免常见陷阱,提升电路稳定性和性能。特别针对晶振这一高敏感元件,给出布线参数黄金法则和三维避让原则。

weixin_29215391的博客 428

IIC通信驱动EEPROM,AT24C02硬件存储器编程(2)

存储器在嵌入式物联网开发中是非常常见的,可以说是缺一不可的组成部分。 因此在对AT24C02进行编程驱动时,有必要先了解一下存储器的基本知识,这有助于对AT24C02的进一步了解,并且在一些公司的笔试或者面试时会进行基本的存储器知识考察。本文以IIC为基础,对IIC进行设备硬件驱动说明。

weixin_49337111的博客 1809

静止无功补偿SVG的基本控制原理

上图是自励单变量控制框图,基本控制方式为,采集计算得到负载无功电流和SVG输出的无功电流的差值,经过PI调节作为功率角δ和固定的调制深度λ和调制波,经过PWM调制形成开关信号驱动SVG的功率电路。该控制方式使保持调制深度λ(即SVG电压的幅度)不变,通过调整δ来调整直流电压和无功,跟踪输出无功功率,直流电压就会大幅度随动,无功相应速度较慢。SVG通常有他励方式和自励方式,他励方式需要提供外部的直流电源,自励方式通过电网输出有功功率至SVG建立SVG的直流电压。δ为Us和Uc之间的相角差。

weixin_42668920的博客 1989

ARM裸机开发:IIC、AT24C02

如果地址匹配成功,从设备会在接收到主设备发送的最后一位数据后的下一个时钟周期,通过将 SDA 线拉低来发送应答信号(ACK),表示自己已准备好进行后续的数据传输。1.发送地址:起始信号之后,主设备通过 SDA 线发送 7 位或 10 位的从设备地址(取决于 I2C 协议版本,7 位地址更为常见),并且在第 8 位(7 位地址时)或第 11 位(10 位地址时)发送读写标志位(0 表示写操作,1 表示读操作)。1.作用:通知总线上的从设备,主设备将开始一次通信,准备接收主设备发送的设备地址等信息。

2501_91498265的博客 1322

别再到处找包了!Keil5芯片支持包(Pack)最全管理指南:安装、更新、迁移与离线备份

本文详细解析了Keil5芯片支持包(Pack)的全生命周期管理,包括安装、更新、迁移与离线备份的工程化解决方案。针对STM32F10x等常见芯片,提供了高效获取Pack的策略、版本管理技巧及团队协作方案,帮助开发者解决常见的'Device Family Pack missing'等问题,提升嵌入式开发效率。

weixin_28729205的博客 540

2019年上交电院计算机直博保研经历

本人选报的是上交六月一日在武汉举办的直博选拔,五月三十一日到达酒店,地点在武汉大学旁边(PS:上交是不管住宿、来回车票的,~划重点~包括夏令营),入住后当然是紧张的准备英语面试等等内容了,当天我是排在了下午面试,感觉还很好,上午可以多睡一会,最好能够去踩踩点上午,然后下午面试一定要早去,说是一点开始,但是老师十二点半就开始让学生进去了,有一个同学排在第二个,但是当时叫到他时还不到一点,没到,最后据...

LifeMaker的博客 4893

mini2440----keil for AMR之IIC读写EEPROM(AT24C08)

文章大纲: 一:EEPROM芯片介绍(包括各种读写的时序与管脚定义) 二:S3C2440中对于IIC需要配置的寄存器 三:IIC成功读写EEPROM的程序(光盘的那个IIC读写程序真心对初学者不好理解)   一:EEPROM芯片介绍 在这里分析AT24C02A/AT24C04A/AT24C08A,对于其他不同型号的EEPROM芯片要根据具体手册进行分析。他们的大小分别是2K(256*8

草根聪的生活 7057

S32的进阶之路->3,S32DS新建/删除/导入工程

右击工程名,点击Delect进行工程删除。选中Delect project contents on disk则会彻底删除工程,不选中Delect project contents on disk工程文件会保存在工作空间中。在Improt Projects中选择工程所在文件夹,选中所需要导入的工程,勾选Copy projects into workspace。选中目标示例工程,点击Finish,完成创建工程。导入已有工程,右击右击Project Explorer空白处,选择Import。

LC_8575的博客 2226

探索STM32与AT24C02的完美结合:模拟IIC读写实践指南

探索STM32与AT24C02的完美结合:模拟IIC读写实践指南 【下载地址】STM32模拟IIC读写24C02程序代码分享 本项目旨在提供一个完整的示例,展示如何使用STM32单片机通过模拟IIC协议实现对AT24C02 EEPROM存储器的读写操作。对于想要在STM32平台上进行IIC通信实践的开发者来说,这是一个非...

gitblog_06614的博客 363

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 675

C#与天文观测:Celestia模拟星空的奇幻之旅

Celestia就像一艘穿梭在星海中的小飞船,带领我们遨游宇宙。C#则是这艘飞船的智能导航系统,用代码指挥它飞向任何我们向往的星球或星系。首先,下载并安装Celestia,熟悉其基本操作和功能。创建一个星空目标列表,包括不同的恒星、行星和星系。// 示例:定义观察目标列表new SpaceObject("太阳"),new SpaceObject("月球"),new SpaceObject("火星")

java专栏 1456

手把手教你用STM32 HAL库驱动AT24C02(IIC协议实战)

本文提供了一份基于STM32 HAL库驱动AT24C02 EEPROM的实战指南。通过软件模拟IIC通信协议,详细讲解了从GPIO配置、时序模拟到器件读写封装的完整流程,并分享了深度调试技巧与常见问题排查方法,帮助开发者快速实现稳定可靠的参数存储功能。

o5p6q的博客 667

《囚徒健身》 六艺,十式

文章目录《囚徒健身》 六艺,十式1、六艺,十式2、优缺点3、手臂和上半身 《囚徒健身》 六艺,十式 1、六艺,十式 1、俯卧撑: 2、深蹲: 3、举腿: 4、引体向上: 5、桥: 6、倒立撑: 十式就是每个动作分拆为十个不同的动作等级,进行训练 每一式里面,又根据做的组数和个数,分成三层,初级,中级,高级 依次循序渐进,每完成上一个动作的高级,则向下一个动作前进 2、优缺点 优点 : 六个动作都是很常见的,日常的动作,不太需要依赖什么器械,随时随地都可以练习,很方便 这些动作可以覆盖到全身大部分

简简单单Onlinezuozuo 4564

手把手教你用STM32CubeMX HAL库驱动AT24C02,软件IIC和硬件IIC代码都给你准备好了

本文详细介绍了如何使用STM32CubeMX HAL库驱动AT24C02存储芯片,涵盖硬件IIC和软件IIC两种实现方案。通过具体的代码示例和配置步骤,帮助开发者快速掌握I2C通信技术,解决实际项目中的存储需求。文章还对比了两种方案的性能差异,提供了常见问题排查方法。

weixin_30819163的博客 503

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

at91sam7x256之IIC(TWI)实验_PCF8563_AT24C02

I2C总线是由Philips公司开发的2线式串行总线,由于其简单、高效、互联成本小而被广泛地用于微控制器与外围设备的连接。AT91SAM7X256是Atmel公司于2005年推出的基于ARM7的工业级芯片,他以体积小、功耗低、连接方式广泛、处理资源丰富、控制灵活等特点受到嵌入式领域开发人员的重视。本文介绍AT91SAM7X256的I2C控制器TWI接口(two-wired interface)

xjq2003的专栏 3824

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

华大HC32L1700模拟IIC读写AT24c02教程及资源

华大HC32L1700模拟IIC读写AT24c02教程及资源 去发现同类优质开源项目:https://gitcode.com/ 概述 本仓库提供了针对华大HC32L1700微控制器的模拟IIC通信示例代码,特别适用于需要与AT24c02 EEPROM芯片进行通信的项目。AT24c02是一种常用的非易失性存储器,广泛应用于各种嵌入式系统中存储配置信息或小量数据。 资源详情 资源名称:华大HC32L...

gitblog_09720的博客 444

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: 嵌入式arm学习总结(二)--arm相关知识
下一篇: 嵌入式arm学习总结(四)--LCD
杨毅
博客等级 码龄14年 26粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值