自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 问答 (1)
  • 收藏
  • 关注

原创 ARM-ADC开发

本文介绍了GD32F4系列微控制器的ADC开发流程,重点讲解了采样配置、数据转换和模式选择等关键内容。开发流程包括GPIO配置、主频设置、分辨率和数据对齐配置,以及连续模式和扫描模式的应用场景。文章详细说明了单通道和多通道采样的实现方法,并提供了温度传感器和电位器的采样代码示例。针对多通道采样中的电荷残留问题,提出了增大采样次数的解决方案。最后介绍了如何结合DMA实现高效数据搬运,并给出了完整的连续运行+扫描模式的ADC采样代码实现。

2025-07-26 10:22:59 899

原创 ARM-ADC

摘要:模拟信号是连续变化的物理量表示,而数字信号是离散采样值。ADC(模数转换器)通过采样、量化和编码将模拟信号转换为数字信号。采样频率影响信号精度和带宽,量化过程决定分辨率。常见ADC类型包括高速Flash ADC和低功耗SAR ADC,分辨率越高精度越高但元件越多。ADC关键参数包括分辨率(比特数)、采样率(SPS)、通道数和时钟频率。

2025-07-26 09:45:26 401

原创 FreeRTOS-直达任务通知

RTOS任务通知机制提供了一种高效的线程间通信方式,每个任务拥有可配置的通知数组,每条通知包含32位值和挂起状态。通知支持四种更新方式:位设置(eSetBits)、增量(eIncrement)、覆写(eSetValueWithOverwrite)和非覆写(eSetValueWithoutOverwrite)。该机制可模拟信号量、邮箱和事件组功能:通过ulTaskNotifyTake实现信号量操作,xTaskNotifyWait实现邮箱接收,eSetBits方式配合位操作实现事件标志。相比传统通信对象,任务通

2025-07-26 09:43:47 633

原创 FreeRTOS-事件组

本文介绍了FreeRTOS中事件组的基本概念和使用方法。事件组是一种任务间同步机制,通过32位标志位(高8位系统保留,低24位用户控制)实现任务间的事件通知。重点讲解了事件组的创建(xEventGroupCreate)、事件设置(xEventGroupSetBits)和等待事件(xEventGroupWaitBits)三个核心函数的使用方法。文中通过一个按键触发案例,展示了如何创建多个任务等待同一个事件触发,并演示了事件清除参数对任务行为的影响。该机制适用于需要多任务同步协调的场景,能够有效简化任务间通信的

2025-07-26 09:41:51 873

原创 FreeRTOS-消息队列

本文介绍了消息队列的基本概念及在FreeRTOS中的实现应用。主要内容包括:1)队列的FIFO特性和基本操作(入队、出队);2)FreeRTOS消息队列的创建、发送和接收API;3)基本数据类型和复杂结构体在消息队列中的使用示例;4)消息队列与信号量的对比分析,指出消息队列更适合数据传递,而信号量侧重资源同步。通过具体代码示例,展示了如何实现任务间基于消息队列的通信机制。

2025-07-26 09:35:13 720

原创 FreeRTOS-信号量

本文介绍了FreeRTOS中的信号量机制,包括四种信号量类型及其应用场景:二进制信号量用于任务间互斥访问,计数型信号量用于资源数量控制,互斥信号量实现优先级继承机制避免死锁,递归互斥信号量支持同一任务多次获取资源。通过具体代码示例讲解了信号量的创建、获取和释放操作流程,并对比分析了各类信号量的适用场景。学习重点包括信号量的基本概念、API函数使用以及不同类型信号量的特性差异,为嵌入式系统开发中的任务同步和资源共享提供解决方案。

2025-07-25 22:05:53 675

原创 FreeRTOS-中断管理

