了解SPI总线CAN控制器 MCP2515配置 一文即可

在树莓派上使用基于MCP2515的CAN总线模块 本文介绍如何在树莓派上配置CAN总线模块MCP2515,并使用基于SocketCAN的工具Can-utils实现CAN消息的收发。 MCP2515概述: Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。 该器件主要由三个部分组成: 1. CAN 模块,包括CAN 协议引擎、验收滤波寄存 器、验收屏蔽寄存器、发送和接收缓冲器。 2. 用于配置该器件及其运行的控制逻辑和寄存器。 3. 阅读详情
AI摘要

本文介绍了如何使用MCP2515通过SPI扩展CAN通信,涉及硬件连接、芯片工作模式、操作指令、错误检测以及初始化配置。重点讲解了波特率设置、发送与接收配置,并提到了中断和错误处理机制。

 1.引言

最近工作中遇到需要6路CAN通信的情况,单片机自带的4路已不满足实际需求,故采用了SPI总线的CAN控制器芯片MCP2515,通过SPI通信的CAN扩展芯片最高可实现1Mbps的遵循CAN 2.0B的协议通信,配置起来也比较繁琐,故写诞生了这篇文章。本篇中仅对基础功能进行测试,如有疑问可留言交流或自行查看芯片手册。

   2.硬件连接

由于该芯片主要起到SPI转CAN控制器的效果,还需搭配CAN收发器才能进行正常的CAN通信,这里采用的是一款国产芯片,川土微电子公司的IF1042VS,也可选用其他收发器,保证畅通即可。

 3.芯片详情

3.1 SPI接口

MCP2515支持最高10MHz的SPI通信,可直接与微控制器上的SPI外设连接,并支持模式0和模式3,遵从SPI协议,可通过CS引脚片选的下拉开启通信;同时应注意,在传输另一个指令前应将片选置高后再拉低。

3.2 工作模式

MCP2515有5种工作模式,可通过CANCTRL寄存器的REQOP设置所需模式,要注意直到所有挂起的消息传输完成后,模式才会实际更改。通过CANSTAT寄存器的OPMODE可读取当前模式,建议在模式更改后再读取一下CANSTAT寄存器,以保证写入成功并进入预定模式。

1)配置模式:芯片在激活前必须首先进行初始化。上电、使用RESET引脚,或更改CANCTRL寄存器的REQOP<2.0>等均可进入配置模式,以下寄存器只有在配置模式下才能被更改。

标号名称功能
1CNF1, CNF2, CNF3波特率配置
2TXRTSCTRL发送引脚配置
3Filter registers过滤器配置
4Mask registers掩码配置

2)睡眠模式:MCP2515具有内部睡眠模式,用于最大限度地减少设备的当前消耗。即使MCP2515处于睡眠模式,SPI接口也会保持活动状态以便读取。更改CANCTRL寄存器可进入睡眠模式,在写入寄存器后应进行读取,以确保芯片进入睡眠模式。

>>睡眠唤醒:睡眠模式下,可通过CAN总线唤醒或通过SPI切换模式。通常情况下,CAN总线唤醒为常见用法,需要配置CANINTE寄存器开启唤醒中断,当接收到RXCAN引脚上的电平变化,导致从睡眠模式唤醒的报文及在唤醒中接收到的报文将被忽略,同时芯片被唤醒,INT引脚能捕捉到下降沿跳变,MCP2515会自动进入仅监听模式,此时应手动设置芯片为正常模式。

3)仅监听模式:仅监听模式使MCP2515 可以接收包括错误报文在内的所有报文。这种模式可用于总线监视应用或热插拔状况下的波特率检测。

4)环回模式:环回模式允许器件内部的发送缓冲器和接收缓冲器之间进行报文的自发自收,而无需通过 CAN 总线。此模式可用于系统开发和测试。

5)正常模式:该模式为 MCP2515 的标准工作模式。器件处于此模式下,会主动监视总线上的所有报文,并产生确认位和错误帧等。只有在正常模式下,MCP2515才能在 CAN总线上进行报文的传输。

3.3 操作指令

