基于STM32H7的KEIL5 HAL库工程模板搭建实战

[STM32] Keil 创建 HAL 库的工程模板 Keil 创建 HAL 库的工程模板跟着的第7章步骤进行Keil工程的创建。 阅读详情

1. 环境准备与工程目录搭建

在开始STM32H7的HAL库开发之前,我们需要先准备好开发环境。KEIL5 MDK是ST官方推荐的开发工具,配合STM32CubeMX可以快速搭建工程框架。不过今天我要分享的是纯手动搭建的方法,这样能更深入理解HAL库的组成结构。

首先确保你已经安装了KEIL5 MDK和STM32H7的器件支持包(Device Family Pack)。如果没有安装DFP包,在创建工程时就找不到STM32H7系列的芯片型号。我建议直接从KEIL官网下载最新的DFP包,这样可以支持最新的芯片型号。

接下来创建工程目录结构。我在实际项目中习惯使用这样的目录组织方式:

  • CORE:存放启动文件、CMSIS核心文件
  • HALLIB:存放STM32H7xx_HAL_Driver驱动文件
  • USER:存放用户代码,包括main.c、中断处理文件等
  • OBJ:存放编译生成的中间文件
  • SYSTEM:存放系统级驱动(可选,但强烈推荐)

这种目录结构的好处是清晰明了,各个模块职责分明。特别是在团队协作时,大家都能够快速理解项目结构。我在多个商业项目中都采用这种目录组织方式,实践证明非常实用。

2. 创建KEIL工程与芯片选择

打开KEIL5 MDK,点击菜单栏的Project -> New μVision Project,定位到刚才创建的USER目录,将工程命名为Template。这里有个小技巧:工程文件最好放在USER目录下,这样可以让工程文件与源代码文件分开管理,看起来更加整洁。

保存后会弹出芯片选择对话框。这里需要根据你实际使用的STM32H7系列芯片进行选择。比如我使用的是STM32H743VIT6,就选择STM32H743VI系列。如果你使用的是其他型号,一定要选择对应的芯片型号,否则后续编译会出现问题。

选择完芯片后,KEIL会弹出Manage Run-Time Environment对话框。这里我建议直接点击Cancel,因为我们是要手动添加所有需要的文件,这样可以更好地控制工程结构。很多初学者会在这里直接选择需要的组件,但这样KEIL会自动配置很多选项,不利于我们理解底层原理。

3. 关键文件复制与整理

现在开始复制STM32CubeH7固件包中的关键文件。首先找到你的STM32CubeH7安装目录,我使用的是V1.2.0版本,你的版本可能有所不同,但基本结构是相似的。

进入Drivers目录,将STM32H7xx_HAL_Driver整个文件夹复制到我们工程的HALLIB目录下。复制完成后,只需要保留Src和Inc两个文件夹,其他文件都可以删除。Src文件夹存放的是所有外设的.c源文件,Inc文件夹存放的是对应的.h头文件。每个外设都有独立的源文件和头文件,比如gpio.c/gpio.h、usart.c/usart.h等。

接下来复制启动文件。进入CMSIS/Device/ST/STM32H7xx/Source/Templates/arm目录,找到对应的启动文件。对于STM32H743系列,文件名为startup_stm32h743xx.s。将这个文件复制到CORE目录下。启动文件是用汇编语言编写的,包含了芯片上电后的初始化和中断向量表等重要内容。

然后复制CMSIS核心文件。进入CMSIS/Include目录,复制cmsis_armcc.h、core_cm7.h、cmsis_armclang.h、cmsis_compiler.h这四个头文件到CORE目录。这些文件是ARM Cortex-M7内核的核心文件,提供了内核相关的寄存器定义和内核函数。

最后复制设备特定的头文件。进入CMSIS/Device/ST/STM32H7xx/Include目录,将stm32h7xx.h、system_stm32h7xx.h和stm32h743xx.h复制到USER目录。这三个文件非常重要,包含了芯片外设的寄存器定义和系统初始化函数。

4. 用户代码文件配置