摘要:本文介绍了计算机中断机制及其在ARM处理器中的优先级配置。中断是实时响应外部事件的重要机制,包括中断触发、响应、现场保存、服务程序执行和恢复等步骤。在ARM Cortex-M中,中断优先级通过4位寄存器配置,GD32将其分为抢占优先级和子优先级。FreeRTOS中通过configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY(默认为5)控制中断优先级范围,低于此值的中断才能被FreeRTOS API管理。文章还提供了一个示例程序,展示了如何创建定时器中断、按键任务,并演示

2025-07-25 18:30:00 861

原创 FreeRTOS-任务相关机制

但需要注意,临界区的使用应当尽量保持简短,避免在临界区中执行复杂或耗时的操作,以减少系统的响应时间和提高并发性能。结构体 tskTaskControlBlock 是任务控制块,为每个任务分配一个任务控制块,存储任务状态信息,包括指向任务上下文的指针(任务的运行时环境,包括寄存器值)。通过自定义内存分配器接口,用户可以根据具体的需求实现自己的内存管理策略,例如使用特定的内存分配算法或集成外部内存管理器。根据应用的具体需求和系统的资源限制,选择合适的内存管理算法可以提高内存的利用率和系统的性能。

2025-07-25 18:00:00 747

原创 FreeRTOS-定时器

本文介绍了FreeRTOS中定时器的使用方法和开发流程。主要内容包括:1. 定时器概念:分为软件定时器和硬件定时器,FreeRTOS使用软件定时器;2. FreeRTOS定时器操作:详细讲解了定时器的创建(xTimerCreate)、启动(xTimerStart/xTimerStartFromISR)、停止(xTimerStop)和删除(xTimerDelete)等API函数;3. 关键参数说明:定时周期(以Tick为单位)、自动重载模式(pdTRUE/pdFALSE)、回调函数和定时器标识;4. 开发案例

2025-07-25 16:18:45 494

原创 ARM-I2C硬实现

本文介绍了GD32F4系列硬件I2C的实现方法。主要内容包括:1) I2C初始化配置,设置SCL(PB6)和SDA(PB7)引脚为复用功能,配置I2C0时钟为400KHz;2) 实现了等待标志位的工具函数I2C_wait和I2C_waitn;3) 详细阐述了I2C写操作流程(包含起始信号、设备地址发送、寄存器地址发送、数据传输和停止信号)和读操作流程(包含两次起始信号、地址切换、数据接收和停止信号);4) 列出了关键标志位说明;5) 提供了完整的I2C驱动代码,包含初始化、读写函数实现和去初始化函数。

2025-07-25 13:47:49 459

原创 ARM-I2C软实现

【代码】ARM-I2C软实现。

2025-07-25 13:45:44 248

原创 ARM-I2C-I2C原理

I2C总线协议是一种广泛应用于电子设备互联的通信标准,由飞利浦公司开发。它仅需两根线(SCL时钟线和SDA数据线)实现多设备共享总线通信。协议通过设备唯一地址实现寻址,支持主从设备间的读写操作。写操作流程包括起始信号、地址发送、寄存器地址发送、数据传输和停止信号;读操作则在地址发送后切换为读模式接收数据。协议定义了严格的时序控制,包括起始/停止信号生成、数据有效性判断、应答机制等。文中提供了详细的C语言实现代码,涵盖信号控制、数据收发、应答处理等核心功能模块。该协议以简单高效的特点成为嵌入式系统中芯片间通信

2025-07-24 15:52:32 366

原创 ARM-WDGT看门狗

看门狗(Watchdog)是嵌入式系统中关键的硬件监控机制,分为独立看门狗(FWDGT)和窗口看门狗(WWDGT)。独立看门狗使用专用低速时钟,通过定时喂狗防止系统死锁,适用于容错要求高的场景;窗口看门狗基于系统时钟,严格限定喂狗时间窗口,适合实时性任务监控。二者均通过超时复位保障系统稳定性,但实现方式和适用场景不同:独立看门狗提供基本防护,窗口看门狗实现精确时序控制。典型应用包括死机恢复、程序跑飞防护等,是嵌入式系统可靠性的重要保障。代码示例展示了GD32F4系列芯片的配置方法,包含时钟计算、参数设置等关

