自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 ESP32和STM32在处理中断方面的区别

ESP32更像是一个已经预装了很多智能家居设备的家庭助手,你可以很容易地添加新任务或修改现有任务,而不需要深入了解每个设备的具体工作原理。STM32则更像是一个基础平台,提供了所有必要的工具让你自己搭建出理想的智能家居系统。虽然这需要你投入更多的时间去学习和配置,但它也给予了你更高的灵活性和自定义空间。无论是选择哪一个“智能管家”,关键在于理解你的需求是什么。如果你希望快速启动并运行,那么ESP32可能是更好的选择;如果你追求高度定制化,愿意花时间深入研究每一个细节,那么STM32将是一个强有力的选择。

2025-01-25 21:33:12 1134

原创 C 或 C++ 中用于表示常量的后缀:1ULL

1ULL是一个64位无符号长整型数值1。使用1ULL可以确保在进行位操作时不会发生溢出,并且能够处理需要较大数值范围的情况。在你的代码中,1ULL确保了位移操作的结果足够大,可以正确地配置多个GPIO引脚。这样做的好处是增加了代码的健壮性和可移植性,特别是在处理不同平台或架构时。

2025-01-25 21:12:20 531

原创 什么是IAR?

是一家专注于嵌入式系统开发工具的公司,提供一系列用于微控制器(MCU)和其他嵌入式系统的开发工具。其最知名的产品是,这是一个完整的集成开发环境(IDE),包含了编译器、链接器、调试器和项目管理工具等。Keil和IAR都是优秀的嵌入式开发工具,各有优势。Keil内置了ARM编译器,适合大多数ARM微控制器的开发需求;而IAR则以其高效的代码生成、强大的调试功能和广泛的平台支持著称。选择哪一个取决于具体的项目需求和个人偏好。如果你已经在使用Keil并且它满足了你的所有开发需求,那么通常不需要额外下载IAR。

2025-01-18 15:26:52 743

原创 什么是Mingw?

是一个为Windows平台提供GNU工具链的项目,包括编译器(GCC)、链接器和其他工具。它使得开发者可以在Windows操作系统上使用GNU工具链来编译和开发C、C++等语言的应用程序。Mingw为Windows用户提供了一个强大的GNU工具链,使得他们能够在Windows环境下进行类Unix风格的开发。如果你已经有合适的编译器并且能满足你的开发需求,那么不下载Mingw也是可以的。然而,对于那些需要GNU工具链或希望在Windows上拥有类似Linux开发体验的用户来说,Mingw是非常有用的。

2025-01-18 15:23:34 920

原创 ARM GCC编译器

ARM GCC编译器是一个专门为ARM架构优化的编译器集合,它基于GNU编译器集合(GCC)。这个工具链不仅包含编译器本身,还包括链接器(ld)、汇编器(as)、调试器(gdb)和其他辅助工具。这些工具共同工作,将高级语言源代码转换为可以在ARM处理器上运行的机器码。ARM GCC编译器是一个功能强大且灵活的工具链,广泛应用于ARM架构的软件开发中。它不仅能够编译高效的机器码,还提供了丰富的优化选项和支持多种开发环境的能力,使得开发者可以更轻松地创建高性能的应用程序和嵌入式系统。

2025-01-18 11:33:20 772

原创 嵌入式系统和无线通信中,使用8位(uint8_t)参数好处

协议设计:根据描述,协议包括帧头、功能字、长度、数据和校验和。这些字段通常都是固定长度的,使用8位可以简化协议的设计和实现。数据封装:将16位数据拆分为两个8位数据可以更灵活地处理和传输。例如,一个16位的整数可以通过两次8位传输来完成。使用8位参数的主要好处是内存效率高、处理速度快、易于调试和标准化。虽然使用16位参数也是可行的,但在资源受限的嵌入式系统中,8位参数通常是一个更好的选择。

2025-01-13 17:04:53 484

原创 嵌入式无人机: 防止信号被有意干扰入侵策略

通过综合运用上述策略,可以在多个层次上增强无人机项目的抗干扰能力和安全性。重要的是要根据具体应用场景和技术限制,灵活选择最合适的防护手段,并持续关注最新的安全动态,不断改进和完善现有措施。

2025-01-13 15:44:19 1223

原创 滑动窗口滤波 (Sliding Window Filtering)

滑动窗口滤波是信号处理领域中的一种常见技术,用于平滑信号、减少噪声影响以及提取有用信息。这种方法特别适用于实时数据流处理。工作原理窗口长度:定义了一个固定大小的时间窗口,在这个窗口内对数据进行处理。 移动方式:随着时间推移,窗口不断向前滑动,每次包含最新的数据点,并丢弃最早的数据点。 滤波算法:可以应用不同的滤波算法,如平均值滤波、中值滤波、加权平均滤波等。常见滤波算法均值滤波 (Moving Average): 计算窗口内所有数据点的平均值作为输出。 简单有效,但