现在我们需要复制模板代码文件。进入STM32CubeH7包的Projects目录,找到对应的开发板模板,我使用的是STM32H743I_EVAL开发板的模板。进入Templates目录,将Src和Inc文件夹中的文件复制到USER目录。

从Inc文件夹复制stm32h7xx_it.h、stm32h7xx_hal_conf.h和main.h到USER目录。从Src文件夹复制system_stm32h7xx.c、stm32h7xx_it.c、stm32h7xx_hal_msp.c和main.c到USER目录。

这里特别说明一下各个文件的作用:

  • main.c:主程序文件,包含main函数入口
  • stm32h7xx_it.c:中断服务函数文件
  • stm32h7xx_hal_msp.c:HAL库的MCU支持包初始化文件
  • system_stm32h7xx.c:系统时钟配置文件
  • stm32h7xx_hal_conf.h:HAL库配置文件,可以在这里开启或关闭特定外设

在实际项目中,我通常会根据需求修改stm32h7xx_hal_conf.h文件,只开启需要的外设,这样可以减少代码体积和编译时间。比如如果项目只用到了GPIO和USART,就可以只定义HAL_GPIO_MODULE_ENABLED和HAL_USART_MODULE_ENABLED。

5. 添加系统支持文件(可选但推荐)

虽然这不是必须的,但我强烈建议添加SYSTEM文件夹。这个文件夹包含了一些非常实用的系统级驱动,比如精确延时函数、串口打印调试、系统时钟配置等。这些函数可以大大加快开发进度,特别是在调试阶段。

SYSTEM文件夹通常包含三个子文件夹:sys、usart和delay。每个子文件夹都包含对应的.c源文件和.h头文件。将这些文件复制到工程的SYSTEM目录下,并在KEIL工程中建立对应的分组。

我在实际项目中发现,使用SYSTEM文件夹中的延时函数比直接使用HAL库的延时函数更加精确,特别是在需要微秒级延时的场合。串口打印函数也做了很好的封装,支持printf重定向,调试起来非常方便。

6. KEIL工程分组与文件添加

现在开始在KEIL工程中添加文件分组和对应的文件。右键点击Target1,选择Manage Project Items。首先将Target名称修改为Template,然后在Groups栏中删除默认的Source Group1,新建四个分组:USER、SYSTEM、CORE和HALLIB。

接下来为每个分组添加对应的文件:

HALLIB分组:添加HALLIB/STM32H7xx_HAL_Driver/Src目录下的所有.c文件。这里有个小技巧:如果你确定项目只会用到部分外设,可以只添加需要的驱动文件,这样可以减少编译时间和代码体积。但对于工程模板,我建议全部添加,方便后续开发。

CORE分组:添加CORE目录下的startup_stm32h743xx.s启动文件。注意添加时要选择文件类型为All files,否则看不到.s文件。不需要添加.h头文件,头文件是通过包含路径来引用的。

USER分组:添加USER目录下的main.c、stm32h7xx_it.c、stm32h7xx_hal_msp.c和system_stm32h7xx.c文件。

SYSTEM分组:添加SYSTEM目录下各个子文件夹中的.c文件,包括sys.c、usart.c和delay.c。

添加文件时要注意文件类型的选择。对于.s汇编文件,需要选择All files才能看到。添加完成后点击OK,回到主界面。这时候工程中应该已经显示了所有添加的文件。

7. 头文件路径配置

头文件路径配置是非常关键的一步,如果配置不正确,编译时会出现找不到头文件的错误。点击魔术棒图标进入Options for Target对话框,选择C/C++选项卡,在Include Paths栏中添加以下路径:

  • .\CORE
  • .\USER
  • .\HALLIB\STM32H7xx_HAL_Driver\Inc
  • .\SYSTEM\delay
  • .\SYSTEM\sys
  • .\SYSTEM\usart

这里有个容易出错的地方:HAL库的头文件路径是.\HALLIB\STM32H7xx_HAL_Driver\Inc,而不是Src目录。很多初学者会错误地添加Src目录,导致编译错误。