2025-07-24 14:28:30 857

原创 ARM-RTC闹钟Alarm

本文介绍了基于GD32F4xx系列MCU的RTC闹钟配置与中断处理实现。主要内容包括:1)RTC时钟初始化设置,包括备份域管理、晶振配置和时间参数初始化;2)闹钟中断配置流程,详细说明了如何设置闹钟触发条件(日期/时间)、配置NVIC中断优先级和EXTI外部中断;3)中断服务函数实现,包含标志位清除和中断处理逻辑;4)提供了完整的代码实现,涵盖RTC时间读取、闹钟设置和主循环逻辑。文章最后指出常见Bug(闹钟未触发或频繁触发)的解决方案,建议调整编译优化等级进行测试。

2025-07-24 14:04:03 209

原创 ARM-RTC实时钟表-RTC内置实时时钟

本文介绍了GD32F407微控制器上的RTC(实时时钟)模块及其开发流程。RTC作为独立硬件模块,提供精确的日期时间功能,采用BCD码格式表示时间数据。文章详细说明了RTC的电源域结构、初始化步骤和时钟配置方法,包括外部晶振(LXTAL)、内部晶振(IRC32K)和分频时钟(HXTAL)三种时钟源的选择与配置。重点讲解了分频系数的计算方法和BCD格式转换的实现,并提供了完整的代码示例展示RTC的初始化、时间设置和读取操作。最后还介绍了RTC备份寄存器的使用方法,可用于实现系统复位后保留时间配置信息的功能。

2025-07-24 11:45:27 495

原创 ARM-DMA外设到内存

摘要:本文介绍了使用DMA方式实现串口数据接收的配置流程。核心步骤包括:1. 初始化DMA1通道5,配置为外设到内存传输模式;2. 设置USART0数据寄存器为源地址,接收缓冲区为目标地址;3. 配置数据宽度为8bit,缓冲区长度1024字节;4. 使能DMA通道并配置串口DMA接收功能。当串口触发空闲中断时,通过DMA传输计数获取接收数据长度,处理完成后重新使能DMA。关键配置参数包括传输方向、地址自增、数据宽度和优先级设置等。该方法实现了高效的数据传输,减少了CPU负载。

2025-07-24 10:07:25 269

原创 ARM-DMA内存到外设

本文介绍了使用DMA方式实现串口数据发送的配置流程。主要内容包括:1. DMA初始化配置(时钟、通道、传输方向等);2. 串口外设DMA发送功能使能;3. 关键参数设置:源/目标地址、数据宽度、地址增长模式等;4. 实现DMA发送单字节、数组和字符串的函数;5. 传输流程:配置源数据地址和长度,触发传输并等待完成标志。重点说明了DMA控制器与外设(如串口)的交互机制,以及如何通过内存到外设的DMA传输方式提高数据传输效率。

2025-07-24 10:05:02 332

原创 ARM-DMA内存到内存

本文介绍了使用DMA实现内存到内存数据传输的方法。通过GD32F4系列MCU的DMA1通道0,将src数组中的21字节数据("hellohihellohihellohi")传输到dst缓冲区。主要内容包括:1) DMA配置步骤:开启时钟、初始化通道、设置传输参数(方向、地址、数据宽度等);2) 数据传输流程:配置源/目标地址、设置数据长度、启动传输;3) 中断处理:检测传输完成标志、获取传输长度、清除中断标志。相比CPU直接拷贝,DMA传输可提高效率,特别适合大数据量传输场景。

2025-07-23 14:38:12 281

原创 ARM-DMA