2025-01-13 10:34:04 603

原创 C语言: *p++

pBuf:访问指针pBuf当前指向的字节。pBuf++:后缀递增操作符,先返回当前值,然后将指针移动到下一个字节。循环:通过循环逐个发送缓冲区中的每个字节。

2025-01-11 16:36:00 241

原创 MPU6050: 卡尔曼滤波, 低通滤波

对MPU6050中的加速度值进行卡尔曼滤波是为了更好地融合多源信息,提高姿态估计的精度和稳定性;而对角速度进行低通滤波则是为了去除高频噪声,防止积分漂移,保证长时间运行下的姿态估计准确性。两者各有侧重,共同作用以提升IMU的整体性能。

2025-01-10 20:10:20 769

原创 STM32: ADC存储半字(16位)或一个字(32位)的数据

精度:使用32位可以保持更高的精度,特别是对于高分辨率ADC。如果使用16位存储高分辨率ADC的结果,则可能会导致信息丢失。内存占用:16位占用较少的内存,适用于大量数据存储且对精度要求不高的情况;而32位则适合需要保持高精度的情况,但会消耗更多内存。处理效率:在某些微控制器上,处理16位数据可能比处理32位数据更高效,因为它们有专门针对16位操作的硬件支持。然而,在现代32位MCU中,处理32位数据往往同样高效。

2025-01-10 10:29:29 529

原创 HAL : HAL_ADC_Start_DMA() 和 HAL_ADC_Start()

是用于简单的单次转换,适合低速或不频繁的数据采集,可以通过轮询或中断模式获取转换结果。则是为高速连续数据采集设计的,它利用DMA技术实现了高效的数据传输,减少了CPU的干预,非常适合大量数据的快速采集。

2025-01-10 10:09:36 780

原创 STM32: 默认开启ADC中断

在STM32微控制器中,默认开启ADC中断通常是为了提高系统的响应速度和效率。

2025-01-10 09:56:30 365

原创 Keil : 为什么选择“Use MicroLIB”

勾选“Use MicroLIB”选项的主要目的是为了在资源受限的嵌入式系统中提供一个轻量级的C标准库实现,从而节省内存和闪存空间。如果你的应用不需要复杂的库功能,并且对资源管理有较高要求,建议勾选这个选项。

2025-01-09 17:30:14 651

原创 PID : 簡單瞭解欧拉角和万向锁

欧拉角是描述物体在三维空间中旋转的一种方式,常用于姿态控制系统的反馈环节。万向锁是指在特定情况下,由于欧拉角表示法的局限性,导致一个自由度丧失的问题,这在使用欧拉角进行姿态控制时需要特别注意。在设计PID控制器时,选择合适的数学工具(如四元数)可以帮助避免万向锁带来的挑战,确保系统的稳定性和准确性。

2025-01-09 16:50:55 376

原创 STM32: 输入捕获基本结构

输入捕获功能主要用于测量时间间隔、频率或周期。通过配置定时器和捕获寄存器,可以精确地捕捉外部事件发生的时间点,并进行相应的处理。

2025-01-09 14:53:45 569

原创 STM32 : PWM 基本结构

PWM通过调整CCR的值来改变输出信号的占空比,从而实现对负载的精确控制。通过合理配置ARR、PSC和CCR,可以灵活地调整PWM信号的频率和占空比,满足不同的应用需求。

2025-01-09 11:01:01 472

原创 STM32 : 波特率发生器

波特率是串行通信中非常重要的参数,它决定了数据传输的速度。波特率寄存器 (BRR)中的DIV值用于调整波特率。计算公式提供了一种简单的方法来计算所需的波特率,从而确保发送器和接收器之间的同步。

2025-01-09 10:48:49 610

原创 STM32 : GPIO_TypeDef

_IO是一个类型修饰符,表示这些变量是内存映射的寄存器,通常用于外设寄存器访问。这些寄存器通过结构体的方式组织在一起,使得对GPIO端口的操作更加方便和直观。统一接口将所有相关的寄存器封装在一个结构体中,提供了统一的接口,便于管理和操作。每个GPIO端口(如GPIOAGPIOB等)都是这种结构体类型的实例。类型安全使用结构体可以确保类型安全,避免了直接使用指针或其他不安全的方法来访问寄存器。这种方式也便于编译器进行类型检查和优化。代码可读性和维护性。

2025-01-08 16:03:41 723

原创 STM32: AT命令