添加路径时要注意使用相对路径,这样工程移动到其他位置时也不会出现路径问题。我建议使用.\开头的相对路径,这样更加灵活。

8. 全局宏定义与编译设置

在C/C++选项卡的Define输入框中添加两个重要的宏定义:USE_HAL_DRIVER和STM32H743xx。这两个宏定义用逗号隔开,不要加空格。

USE_HAL_DRIVER宏告诉编译器我们要使用HAL库,这会启用HAL库的相关定义和函数。STM32H743xx宏定义了具体的芯片型号,确保正确的寄存器定义被引用。

接下来配置输出选项。选择Output选项卡,点击"Select Folder for Objects..."按钮,选择OBJ目录作为中间文件的输出目录。这样编译生成的.o文件都会存放在OBJ目录中,保持工程目录的整洁。

勾选"Create HEX File"选项,这样编译后会生成HEX格式的烧录文件。我不建议勾选"Browse Information"选项,虽然它可以提供更好的代码导航功能,但会显著增加编译时间,特别是在大型项目中。

9. 编译调试与常见问题解决

现在点击编译按钮开始编译工程。第一次编译可能需要一些时间,因为要编译所有的HAL库文件。如果一切配置正确,编译应该能够顺利完成,显示0 Error(s), 0 Warning(s)。

但实际情况中,经常会遇到各种编译错误。我总结了一些常见问题及解决方法:

问题1:找不到头文件 这通常是因为头文件路径配置不正确。检查Include Paths是否包含了所有必要的路径,特别是HAL库的Inc目录。

问题2:未定义的符号 这可能是由于宏定义没有正确设置。确保在Define中正确添加了USE_HAL_DRIVER和芯片型号的宏定义。

问题3:启动文件错误 检查启动文件是否正确添加,特别是文件类型是否正确。.s文件是汇编文件,需要正确配置。

问题4:链接错误 这可能是由于没有添加必要的库文件。STM32H7系列可能需要额外的数学库,可以在Target选项卡中勾选Use MicroLIB。

如果遇到其他问题,建议仔细阅读错误信息,通常错误信息会指出问题所在。也可以查看KEIL的输出窗口,那里有更详细的编译信息。

10. 工程优化与个性化设置

工程编译通过后,还可以进行一些优化和个性化设置。比如在C/C++选项卡中,可以设置优化等级。对于调试阶段,建议使用-O0优化,这样调试时变量值不会被优化掉。对于发布版本,可以使用-O2或-O3优化以减少代码体积和提高运行速度。

在Debug选项卡中,可以配置调试器设置。我习惯使用ST-LINK调试器,配置为SWD模式,时钟频率设置为4MHz。如果你的调试器支持更高频率,可以适当提高时钟频率以加快下载速度。

在Utilities选项卡中,可以配置烧录设置。勾选"Update Target before Debugging"可以在调试前自动烧录程序。选择正确的调试器,并点击Settings配置Flash Download。对于STM32H7系列,需要添加正确的Flash编程算法。

最后建议定期备份工程模板。我习惯在每次重要修改后都备份一份模板,这样即使后续修改出现问题,也可以快速恢复到之前的版本。也可以根据不同的项目需求,创建多个版本的模板,比如基础模板、带FreeRTOS的模板、带LWIP的模板等。

搭建一个好的工程模板确实需要花费一些时间,但这是非常值得的投资。一个好的模板可以大大提高后续的开发效率,减少重复劳动。我在实际项目中深有体会,一个精心设计的模板至少可以节省30%的开发时间。

STM32F103HAL库学习1——创建工程模板 本章将开始将自己学习STM32hal创建模板的步骤和经验分享给大家,后续将继续更新STM32hal库相关的学习例程,有兴趣的同学可以关注一下。以上就是今天要讲的内容,本文简单创建了STM32hal的工程模板,中间有很多细节需要注意,错一步后续可能会发生报错,出现错误可以重新对照一下看看在哪一步发生的,希望此篇文章能对你学习是STM32hal库有所帮助,如有说错的地方还请批评指正。附代码文件:链接:https://pan.baidu.com/s/1hzCq_nN06fB_h3cj6ShVmQ提取码:zstu。 阅读详情