在MCP2515中,SPI发送的首个字节即为操作指令,下图为操作指令集。

1)复位指令:重置寄存器初始化,使得芯片进入配置模式;建议在初始化的第一步执行本指令。

2)读指令:将CS引脚拉低后,向MCP2515依次发送读指令和 8 位地址码, MCP2515 会将指定地址寄存器中的数据通过 SO引脚移出。每一数据字节移出后,器件内部的地址指针将自动加一以指向下一个地址。因此,通过持续提供时钟脉冲,可以对下一个连续地址寄存器进行读操作。通过该方法可以顺序读取任意个连续地址寄存器中的数据。通过拉高CS引脚电平可以结束读操作。

 3)读接收缓冲区指令:读取接收信息的常用指令,与读指令相比,省略了一个字节的地址位,同时会在CS引脚拉高后自动清零接收标志位(CANINTF.RXnIF),不用手动执行清零指令,强烈建议在读取接收缓冲区数据时使用本指令。

 4)写指令:将CS引脚拉低后,向MCP2515依次发送写指令、地址码和至少一个字节的数据(如果是多个数据,其地址是连续的)。

 5)装载发送缓冲区指令:和读取接收缓冲区类似,该指令也省略了一个字节的地址位,可以更快速的写入发送帧的标志ID、拓展ID、DLC和数据帧,同样强烈建议使用该指令装载发送帧。

 6)请求发送指令:使用RTS命令可以启动一个或多个发送缓冲器的报文发送,该命令的bit3-bit0显示了哪些发送缓冲器被使能发送,该命令会将缓冲器对应的TxBnCTRL.TXREQ 位置1;如果发送的RTS命令中nnn =000,将忽略该命令。

7)位操作指令:该指令允许对寄存器的指定位进行置“1”或清零操作,在片选拉低后,以此发送位操作指令、寄存器地址、掩码和数据码,其中掩码位为“1”的允许进行更改,“0”则不允许更改;对于允许更改的位,数据码即为寄存器将被修改的目标码。举例如下:

 >>注意:并非所有寄存器均支持位操作指令,只有标灰色的寄存器可进行位操作。

 8)读状态指令:读状态指令允许单条指令访问常用的报文接收和发送状态位。

9)RX状态指令:RX 状态指令用于快速确定与报文和报文类型(标准帧、扩展帧或远程帧)相匹配的过滤器。命令字节发送后,控制器会返回包含状态信息的 8 位数据。

3.4 错误检测

 MCP2515遵循了了CAN协议的错误检测机制,以下将分别展开:

1)CRC校验错误:使用循环冗余校验(CRC),发送器为从帧开始到数据字段结束的位序列计算特殊校验位。这个CRC序列在CRC字段中传输,接收节点也使用相同的公式计算CRC序列,并与接收到的序列进行比较。如果检测到不匹配,则发生CRC错误并生成错误帧,并重复发送。

2)ACK应答错误:在消息的ACK字段中,发送器检查其中是否包含显性位。如果没有,则认为没有其他节点正确接收到该帧。已发生确认错误,将生成错误帧,并重复发送。

3)格式错误:如果节点在四个段,包括帧结束、帧间空间、确认分隔符或CRC分隔符中的一个段检测到主导位,则发生格式错误并生成错误帧,并重复发送。

4)位错误:如果发送器检测到与其发送的相反的位电平(即,发送显性并检测到隐性,或发送隐性并检测到显性),则发生位错误。

>>例外情况:在仲裁字段和确认槽中,如果发送方发送隐性位,检测到显性位,则不会产生误码,因为正在进行正常仲裁。

5)填充错误:如果在帧开始和CRC分隔符之间检测到6个具有相同极性的连续位,则违反了位填充规则。发生一个填充错误并生成一个错误帧,并重复发送。

3.4.1 错误状态:

检测到的错误通过错误帧通知给所有其他节点,错误消息的传输被终止,报文帧被尽快重复。根据内部错误计数器的值,MCP2515包含两个错误计数器:接收错误计数器(REC)和发送错误计数器(TEC),这些计数器根据CAN总线规范递增/递减。每个CAN节点处于三种错误状态中的一种:

