- 博客(61)
- 收藏
- 关注
原创 【GD32】分散加载文件.sct
.sct文件是ARM编译器(如Keil MDK)使用的分散加载描述文件,用于精确控制代码和数据在微控制器内存中的布局。它通过定义加载区、执行区和段选择器,将程序的不同部分分配到Flash、RAM等存储区域,并处理初始化过程。在GD32开发中,.sct文件需匹配具体型号的存储映射,确保向量表位置正确,并可优化性能。开发者通常在Keil中编辑.sct文件,编译后通过.map文件验证效果。其他工具链如GCC使用.ld文件实现类似功能。
2025-10-22 18:54:28
1146
原创 【GD32】输出时钟配置
GD32微控制器可通过两种方式输出时钟信号:MCO引脚输出和定时器通道输出。MCO方法(如PA8引脚)可直接输出系统时钟源(HSI/HSE/PLL等),配置简单但频率固定。定时器方法(如TIMER1通道)通过配置PSC和ARR可生成可编程频率方波(如1MHz),灵活性更高但需占用定时器资源。MCO适合为外部芯片提供基准时钟,定时器输出则适用于需要特定频率的场景。两种方式均需正确配置GPIO复用模式和时钟源。
2025-10-22 18:51:07
1308
原创 【GD32】SPI协议
GD32的SPI接口功能强大且灵活,支持多种工作模式和配置选项。根据外设要求正确配置SPI模式和时钟频率合理管理片选信号,特别是在多从设备系统中根据应用需求选择查询、中断或DMA传输方式实现适当的错误处理机制,提高系统可靠性。
2025-10-15 14:09:51
1864
原创 【GD32】软、硬件I2C对比
摘要: 模拟I2C通过软件控制GPIO模拟I2C协议时序,与硬件I2C相比,其优势在于引脚灵活、可移植性强,但CPU占用高且速率较低。实现需精确控制起始/停止信号、数据位传输及应答机制,并编写底层时序函数。适用场景包括低速设备通信、硬件I2C资源不足或学习协议原理;而高速、低功耗或多主设备系统建议使用硬件I2C。实践时需注意时序校准、中断屏蔽及超时处理,调试推荐使用逻辑分析仪验证波形。(150字)
2025-10-11 19:49:01
941
原创 【GD32】软件I2C
软件I2C通过GPIO模拟实现I2C通信,核心是控制SCL/SDA引脚模拟协议时序。实现步骤包括GPIO初始化、时序延时、信号生成和数据收发函数。优点在于硬件兼容性好、引脚灵活,适合无硬件I2C或调试场景;缺点是CPU占用高、速率较低且实现复杂。关键点包括精确延时、开漏模式配置和错误处理,建议在低速、资源充足时使用,并用逻辑分析仪调试时序问题。
2025-10-11 19:44:58
813
原创 【GD32】硬件I2C
本文摘要(148字): GD32 I2C协议详解涵盖硬件配置与软件实现关键点。硬件方面着重双线制结构(SDA/SCL)、开漏输出配置和4.7kΩ上拉电阻选择,强调总线电容对通信质量的影响。软件部分提供初始化代码模板,详细解析主设备读写操作流程,包括起始信号、地址传输、数据应答等关键步骤。特别给出带超时机制的状态检测方法,并附故障排查流程图,涵盖物理连接检查、电源验证、波形分析等环节。文中通过时序图展示完整通信过程,代码示例包含多字节读写实现,为GD32系列MCU的I2C应用开发提供完整解决方案。
2025-10-11 19:40:11
934
原创 【GD32】MCU选型参考标准
GD32微控制器选型指南 选型需综合考虑性能、资源、功耗、成本及开发支持: 核心性能:按算力需求选内核(如Cortex-M3/M4),主频从几十MHz至数百MHz。 存储与外设:根据代码量选Flash/SRAM容量,匹配通信接口(USB/CAN)及模拟外设(ADC/DAC)。 功耗与成本:低功耗场景选GD32L系列,成本敏感型可选GD32E230。 封装与生态:评估引脚数、封装尺寸,并确认开发工具链和社区支持。 典型应用: TWS耳机仓:GD32E230(低成本) 工业HMI:GD32F470(高性能+LC
2025-10-11 19:27:07
1380
原创 【GD32】启动过程-程序计数器(PC)
摘要:GD32启动文件中的Reset_Handler是芯片复位后执行的第一个C语言环境初始化程序,核心功能是为运行main函数做准备。主要步骤包括:1)初始化栈指针;2)调用SystemInit配置系统时钟;3)跳转至__main完成数据段初始化和BSS段清零。关键汇编指令通过LDR、BLX、BX等实现跳转和初始化,其中SystemInit设置时钟系统,__main搭建C运行时环境。这段简洁的汇编代码实现了从硬件复位到C程序执行的关键过渡,对深入理解GD32启动机制至关重要。(147字)
2025-10-10 19:18:49
445
原创 【GD32】启动过程
GD32微控制器启动过程详解:分为硬件初始化与软件执行两阶段。硬件通过BOOT引脚选择三种启动模式(主闪存/系统存储器/SRAM),将对应存储区映射到0地址。内核固定读取栈指针和复位向量,跳转至Reset_Handler执行初始化:拷贝数据段、清零BSS段、配置系统时钟(含VTOR重定位),最后进入main()。系统存储器模式用于串口烧录,SRAM模式需配合调试器使用。启动文件需合理设置堆栈大小,注意时钟稳定性和SRAM启动时的向量表重定位,确保系统稳定运行。
2025-10-10 19:16:11
845
原创 【GD32】DMA及串口应用
GD32 DMA控制器指南摘要 GD32 DMA控制器通过硬件直接管理数据传输,显著减轻CPU负担。主要特性包括: 双DMA控制器共14通道 支持内存/外设间多种传输方向 可配置数据宽度(8/16/32位) 地址自动递增和循环模式 配置流程: 使能DMA时钟 初始化参数(地址/方向/宽度等) 使能通道 配置外设DMA请求 典型应用场景: USART DMA发送:内存数据批量传输到串口 ADC DMA接收:循环模式实现连续采样 DMA通过硬件加速数据传输,提高系统效率,特别适合大数据量传输场景。
2025-09-23 14:45:26
1329
原创 【GD32】串口
本指南介绍了GD32单片机的USART串口配置与使用方法。主要内容包括:串口基础概念(波特率、数据位等)、GD32 USART功能概述、引脚分配、配置步骤(GPIO初始化、USART参数设置)、printf/scanf重定向方法、数据收发流程及实例代码。文中提供了全双工异步通信模式的详细配置步骤,包含发送字符串和接收回显的示例代码,并强调了时钟使能、引脚复用、标志位查询等关键注意事项,同时建议在高速通信时考虑使用中断或DMA方式。
2025-09-23 14:42:11
1388
原创 【GD32】定时器
GD32单片机定时器功能详解:定时器是单片机重要外设,分为基本定时器、通用定时器和高级定时器三类,分别适用于不同场景。核心原理是通过计数器实现定时功能,计算公式为T=(ARR+1)*(PSC+1)/F_timer。配置步骤包括使能时钟、初始化参数、使能中断、配置NVIC和启动定时器。使用时需注意清除中断标志位,并保持中断服务函数简洁高效。定时器还支持PWM输出、输入捕获等进阶功能,适用于电机控制等多种应用场景。
2025-09-22 16:21:23
981
原创 【GD32】中断系统
理解GD32的中断,关键是掌握NVIC如何管理优先级、EXTI如何检测外部信号、以及如何高效安全地编写ISR。切记:中断服务函数要“快进快出”,清除标志位,并合理分配优先级。
2025-09-22 15:24:57
1435
原创 【GD32】时钟树核心要点
GD32时钟树配置是嵌入式开发的关键基础,涉及多源多路径的分配网络。主要时钟源包括内部高速RC(8/16MHz)、外部晶振(4-32MHz)和PLL(可配置至240MHz)。配置流程需注意:1)使能时钟源并等待稳定;2)正确设置PLL参数;3)配置总线分频;4)切换系统时钟源。关键点包括时钟启动检测、频率限制检查、外设时钟使能及低功耗优化。掌握"源-路-目的"逻辑,可灵活配置时钟系统,满足不同应用需求。
2025-09-19 09:46:48
947
原创 【GD32】GD32的Bootloader中实现Ymodem协议进行固件升级
GD32 Bootloader中Ymodem协议实现摘要: Ymodem协议通过串口实现固件升级,支持1024字节/包传输和CRC16校验。核心流程包括启动传输(发送'C')、文件头包处理、数据包传输和结束确认。代码实现包含数据包结构定义、CRC16校验计算、单包接收处理和主流程控制。关键点:1)Flash需先擦除后写入;2)正确处理包序号和校验;3)优化超时重传机制。注意事项包括Flash操作限制(按字/页处理)、内存优化和中断管理。调试时可借助SecureCRT等工具,通过串口打印辅助信息排查问题。
2025-09-12 11:09:19
585
原创 【GD32】IAP固件升级
摘要:GD32的IAP功能支持MCU在运行状态下通过通信接口(如串口、CAN等)自更新Flash程序,无需外部编程器。核心包含Bootloader程序和应用程序,需合理规划Flash分区(如32KB Bootloader区+192KB APP区)。开发流程包括:1)硬件和通信方式确认;2)Flash分区规划;3)Bootloader开发(含通信协议、Flash操作、程序跳转);4)APP调整(修改起始地址和中断向量表)。关键点在于稳定可靠的Bootloader设计、合理的Flash分区及完善的校验机制。IA
2025-09-12 11:00:56
1321
6
原创 【GD32】存储器架构介绍
GD32 基于内核,遵循其规定的存储器映射结构。整个 4GB 的地址空间被划分为多个预定义区域,用于不同的存储器和外设。地址范围区域类型说明代码区用于存放程序代码,通常映射到内部 Flash 或系统存储器。SRAM 区用于存放运行时的数据(变量、栈、堆),直接对应芯片的物理 RAM。外设区所有片上外设(如 GPIO、USART、定时器等)的寄存器都映射到此区域。外部存储器用于连接外部存储设备(如 SDRAM、NOR Flash),通过 EXMC(外部存储器控制器)访问。
2025-09-09 16:53:19
1213
原创 【GD32】ROM Bootloader、自定义Bootloader区别
Bootloader核心区别摘要 ROM Bootloader是芯片固化的只读程序,用于基础恢复和初始编程,不可修改。自定义Bootloader是开发者编写的可更新程序,功能更强大但占用Flash空间。 主要差异: 存储:ROM vs 用户Flash 功能:仅基础通信 vs 支持多种协议(WiFi/蓝牙等) 用途:应急恢复 vs 远程升级/安全校验 调用:需手动设置BOOT引脚 vs 自动逻辑判断 ROM Bootloader是最后的保障,自定义Bootloader实现高级功能。开发时通常先用ROM烧录自定
2025-09-09 11:14:05
1030
原创 【GD32】启动模式(下)
GD32有三种启动模式,核心区别在于CPU从不同存储器读取初始堆栈指针和复位向量地址:主Flash模式(0x08000000)用于常规应用运行,系统存储器模式(0x1FFFF000)用于串口烧录程序,SRAM模式(0x20000000)需配合调试器实现快速调试。每种模式下,CPU都会先读取MSP初始值,再跳转到复位处理函数执行。主Flash模式执行用户程序,系统存储器模式运行内置Bootloader,SRAM模式则需预先通过调试器加载程序到RAM中。
2025-09-09 11:01:00
968
原创 【GD32】启动模式 (上)
摘要:GD32微控制器提供三种启动模式,通过BOOT0/BOOT1引脚电平组合或选项字节配置选择:主Flash启动(正常运行)、系统存储器启动(串口下载)和SRAM启动(调试模式)。硬件引脚配置需在上电复位时采样生效,而选项字节可软件锁定启动源并覆盖引脚设置。典型应用中,BOOT0电平决定启动模式(高电平进入下载,低电平运行程序),修改配置后需复位生效。不同型号的具体地址和配置可能略有差异,需参考对应芯片手册。
2025-09-09 10:59:22
1800
原创 【DTOF传感器】DTOF系统介绍
本文介绍了3D成像方法的分类,主要包括主动式和被动式两种。主动式方法通过激光器发送脉冲光信号,接收反射光子进行测距,具体分为干涉法、三角法和飞行时间法(TOF)。其中TOF又分为直接飞行时间法(DTOF)和间接飞行时间法(ITOF):DTOF直接测量光脉冲往返时间差,使用APD或SPAD感光器件,适合数米至数百米测距;ITOF通过相位偏移间接计算时间,精度更高但测距较近。被动式方法则包括对焦测距法和立体视觉法。文章还提供了3D成像方法的分类流程图。
2025-06-14 12:46:04
1025
原创 【DTOF传感器】光子飞行时间传感技术
DTOF(直接飞行时间)系统通过测量激光脉冲往返时间计算物体距离,主要由发射端、接收端和算法端组成。发射端使用VCSEL激光器发射脉冲信号,接收端通过SPAD传感器阵列接收反射光信号并转换为电脉冲。TDC时间转换器量化发射与接收信号的时间间隔为数字编码。算法端通过多次测量构建直方图,找出频率最高的峰值code值作为距离测量结果。该系统需处理传感器噪声(DCR)和环境光干扰,并通过寻峰算法提高测量精度。核心在于直方图统计与峰值识别技术。
2025-06-08 13:59:53
788
原创 间接飞行时间 (iToF) 原理介绍
iToF 的工作原理是相机本身向目标物体发射调制的红外光信号,传感器接收目标物体返回的光信号,通过测量相移来计算测量光的飞行时间来实现距离测量。连续波间接飞行时间 (CW-iToF) 的基本原理是通过将光调制成一定频率 f 的方波来测量一个周期的发射和接收之间的相移,从而通过计算相移来测量距离。φ表示从发射时间到接收时间的相移,光的传播时间可以很容易地从φ计算出来。当光来回传播的周期大于调制光的周期时,距离计算将是错误的,因为无法区分从远处返回的信号和从近处返回的信号具有相同的相移,但周期不同。
2025-04-18 15:37:52
1550
原创 《Windows批处理脚本(.bat)从入门到精通:详细教程与实战案例》
Windows批处理脚本(.bat)是基于CMD命令解释器的自动化脚本,通过将多个DOS命令按逻辑组合成文本文件(扩展名为.bat或.cmd),实现自动化操作。批量文件处理系统维护任务软件自动安装定时任务调度优势:无需额外环境、执行快速、学习成本低call :sayHello "程序员"exit /b:sayHellogoto :eof。
2025-03-13 19:50:08
4949
原创 Android调试工具之ADB
ADB(Android Debug Bridge)是Android开发与调试的必备工具,掌握它能极大提升开发效率。一、ADB下载二、ADB安装解压下载的安装包,以Windows版本为例;将执行文件的路径添加到系统环境变量中;打开命令行,输入adb --version;三、ADB基础使用命令设备连接与授权USB连接:通过Type-C/ Micro USB线连接主板与PC(优先选择靠近电源接口的USB口)。网络连接:主板需接入与PC同一局域网(有线/无线均可)。终端输入。
2025-03-12 20:19:23
1398
原创 MySQL基础知识总结
方式一:计算机——右击管理——服务方式二:通过管理员身份运行net start 服务名(启动服务)net stop 服务名(停止服务)一、用户变量SET @变量名=值;SET @变量名:=值;SELECT @变量名:=值;方式一:一般用于赋简单的值SET 变量名=值;SET 变量名:=值;SELECT 变量名:=值;方式二:一般用于赋表 中的字段值SELECT 字段名或表达式 INTO 变量FROM 表;select @变量名;二、局部变量。
2024-12-26 14:58:08
681
原创 【C 基础】C语言代码编译过程
就像刚才的hello.c它使用到了C标准库的东西“printf”,但是编译过程只是把源文件翻译成二进制而已,这个二进制还不能直接执行,这个时候就需要做一个动作,gcc -E hello.c -o a.c可以生成预处理后的文件。打个比方编译的过程就向你对你老婆说,我要吃雪糕。从一个源文件(.c)到可执行程序到底经历了哪几步,我想大多数的人都知道,到时到底每一步都做了什么,我估计也没多少人能够说得清清楚楚,明明白白。(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些。
2024-12-25 10:17:46
713
原创 【C++ 基础】undef用法
其中“#define malloc”是为了防止用户直接调用库函数malloc,只要包含了这个头文件alloc.h,就不能直接调用库函数malloc,而只能调用自定义函数MALLOC,如果用户要调用库函数malloc编译器会发生错误。这种技巧还是比较有意思的,用于对已经存在的库函数进行封装。在一个头文件里定义的两个对象与分别在两个头文件里定义效果相同,但如果将相似的对象只用一个头文件申明,可以增强源代码的可读性。在同一个头文件中定义结构类型相似的对象,根据宏定义不同获取不同的对象,主要用于增强代码的可读性。
2024-12-25 10:12:18
938
原创 【C 语言】内存节省机制
比较两种代码风格,使用循环结构比较大小是一种较为基础的方法,在栈区开辟了一个名为min的int空间用于暂存中途比较结果,这样就比第二种使用三目比较,多消耗了内存。编写代码实质是通过指令对计算机内存进行操作,计算机的硬件设备往往十分有限,尤其是内存。如何使有限的存储空间利用效率达到最大,成为了代码优化首先要考虑的事情。比如,输入三个数比较大小并输出最小值。使用条件语句嵌套比较。
2024-12-25 10:04:47
385
原创 C/C++基础错题归纳
故最后sum=2+0+1…(每3次循环余数和为3,所以前65535(3的倍数)次循环余数和为65535,再加最后1次循环的余数1,最后sum=65536,而i=65535)False第65536次循环,i=65535,value=0,value%3=0;True只经历1次, i=65535,value=65536,value%3=1;False第1次循环,i=65534,value=65535,value%3=0;False第65535次循环,i=0,value=1,value%3=1;
2024-12-24 18:36:05
974
原创 【C++ 基础】构造和析构
2.在C++当中要完成对象的初始化工作,可以借助构造来完成,如果要完成对象的清理操作,借助析构来完成。1.养成一个习惯,只要是变量,定义后要初始化。
2024-12-24 16:19:36
259
原创 【C++ 基础】命名空间
2.using 指示 using namespace 命名空间名称(using namespace std;1.using 声明 using 命名空间标识符::空间成员名(using std::cout;2.命名空间可以在全局作用域,也可以在其他作用域内部定义,但不能在函数和类内部定义。放开这个空间所有成员的可见性(当这个空间中大部分成员需要经常被使用,用指示)命名空间:内有许多函数(相当于书柜的一个分区),对函数进行管理。只放开某一成员的可见性(推荐使用这种,比较容易避免命名污染)
2024-12-24 16:18:35
271
原创 【C++ 基础】内存管理
一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。free ( 动态释放 )由编译器自动分配释放, 存放函数的参数值,局部变量等.3、内存分配成功且也初始化了,但操作越界。2、内存分配成功,但没有初始化就引用它。 C语言 ( 函 数 ) C++ ( 运算符 )delete ( 动态释放 )1、内存分配未成功,却去使用它。4、忘记释放内存,造成内存泄漏。 全局数据区(静态区)5、释放了内存,却继续使用它。
2024-12-24 16:17:41
1132
原创 【C++ 基础】面向对象
数据用来描述对象的性质,状态。3、通过这些数据及行为在组装的时候,不断的完善类的具体数据和行为。是类的实体,这个实体将拥有具体的数据,能够执行具体的行为。一些具有共性的事物,把共性集合在一起抽象出来的概念。2、需要去考虑这个类的具体的数据和行为;提高了软件的可重用性,可靠性,安全性。1、就是不停去细化出新的有共性的类;抽象的概念它实体的反馈。抽象思维,不利于理解。
2024-12-24 16:12:35
176
原创 【C++ 基础】从C到C++有哪些变化
参数的缺省,在只有定义的情况下可以在写在定义上,如果有声明,只要在声明中缺省,不要在定义中缺省。在C++里面,除了指针拷贝之外,还可以使用引用。使用指针和引用效率是一致。-函数的参数缺省与重载混合使用时,一定要注意参数缺省导致重载的二义性。-参数的缺省只能从后往前,依次缺省,不能从前往后。函数的值拷贝,如果是一个结构变量,尽量使用指针。把代码的模块化为工具,以此增加代码的复用性。*三种:乘号,解引用,指针。&三种:位与,取地址,引用。注意:和函数返回值没有关系。
2024-12-24 16:11:49
1384
原创 Qt [获取Dump] 使用WindowsAPI实现生成MiniDump文件
客户现场的软件偶发崩溃是程序开发者,比较头疼的事情。如何更快速的定位到问题点和解决掉,是开发应该具备的基本能力。Windows提供了一系列的API,可以记录软件崩溃前的堆栈信息。下面就实现一个生成Dump文件的程序实例。
2024-04-22 14:15:18
786
原创 QtCreator编译CamkeLists工程文件的项目
最近遇到一个项目需要使用开源库,项目是在QtCreator下开发。项目源码工程文件使用CmakeLists,使用QtCreator打开需要先安装cmake,cmake版本要高于工程文件中版本。例如:工程文件中版本3.5>cmake版本3.21。。
2024-04-17 09:57:59
906
Thorlabs.OpticalPowerMonitor.5.0.4591.730-NSIS.zip
2024-01-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