AT命令(Attention Commands)是一系列用于配置和控制调制解调器及其他通信设备的标准指令集。它们最初由Hayes公司开发,用于拨号调制解调器,但随着时间的推移,AT命令已经成为一种广泛接受的接口标准,适用于各种类型的通信模块,包括GSM、GPS、Wi-Fi、蓝牙等。

2025-01-07 20:53:25 943

原创 STM32 中的 CRH 和 CRL 寄存器

在STM32微控制器中,CRH(Configuration Register High)和CRL(Configuration Register Low)寄存器用于配置GPIO端口的引脚模式。每个GPIO端口都有对应的CRL和CRH寄存器,分别管理该端口低8位(0-7)和高8位(8-15)引脚的配置。每个CRL或CRH寄存器由4个字节组成,每个字节配置一个引脚的属性。具体来说,每个引脚有两位用于配置模式(Mode bits)和两位用于配置配置项(Configuration bits)。

2025-01-07 20:31:08 635

原创 FreeRTOS 任务通知 (Task Notifications)

任务通知是每个任务都拥有的一个属性,它允许其他任务或中断向该任务发送通知。每个任务的通知状态可以用作二进制信号(有通知/无通知)或32位数值。任务可以通过轮询检查是否有通知到达,也可以等待通知的到来而进入阻塞状态。

2025-01-07 15:36:48 569

原创 FreeRTOS 中的相对延时和绝对延时

相对延时是指从当前时刻开始,经过指定的时间间隔后执行某些操作。换句话说,它是相对于当前时间点的一个延迟。绝对延时是指任务将在特定的时间点执行,而不是基于当前时间点加上一个时间间隔。它设定的是一个具体的未来时间点,任务会在该时间点被唤醒或执行。

2025-01-07 15:24:09 483

原创 嵌入式: 低通滤波器

低通滤波器(Low-Pass Filter, LPF)是一种信号处理技术,它允许低于某个截止频率的信号成分通过,同时衰减高于该频率的成分。:如果需要更复杂的滤波特性,比如更高的选择性或更陡峭的过渡带,则可以考虑使用更高阶的无限脉冲响应(IIR)或有限脉冲响应(FIR)滤波器。:从时间角度观察,低通滤波器具有“记忆”效应,即当前输出不仅取决于最新的输入值,还与之前的输入有关。:理想情况下,低通滤波器会在某个特定的截止频率处将信号分为两部分:低于此频率的部分几乎不受影响地通过;而高于此频率的部分则被显著衰减。

2025-01-07 15:22:55 675

原创 STM32 : 互补滤波器与卡尔曼滤波器

在惯性测量单元(IMU)数据融合中,互补滤波器和卡尔曼滤波器是两种常用的方法,用于结合加速度计、陀螺仪和磁力计的数据来估计设备的姿态。这两种方法各有特点,适用于不同的应用场景。互补滤波器:适用于需要快速响应和较低计算资源的应用,如消费级无人机和机器人导航。它的实现简单,计算量小,但精度相对有限。卡尔曼滤波器:适用于对精度和鲁棒性要求较高的专业应用,如航空航天和自动驾驶车辆。虽然计算复杂度较高,但它提供了更精确的状态估计,并能更好地处理噪声和不确定性。

2025-01-06 15:44:50 1332

原创 STM32 : 奈奎斯特-香农采样定理

在 MPU6050 角度计算过程中,采样率需要大于等于两倍的带宽,这是为了遵循奈奎斯特-香农采样定理,确保可以无失真地捕获传感器输出信号的所有频率成分,从而保证角度计算的准确性。正确设置采样率和带宽可以帮助避免混叠现象,提高系统的可靠性和精度。

2025-01-05 21:48:35 1478

原创 FreeRTOS : FreeRTOSConfig.h中三个必须的配置

和:这两个宏用于将 FreeRTOS 的中断处理逻辑与具体的硬件中断服务程序关联起来,确保操作系统可以正确响应 PendSV 和 SVC 中断,这对于任务管理和调度至关重要。:这个宏控制了函数的包含与否,提供了灵活性以适应不同的项目需求,尤其是在资源受限的嵌入式环境中。

2025-01-04 11:40:33 504

原创 Keil : 添加文件两种常用的方法

小魔法棒:更适合添加官方支持的库和驱动程序,它能自动处理很多配置细节,减少手动操作带来的错误风险,特别适合初学者或那些希望快速集成标准库的开发者。品字型添加:提供了更大的灵活性,适合添加自定义文件或进行更精细的项目管理。对于经验丰富的开发者来说,在处理非标准库或定制化需求时非常有用。

2025-01-04 11:21:02 742

原创 STM32 和 ESP32