1. Error-active:节点可以不受任何限制地传输消息和活动错误帧(由主导位组成)的通常状态

    如果两个错误计数器都低于128,则MCP2515为Error-active

2. Error-passive:可以传输消息和被动错误帧(由隐性位组成)

    如果至少有一个错误计数器等于或超过128,则为Error-passive

3. Bus-off(发送方):消息既不能接收也不能发送

    如果TEC超过255的总线关闭限制,它将进入总线关闭。设备保持这种状态,直到接收到        总线断开恢复序列。总线断开恢复序列由128个连续的11位隐性位组成

MCP2515的当前错误模式可以由MCU通过EFLG寄存器读取,此外,如果至少有一个错误计数器等于或超过错误警告限制96,则设置错误状态警告标志位(EFLG:EWARN)。如果两个错误计数器都小于错误警告限制,则复位EWARN。

4.初始化配置

4.1 复位

MCP2515上电时自动复位,但手册中建议在初始化之前进行复位操作,可通过两种方法进行复位:1)硬件复位:拉低RESET引脚;2)软件复位:执行SPI复位指令。

博主这里复位后分别读取了CANCTRL和 CANSTAT寄存器,在复位并进入配置模式时,CANCTRL为0x87,CANSTAT为0x80。两个寄存器的位定义如下:

 4.2 波特率设置

 CAN在通信时,总线上的波特率必须保持一致,MCP2515使用数字锁相环DPLL,将每个位时间分解成由最小时间周期组成的多个段,这个最小时间周期称为时间量(TQ),改变CNF1、CNF2、CNF3寄存器,可以达到设定波特率的目的,其中Normal Bit Rate为通用比特率,以下简称NBR。

NBR = f_{bit} = \frac{1\frac{}{}}{t_{bit}}


t_{bit} = t_{SyncSeg} + t_{PropSeg} + t_{PS1} + t_{PS2}

t_{SyncSeg} = 1T_{Q},t_{PropSeg} =1-8T_{Q},t_{PS1}=1-8T_{Q},t_{PS2}=2-8T_{Q}

T_{Q}=\frac{2(BPR+1)}{F_{OSC}}

且需要满足以下条件:

PropSeg + PS1 \geqslant PS2, PropSeg + PS1 \geqslant T_{DELAY}\left ( 1-2T_{Q} \right ),

PS2>SJW

通过以上参数可知,结合电路中的晶振频率为8MHz,且位时间大于等于5个TQ,因此这里给出在500kbps下的波特率配置参数:SyncSeg = 1TQ,PropSeg = 2TQ,PS1 = 3TQ,PS2 = 2TQ,BPR = 0,SJW = 0。相关配置寄存器如下:

4.3 发送配置

 在MCP2515中,共有3个可配置优先级的发送缓冲区(注意次优先级是芯片内部发送的优先顺序,与CAN总线仲裁优先级应进行区分),在初始化时应至少配置所需缓冲区的发送优先级、CAN-ID和数据帧长度DLC,这里给出一种配置方式。

>>TXRTSCTRL :使能/失能TXnRTS引脚的下降沿发送请求

>>TXBnCTRL :配置发送缓冲区发送优先级

>>TXBnDLC:配置远程帧或数据帧及帧长度

>>使用装载缓冲区指令或通过TXBnSIDH、TXBnSIDL、TXBnEID8、TXBnEID0、                    TXBnDm寄存器写入写入CAN-ID、数据帧

>>翻转TXnRTS引脚或使用RTS请求发送指令

其中,n为0-2分别对应3个发送缓冲区,m为0-7分别对应8个字节的数据帧

 4.4 接收配置

在MCP2515中,有两个完整的接收缓冲区RXB0和RXB1,和一个独立的消息装载缓冲区MAB,在收到报文后首先会进入MAB,在满足过滤器条件后才允许进入RXB0或RXB1。

1)优先级及过滤器