相关推荐

STM32 HAL库工程手动搭建指南:从零构建Keil5纯净项目模板

在嵌入式开发领域,硬件抽象层(HAL)是连接应用软件与底层硬件的重要桥梁,它通过标准化的接口封装了芯片外设的复杂操作,极大地提升了代码的可移植性和开发效率。其核心原理在于提供了一套统一的API,使得开发者无需深入寄存器细节即可操控硬件。对于STM32开发者而言,掌握HAL库项目的构建原理具有重要价值,这不仅有助于理解编译链配置、文件依赖关系,更是进行深度定制和问题排查的基础。在实际应用场景中,无论是使用STM32CubeMX进行图形化配置,还是进行裸机或RTOS开发,一个结构清晰、手动搭建的纯净工程模板都是

benben 464

【STM32H7】基于CubeMX从零开始搭建的HAL库工程模板(包含串口重定向和DSP库)

前言 此次基本工程使用的芯片为STM32H743IIT6 Keil和CubeMX以及H7硬件支持包自行在网上搜索下载,都下最新版即可。 这里提供一个下载H7硬件支持包的网址:ARM 在这里我们会从零开始(除了下载安装),配置一个完整的方便管理的H7基本工程,下面是基本工程要达到的目标: 1.配置好内

cmdos的专栏 414

STM32HAL库 -- 1.手把手创建HAL库工程模板

该文章主要介绍如何创建基于HAL库的MDK-ARM工程模板,方便以后开发新的项目时,不用再重新创建工程,直接复制本工程即可。笔者使用的STM32开发板是正点原子的精英板,该开发板使用的MCU型号是STM32F103ZET6,因此创建的工程模板也是基于STM32F103ZE。

qq_30634911的博客 1968

【STM32】 keil新建工程模板