STM32 和 ESP32 虽然来自不同的制造商并且具有各自独特的特性和优势,但它们都在现代嵌入式系统和物联网解决方案中扮演着重要角色。选择哪一个取决于你的具体需求——如果你的应用侧重于无线连接和 IoT,那么 ESP32 可能更适合;而对于更广泛的嵌入式应用,尤其是那些可能不需要内置无线功能的情况,STM32 提供了更多样化的选择。

2025-01-03 10:57:45 4926

原创 嵌入式: IAP(In-Application Programming)

IAP 是一种使微控制器能够在应用代码执行期间修改其内部非易失性存储器(通常是 Flash 内存)的技术。这使得可以在不移除芯片或连接专用编程工具的情况下更新固件。

2025-01-03 10:54:01 627

原创 FreeRTOS: ISR(中断服务例程)和 TCB(任务控制块)

ISR是一段专门编写的小型程序代码,用来处理特定类型的中断请求。当中断发生时,CPU 暂停当前执行的任务,转而执行相应的 ISR 来响应这个中断。ISR 必须快速完成其工作,以确保其他更高优先级的中断能够及时得到响应。TCB是 FreeRTOS 内核用于管理每个任务的数据结构。它包含了任务的所有信息,包括但不限于:任务状态:如就绪、运行、阻塞等。任务堆栈指针:保存任务的寄存器状态和局部变量。任务优先级:定义了任务相对于其他任务的执行顺序。任务句柄:唯一标识符,用于从应用程序中引用任务。

2024-12-31 23:32:05 599

原创 FreeRTOS: 中断服务例程 Interrupt Service Routine, ISR

ISR 是一段专门编写的小型程序代码,用来处理特定类型的中断请求。每当有中断信号到来时,操作系统会根据预先设定好的中断向量表找到对应的 ISR 并执行它。ISR 必须快速完成其工作,以确保其他更高优先级的中断能够及时得到响应。

2024-12-31 23:23:58 434

原创 FreeRTOS: 优先级翻转的典型场景

优先级翻转(Priority Inversion)是指在多任务操作系统中,尤其是实时系统中,一个高优先级任务因为等待一个低优先级任务持有的资源而被阻塞,导致高优先级任务不能及时得到执行的现象。这种现象可能会破坏系统的实时性,甚至引起系统不稳定或失效。

2024-12-31 17:22:41 701

原创 FreeRTOS :二进制信号量 vs. 队列

信号量(Semaphore)和队列(Queue)是 FreeRTOS 中用于任务间通信和同步的两种重要机制,但它们的工作方式和适用场景有所不同。

2024-12-31 15:45:57 400

原创 FreeRTOS :三种方案,使用队列存放特别大的字符串

分块传输:适用于需要严格控制内存使用的场景。动态内存分配:适合处理不定长的大字符串,但需注意内存管理和线程安全。环形缓冲区:提供高效的内存利用和简单的代码逻辑,适合流式数据处理。

2024-12-31 15:42:12 502

原创 PendSV 和 SysTick 在嵌入式系统中的作用和区别

PendSV是一种可编程中断,主要用于任务之间的切换和同步,适合多核处理器上的任务调度。SysTick是一个系统定时器,用于生成定期中断,支持时间管理和任务的定时调度,在 RTOS 中广泛应用。

2024-12-29 15:54:48 287

原创 FreeRTOS: 命名约定

x用于基本数据类型或简单值。px用于指向某种类型的指针。pux用于指向无符号字符数组的指针。其他前缀如ucusulpvpc分别用于特定类型的数据。

2024-12-29 10:32:39 346

原创 FreeRTOS :动态和静态创建任务

FreeRTOS 提供了两种创建任务的方式:动态创建和静态创建。这两种方式的主要区别在于内存分配的时机和灵活性。

2024-12-29 10:26:22 249

原创 一文简单了解MQTT消息协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是一种轻量级的消息协议,专为低带宽、高延迟或不可靠的网络环境设计。它广泛应用于物联网(IoT)、移动应用和其他需要高效数据传输的场景。以下是 MQTT 协议的应用及其特点的详细介绍。

2024-12-28 22:26:46 705

原创 CAN总线: 非破坏性仲裁

第一位:C 因为发送了隐性电平1,而总线电平是显性电平0,所以在第一位就退出了竞争。第二位:A 和 B 继续竞争,因为它们都发送了隐性电平1,总线电平也是1。第三位:A 发送了显性电平0,而 B 发送了隐性电平1,导致 B 检测到冲突并退出竞争,最终 A 获得了总线控制权。

2024-12-27 12:07:18 893

江科大STM32 入门教程,初学、复习皆可用

适用嵌入式学习,从业者。内容全面详细

2024-12-14

空空如也

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

TA关注的人

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