RXB0是拥有更高优先级的接收缓冲区,具有一个掩码和两个过滤器;RXB1为较低优先级接收,具有一个掩码和四个过滤器。要启用RXB0的滤波器,必须将RXB0CTRL.BUKT位置“1”,此时滤波器0-1对于RXB0是可用的;在RXB0CTRL.BUKT位置“1”的状态下,滤波器0-5对于RXB1是可用的,在RXB0CTRL.BUKT位置“0”的状态下,滤波器2-5对于RXB1是可用的,而RXB0无对应滤波器可供使用。

对于RXBnCTRL寄存器,还可设置RXM <1:0>位选择缓冲区接收的CAN-ID是否允许标准id和扩展id的通过,配合掩码和过滤器可进行更加详细的筛选。掩码和过滤器的真值表如下:

掩码位过滤器位报文ID位接收或拒绝该位
0XX接收
100接收
101拒绝
110拒绝
111接收

2 )接收标志

当消息被移动到任何一个接收缓冲区时,相应的CANINTF.RXnIF位被置“1”。为了允许新的消息被接收到缓冲区,这个位必须被程序手动清除。这个位提供了一个正向的锁定,以确保在MCP2515尝试将一个新消息加载到接收缓冲区之前,咱们的微控制器已经完成了消息处理。

如果CANINTE.RXnIE位置“1”后,将在INT引脚上产生一个中断,以指示已接收到有效消息。此外,如果配置为接收缓冲区满引脚,相关的RXnBF引脚产生低电平,可以在单片机把连接RXnBF引脚的GPIO设置为下降沿触发的外部中断,在收到报文后,将数据帧转移到fifo中,再将标志位CANINTF.RXnIF位清零。

3)配置样例

综上所述,在实际工程中,接收缓冲区RXB0应具有过滤器功能,这里给出配置方式:

>>BFPCTRL:RXBn接收信息可通过 RXnBF 引脚的下降沿获取

>>RXBnCTRL:可接受满足过滤器的标准id和拓展id,BUKT置“1”允许RXB0使用过滤器0-1

>>配置掩码相关寄存器RXMnSIDH、RXMnSIDL、RXMnEID8、RXMnEID0

其中,n为0-1分别对应2个接收缓冲区的掩码,一一对应

>>配置过滤器相关寄存器RXFnSIDH、RXFnSIDL、RXFnEID8、RXFnEID0

其中,n为0-5分别对应6个过滤器

 4.5 中断配置

MCP2515有八个中断源,八个中断源分别为3个发送中断,2个接收中断,1个消息错误中断,1个总线活动中断,一个错误中断。CANINTE寄存器包含了使能各中断源的中断使能位。CANINTF寄存器包含了各中断源的中断标志位。当发生中断时, INT 引脚将被MCP2515拉为低电平, 并保持低电平状态直至MCU清除中断。注意:中断只有在引起相应中断的条件消失后,才会被清除。

在3.2工作模式内提到过睡眠模式和总线唤醒,需要将CANINTE.WAKIE初始化为1;接收中断开启后,可以代替RX0BF和RX1BF引脚,节省两个I/O资源;同时,为实时反馈CAN总线上的错误情况,需要将错误中断使能;实际使用中,可以配置INT引脚为外部中断,在触发后读取CANINTF寄存器查询当前中断源,再进行进一步处理。配置如下:

>>CANINTE:使能中断

>>CANINTF:清零中断标志

MCP 协议知识详解 通过掌握MCP2515与CAN协议,可构建高可靠性的分布式嵌入式系统,适用于复杂环境下的实时通信需求。MCP(Microchip Controller Protocol)通常指与。相关的通信协议,尤其在嵌入式系统中,常见于其。为例,解析其协议核心内容及应用。 阅读详情

相关推荐

树莓派4b+mcp2515实现CAN总线通讯和系统编程(一.配置树莓派CAN总线接口)