Ⅰ、写在前面 本文使用目前(2016年11月)最新版本Keil(MDK-ARM)V5.21a开发环境、以STM32的处理器为例给大家讲述新建一个软件工程的详细过程。 Keil(MDK-ARM)V4和V5新建软件工程基本一样,本文也适合与V4版本的新建软件工程。 本文使用的处理器是ST公司的STM32F1系列芯片,ST公司其它系列(如:F4等)、其它公司(如:...

C/C++软件工程师、嵌入式软件工程师、物联网研发工程师、C/C++讲师、物联网讲师、嵌入式讲师、鸿蒙讲师---欢迎大家一起交流(私信添加博主微信) 3016

稳健自适应波束形成学习(2):自适应计算对角加载量方法——基于广义线性组合的鲁棒Capon波束形成

对于快拍数相对阵元数较小时,样本协方差矩阵不能很好对协方差矩阵进行估计。常规的对角加载量需要根据经验值或不断手动调整进行测试,没有一个明确的准则和推导。该篇介绍一种自适应计算对角加载量的方法,且能适应快拍数相对阵元数较小时的情况。均匀线阵阵元数:18;载波频率30MHz;通信信号来波方向0°、来波估计偏差0.5°;干扰来波方向30°;通信信号信噪比10dB;干扰信号信噪比60dB。也即在干扰角度生成66dB的零陷,通信信号受到16dB的衰减。

a1uajug的博客 821

Unity3D移动平台简单实现

在电子游戏中移动平台可谓是十分常见的,如平台从一处至另一处的来回移动,或当需要玩家触发机关时,平台浮动并按一定的路线移动至目标处。本文主要是在Unity3D引擎下使用少量脚本实现两点之间来回移动平台的最基本功能,是一种比较简单且好理解的移动平台解决方案。 涉及到的点如下: 平台对象的实现 平台移动路线的设定 处于平台上游戏对象(如:玩家)的相对运动 创建平台控制对象 创建平台实...

长溪木可的博客 4676

使用Keil5建立HAL库项目注意事项

本文摘要:介绍了基于野火教程的STM32开发环境配置步骤。首先建立项目目录结构(User、Project、Libraries、DOC),复制固件库文件到对应位置。然后配置项目文件路径,包括STARTUP、CMSIS、HAL驱动和用户文件。重点说明了魔术棒(Options)的各项配置:Target中勾选Use MicroLIB并选择编译器版本,Output设置编译输出路径,Debug配置仿真器并勾选Reset and Run以实现自动运行。最后提到这些配置主要指导编译器在链接阶段查找文件的位置。

qq_45960487的博客 445

从零搭建PIC MCU开发环境:MPLAB IDE与HI-TECH编译器安装破解全攻略

本文详细介绍了从零搭建PIC MCU开发环境的完整流程,包括MPLAB IDE 8.85的安装配置、HI-TECH C编译器的安装与破解,以及PICkit3编程器的使用技巧。通过清晰的步骤说明和常见问题解决方案,帮助开发者快速搭建稳定的PIC单片机开发环境,适用于PIC16/18系列MCU开发。

weixin_29188997的博客 283

三、使用Keil5新建STM32工程

右键stm32f10x.h-Open document"stm32f10x.h"打开文件后下拉到8296行,这里有一个条件编译,意思是如果你定义了USER_STDPERIPH_DRIVER这个字符串,下面的“#include”语句才有效。#include "stm32f10x_conf.h"条件编译复制该字符串, 打开工程选项进行设置。包含标准外设库,也就是库函数。工程选项Options for Target...

little_Ming_Sun的博客 1万+

CTP接口入门

该文章主要讲什么 这篇文章的面向对象是有一些C++基础,并且想用C++来做程式化交易的同学。 这篇文章可以算是我的程式化学习笔记中的一篇。其中介绍了CTP的简单的使用方式,并且附上了一些代码以及我在试用的时候遇到的一些小坑。 什么是CTP CTP是上海期货推出的一套可供程序调用的交易接口。就好比官方给程序化交易提供了的一个专门的业务窗口。 接口相关文件下载 CTP接口可以在上期...

weizehua的专栏 4万+

Open3D (C++)球旋转算法(BPA)三维建模

球旋转算法用于点云三维建模的C++代码实现。

点云侠的博客 1765

创建基于HAL库的STM32f103C8T6的工程模板

STM32的标准固件库已经停止更新了,取而代之的是HAL库,虽然通过STM32CUBEMX能够轻松建立一个工程,但为了更熟知软件结构而言,还是手动创建一个模板吧。 工具:Keil5,en.stm32cubef1 一、安装软件,下载HAL库 安装Keil软件就不再赘述啦,下面写一下如何下载HAL库~ 首先,进入ST官网……&*¥&¥%%,好了,电梯直达-->链接,当然了...

sanaerqi的博客 9610

【毕设级教程】从0到1实现基于YOLOv8的xView卫星图像目标检测系统(含UI界面,助力遥感智能毕设)

本文基于YOLOv8模型设计了一个面向xView卫星图像的目标检测系统。首先对xView数据集进行了格式转换处理,将原始多边形标注转换为YOLO格式的边界框标注。随后通过配置YOLOv8模型参数完成训练,实现了对卫星图像中建筑、车辆等多类目标的准确识别。为提高系统交互性,采用PyQt开发了可视化界面,支持图像选择、实时检测和结果展示功能。整个系统兼顾学术价值和实用价值,为遥感领域的自动化目标检测提供了可行方案。

m0_64661770的博客 127

KEIL5环境下利用HAL库开发STM32项目_工程搭建方法

本文主要讲述在KEIL5环境下,如何搭建基于HAL库的STM32项目模板工程,全篇以STM32F103ZE芯片为例进行讲解,并对工程中主要的几个关键文件作用进行了阐述,适合入门级别同学参考借鉴。

Leon的博客 2079

Python 爬虫教程:企业官网基本信息抓取

本文介绍了使用Python爬虫技术抓取企业官网信息的方法,包括公司名称、简介、联系方式、地址、产品及新闻等数据。通过Requests和BeautifulSoup库实现网页请求与解析,并利用Pandas存储数据为CSV文件。同时提供了应对反爬虫机制(如设置User-Agent、代理IP池、延迟请求等)的解决方案,帮助高效获取企业公开数据。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1856

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1360

【STM32】STM32标准库与HAL库对照学习教程二--库函数模板创建

【STM32】STM32标准库与HAL库对照学习教程特别篇--库函数模板创建一、前言二、标准库函数模板创建1、新建模板文件2、新建工程添加文件3、配置魔术棒4、编译运行三、使用cubemx创建HAL库函数模板1、cubemx功能介绍2、cubemx配置生成文件3、写程序的要求四、两文件对比 一、前言 本章内容是使用库函数开发STM32的前提,以STM32F103zet6为例,本章分标准库配置和cubemx配HAL库两部分,可以在目录中选择自己想要看的部分,点击跳转就行了。 二、标准库函数模板创建 库函数建立

修成真的博客 7201

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【STM32标准库开发 工程模板建立最强最详细总结,详细到炸裂,一顿狂输出,看完立刻起飞】

STM32工程模板建立最强总结

一杯咖啡,一行代码 4612

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【1】STM32·HAL库·新建工程模板【一步到位】

由于官方固件包设置了只读权限,所以文件图标会出现黄色小钥匙,需要取消文件夹的只读权限。选择刚才创建的文件夹中的MDK-ARM,命名后点击保存。点击添加工程,选择MDK-ARM项目工程,点击Open。打开main.c,选择编码格式,点击通过编码重新打开。这里要注意:一定要点击OK,点击关闭不会保存!,设置下载器,按照自己的下载器型号来选择。分组,点击Add Files,回到。分组,点击Add Files,回到。分组,点击Add Files,回到。文件夹右键,选择属性,取消只读选项。

Cute758的博客 4780

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

4.STM32 新建HAL库模板工程

了解STM32的HAL库文件之后,我们就可以使用它来建立工程了,因为用库新建工程的步骤较多,我们一般是使用库建立一个空的工程,作为工程模板。以后直接复制一份工程模板,在它之上进行开发。

knightseasky的博客 1501

STM32H750VBT6工程KEIL模板

STM32H750VBT6的KEIL工程模板,使用LL库实现了时钟配置,串口配置,MCO以及GPIO配置,便于后续工程开发

wing_man的博客 3709

stm32hal库工程模板搭建

使用HAL库需要为工程准备许多相关文件,也就是创建HAL库的工程模板。工程模块没有统一的格式, 通常是根据多年的开发经验和使用习惯总结出来的。 各文件夹、文件说明如下:  Core:存放从SDK文件夹抽取的部分可能会修改的核心文件;  Driver: 存放用户编写的外设驱动文件;  Main: 存放主函数文件;  Project: 存放Keil工程文件,包含目标二进制文件;  SDK:存放CMSIS和HAL库;  Clean.bat:Windows脚本,用于清理Project里Keil生成的工

qq_56926420的博客 2115

使用KEIL5创建基于HAL库工程

删除44,45行。

qq_56213850的博客 1011

STM32F429第一篇之新建一个HAL库模板工程

文章目录前言新建文件夹新建工程官方硬件支持包下载验证 前言 本文主要的参考资料为正点原子的 <STM32F429开发指南——HAL库版本>。 新建文件夹 新建一个名称Template的文件夹。 在Template文件下,新建CORE,HALLB,OBJ,USER四个文件夹。当然,以上5个文件夹是正点原子推荐的分类方法,可以根据个人的实际需要修改。如下图所示: 新建工程 新建项目:打开keil->Project->New uVision Project. 将目录定位到刚

我想想的博客 2710
上一篇: 电子书阅读器的第二人生:当Nook Glowlight Plus遇见Koreader
下一篇: 从零到一:STM32开发工具链的隐秘生态与效率革命
apple5
博客等级 码龄17年 121粉丝 1666原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值