计算机系统核心部件CPU通过总线与SRAM(内存)和外设进行数据交互。程序运行时,CPU从SRAM获取数据到寄存器处理,再通过总线传输给外设。这种传统方式在大数据量传输时效率低下,会占用CPU大量执行时间片。DMA(直接存储器存取)技术应运而生,它能在不依赖CPU的情况下直接完成SRAM与外设间的数据传输。GD32F4芯片配备两个DMA控制器共16个通道,支持存储器到外设、外设到存储器及存储器间三种传输方式,通过优先级仲裁机制有效减轻CPU负担,提升系统整体性能。

2025-07-23 10:55:28 866

原创 ARM-定时器-定时器函数封装配置

本文展示了GD32F4系列芯片中定时器(TIMER7)的封装配置方法。通过串口接收指令控制PWM占空比变化,实现TIMER7作为高级定时器的四通道PWM输出功能。关键点包括:1) 定时器初始化配置周期和预分频值;2) 通道引脚(P/N)分类配置;3) 占空比更新函数封装;4) 通过条件编译实现功能模块化。代码采用分层结构,包含硬件配置(Timer_config.h)、驱动接口(Timer7.h)和功能实现(Timer7.c),为其他定时器的封装提供了参考模板。

2025-07-22 22:03:17 251

原创 ARM-定时器-高级定时器

break事件是定时器的一种重要安全机制,用于在出现系统异常(如过流、过压、短路等)时,迅速停止PWM或其他输出信号,避免设备损坏。它提供了自动化和高效的保护,尤其适合需要高可靠性和高安全性的功率电子和电机控制应用。

2025-07-22 12:30:18 529

原创 ARM-定时器-PWM通道输出

由于扩展板上的高级定时器没有对应的LED,我们可以使用跳线的方式,将TIMER0CH0对应的PE8引脚,短接到PD8(LED1)上,通过观察LED1的亮灭,了解是否正确输出。这些参数主要用于配置定时器的安全控制,break功能在高电压或高功率应用中非常关键。互补保护电路:用于驱动H桥或三相逆变器,当检测到故障(如短路)时,通过外部硬件信号(Break)快速关闭PWM输出,避免损坏MOSFET/IGBT。参数用于增强安全性和控制功能,特别是在电机控制或功率转换应用中,避免因故障导致不必要的输出操作。

2025-07-21 22:59:02 1106

原创 ARM-定时器-通用定时器与PWM

PWM全称是脉宽调制(Pulse Width Modulation),是一种通过改变信号的脉冲宽度来控制电路输出的技术。P和N的配置主要出现在互补PWM中,如果当前的Timer不是高级定时器,那么就不具备互补的功能,那么我们一律认为他是P类型,也就是设置P才有用。在ARM32系列芯片中,PWM输出的频率和占空比可以由程序控制,因此可以用来控制各种电机、灯光和其他设备的亮度、速度等参。PWM是一种将数字信号转换为模拟信号的技术,它通过改变信号的占空比来控制输出的电平。1个周期内,高电平出现的比例。

2025-07-20 16:24:33 340

原创 ARM-定时器-基本定时器

根据结构框图,我们可以知道,14个Timer中,有的采用APB1,有的采用APB2。值得注意的是,后面有进行减一操作,原因是,这个周期计数值最终会配置到芯片的寄存器中,芯片的寄存器计数累加的起点是0,不是1,所以我们需要减1。APB外设总线,其实和系统时钟总线是会存在倍差的,我们的代码执行的依据是系统时钟。简单理解,天上一年,地下一天。分频计数,是(分频系数 - 1),这个是写入寄存器的,因为是从0开始计数,所以要减1。周期和频率是反的,以上面的说法为例,0.2秒是一个周期,1秒钟就有5个这样的周期。

2025-07-19 23:37:53 744

原创 ARM-定时器

定时器是嵌入式系统中常用的一种外设,它可以产生一定的时间间隔、延时、定时等功能,广泛应用于定时、计数、脉冲宽度调制(PWM)等领域。