树莓派本身是没有CAN通讯能力的,但他有mcp2515模块的驱动,可以通过SPI来控制mcp2515进行CAN的通讯。 本章主要讲,如何使能树莓派的mcp2515驱动,然后用can-utils的工具来测试CAN的通讯。树莓派和mcp2515模块是通过spi进行通讯的,除了spi的4根线mosi、miso、sck、cs,和电源的vcc和gnd,我们还需要连接MCP2515的INT引脚。 树莓派引脚图如下: 树莓派的引脚分布参考:https://pinout.xyz/pinout/ground 连线如下: 树莓

weixin_42968757的博客 1万+

CAN总线系列(二):链路层芯片MCP2515解读

Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。它是CAN协议中数据链路层的芯片。

shijiyingjie的博客 6238

基于C++的CAN总线初始化和MCP2515 SPI配置

CAN总线是一种串行通信协议,最初由博世公司为汽车应用开发。多主结构:CAN总线允许网络中的所有节点平等地访问总线,任何节点都可以在总线上发送和接收数据。高可靠性:CAN总线具有错误检测和纠错功能,能够有效地保证数据传输的可靠性。实时性:CAN总线支持优先级仲裁,保证高优先级消息能够及时传输,适用于实时控制系统。

qq_38334677的博客 1679

MCP2515独立控制器

1 简介: MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持 CAN V2.0B技术规范。该器件能发送和接收标准和扩展数据帧以及远程帧。MCP2515 自带的两个验收屏蔽寄存器和六个验收滤波寄存器可以过滤掉不想要的报文,因此减少了主单片机(MCU)的开销。MCP2515与MCU 的连接是通过业界标准串行外设接口(SearialPeripheral Interface,SPI)来实现的。 2 数据发送: >>器件...

Sangedianzi的博客 1万+

MCP2515 CAN控制器

介绍了MCP2515的寄存器与工作模式。

qq_44385725的博客 1652

基于MCP2515的Linux CAN总线驱动程序设计(一)

1.前言         CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特的设计和适宜的价格而广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制订为国际标准ISO11898,并得到了众多半

leesheen的专栏 4752

MCP2515调试心得

采用 STM32 硬件 SPI 时注意使用软件去控制 NSS 的输出,硬件控制操作 MCP2515 芯片会有问题。在某次项目,使用 STM32 的 MCO 直接输出 8M 的 HSE 连接进 MCP2515 的 OSC1 出现无法驱动的情况,可见很需要加一个。网上大部分的 MCP2515 芯片驱动是发送一个字节,先发送该字节要写入的寄存器地址,这种方式在操作连续地址的多个寄存器时的效率很低。Filter 寄存器的设置也可以采用连续传输的方式实现。

Bin_Watson的博客 5062

基于MCP2515的Linux CAN总线驱动程序设计(二)

1. 前言         CAN(Controller Area Network)总线,即控制器局域网总线,是一种有效支持分布式控制或实时控制的串行通信网络。由于其高性能、高可靠性、及独特的设计和适宜的价格而广泛应用于工业现场控制、智能楼宇、医疗器械、交通工具以及传感器等领域,并已被公认为几种最有前途的现场总线之一。CAN总线规范已经被国际标准化组织制订为国际标准ISO11898,并得到了

leesheen的专栏 3570

mcp2515带spi的can驱动移植总结

转载地址:http://blog.chinaunix.net/uid-25407623-id-4046632.html 最近LZ接公司安排任务,移植一款CAN总线设备Mcp2515。由于在前次任务中有SPI经验,所以在接受任务是主要关注此设备采用SPI接口。所以一直没有关注CAN相关的知识,后续过程中遇到了不少麻烦,走了一些弯路。特把此次移植过程记录整理一下。 CAN总线是一种在汽车上广泛采用...

kunkliu的博客 4912

一文掌握MCP2515:从SPI配置到CAN总线实战

本文详细解析了MCP2515独立CAN控制器的SPI配置与CAN总线实战应用。从硬件连接到SPI通信注意事项,再到工作模式切换与CAN通信核心配置,提供了完整的开发指南和优化建议,帮助开发者快速掌握MCP2515在车载诊断、工业控制等场景的应用技巧。

weixin_29169899的博客 318

国产DP2515带SPI接口汽车CAN总线控制器芯片兼容替代MCP2515/MCP2515-I/ST

DP2515,MCP2515

weixin_60534907的博客 1603

MCP2515控制器实现农机CAN总线诊断

本文介绍如何利用低成本MCP2515芯片搭建农机CAN总线诊断工具,通过SPI接口与MCU连接,结合J1939协议解析发动机故障码等关键数据,实现故障定位、远程监控和预测性维护,适用于多种农业机械电子系统。

weixin_35753291的博客 1024

MCP2515 CAN控制器试验程序实战

MCP2515 是一款独立的 CAN(Controller Area Network) 控制器,广泛应用于汽车、工业、航空等需要可靠串行通信的领域。它符合CAN 2.0B规范,能够处理所有CAN网络上的数据通信任务,包括数据帧的发送和接收,过滤器设置,以及错误处理等。SPI(Serial Peripheral Interface)协议最初由摩托罗拉公司提出,是一种高速的,全双工,同步的通信总线。它使用一个主设备和多个从设备进行数据传输。

weixin_31869917的博客 1088

spi转can_在树莓派上使用基于MCP2515的CAN总线模块

本文介绍如何在树莓派上配置CAN总线模块MCP2515,并使用基于SocketCAN的工具Can-utils实现CAN消息的收发。MCP2515概述:Microchip 的MCP2515 是一款独立控制器局域网络(Controller Area Network, CAN)协议控制器,完全支持CAN V2.0B 技术规范。该器件主要由三个部分组成:1. CAN 模块,包括CAN 协议引擎、验收滤波寄...

weixin_39729784的博客 1281

STM32F103ZET6通过SPI1外扩MCP2515实现CAN通信的完整工程实战

在现代嵌入式系统中,CAN总线因其高可靠性、强抗干扰能力以及多节点通信特性,广泛应用于工业控制、汽车电子和智能设备中。然而,部分STM32系列芯片如STM32F103ZET6虽具备原生CAN控制器,但在特定场景下仍需外扩独立CAN控制器以增强系统灵活性或实现双CAN网络。本章将深入剖析基于STM32F103ZET6与MCP2515构建的外扩CAN接口系统的整体架构设计,阐述两者协同工作的基本原理。

weixin_36289813的博客 1410

MCP2515中文数据手册

MCP2515中文数据手册

探索CAN总线世界:MCP2515库全面解析

探索CAN总线世界:MCP2515库全面解析 在现代电子工程领域,CAN(Controller Area Network)总线技术因其高可靠性、实时性和抗干扰能力,在汽车、工业自动化等领域得到了广泛应用。今天,我们将深入介绍一个强大的开源项目——MCP2515 CAN Bus Library,它为Arduino开发者提供了一个高效、易用的CAN总线通信解决方案。 项目介绍 MCP2515 CAN ...

gitblog_00689的博客 1113

百度网盘开放平台OAuth 2.0授权全流程解析

本文详细解析了百度网盘开放平台OAuth 2.0授权全流程,包括创建应用、获取凭证、授权码模式详解以及access_token的使用与刷新。通过实际案例和代码示例,帮助开发者快速掌握接口调用技巧,避免常见错误,确保安全高效地接入百度网盘API。

wind6的博客 1266

MCP2515独立CAN控制器协议实现

本文深入讲解MCP2515独立CAN控制器的协议实现,涵盖初始化、波特率配置、数据收发、硬件设计及常见问题调试,适用于无原生CAN外设的MCU系统,是嵌入式CAN通信开发的实用指南。

weixin_42471823的博客 1112

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

StarUML最新版汉化与破解二合一教程:5分钟搞定永久使用

本文提供StarUML最新版的高效使用指南,涵盖从安装到深度定制的全流程优化方案。包括软件获取最佳实践、界面个性化设置、核心建模技巧、团队协作策略及性能优化建议,帮助架构师和开发团队提升UML建模效率。特别推荐版本控制集成和文档自动化输出方案,适用于各类规模的项目开发。

weixin_42530732的博客 450
下一篇: 多通道半桥驱动器 NSD8308
评论 13
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

您猜我猜不猜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值