2025-07-19 22:00:01 400

原创 FreeRTOS-任务管理

需要注意的是,任务优先级的设置应根据应用的实时需求和任务间的相对重要性进行合理的规划。在任务优先级设置时,需要综合考虑系统的响应性、任务的相互影响和资源的使用情况等因素。需要注意的是,在任务删除之前,需要确保不再需要该任务的执行,并且合理处理任务间的同步和资源释放。我们编写一个HelloWorld示例,点亮PD8和PD9的灯,通过两个不同的任务,进行灯的闪烁控制,观察效果。我们采用日志打印的方式进行验证,开启两个任务,分别打印日志,开启任务时设置不同优先级进行测试,以下是示例代码。任务的优先级等级是在。

2025-07-19 01:04:46 1020

原创 FreeRTOS-GD32移植FreeRTOS

也可以直接在官网下载:https://freertos.org/​当前以版本为例。新建项目名称为:项目结构如下:​确保以下配置信息的正确性:​Output的配置​​​​​​​​源码为下的源码为下的​​​编译项目,会出现以下错误:​来到FreeRTOS源码目录中,找到目录中的文件,进行拷贝。​将文件拷贝到项目目录中的目录下​添加头文件引入。将目录添加到include path中。​编译项目,会出现以下错误:​来到文件中,观察以下内容:​修改后:添加了两个编译平台 xxx_Handler问题解决

2025-07-17 12:40:08 762

原创 FreeRTOS-FreeRTOS概述

本文介绍了实时操作系统(RTOS)及其典型代表FreeRTOS。RTOS支持多任务处理,通过任务调度器快速切换任务实现"伪并行"。国内主流RTOS包括RT-Thread、OpenHarmony等,国外则有FreeRTOS、VxWorks等。FreeRTOS作为领先的开源RTOS,具有轻量级内核(适合资源受限设备)、基于优先级的抢占式调度、完善的任务同步机制、优秀的中断处理能力和高度可移植性等特点。其优势还包括活跃的社区支持、MIT开源许可、经过验证的可靠性,每170秒就有一次下载,广泛应

2025-07-16 14:53:52 533

原创 ARM-中断-中断优先级Priority

NVIC可以自动地响应中断,并管理中断优先级、中断处理程序等,从而实现多个中断的快速、有序、有效地响应。在ARM中,为了表示抢占优先级和响应优先级,仅用了4个Bit表示了优先级的等级。正在执行的较低抢占优先级的中断。优先级分组主要是说明抢占优先级和响应优先级的关系。响应优先级相同,抢占优先级也相同,测试不同的结果。中断优先级分为抢占优先级,响应优先级和自然优先级。响应优先级相同,抢占优先级不同,测试不同的结果。响应优先级相同,抢占优先级不同,测试不同的结果。响应优先级相同,抢占优先级不同,测试不同的结果。

2025-07-15 09:46:22 994

原创 ARM-中断-外部中断EXTI

/计数器定义和初始化// SysTick计数器if(0U!tick++;再将这个tick时间对外,外面使用者就可以获得时间计数了。

2025-07-14 23:48:35 682

原创 ARM-IT/INT中断

与外部中断不同的是,内部中断不需要外部设备的触发,而是由硬件设备自身产生中断请求,由中断控制器检测到并触发相应的中断服务程序进行处理。中断是计算机系统中的一种机制,用于响应外部事件或内部事件,它可以使单片机暂时中断正在执行的程序,转而去执行一个中断处理函数,待中断处理函数执行完毕后,再回到原来的程序继续执行。通常情况下,外部中断是通过中断输入引脚连接到中断控制器,由中断控制器检测到外部中断请求,然后触发相应的中断服务程序进行处理。中断具有优先级,高优先级的中断可以打断正在执行的低优先级中断。

2025-07-14 23:10:01 540

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除