通信协议篇四:CAN 总线原理与通信机制基础详解

CAN(Controller Area Network,控制器局域网)是 Bosch 在 1980 年代提出的一种高可靠串行总线。它采用差分传输,支持多主通信,通过报文 ID 完成仲裁,并带有较完整的错误检测机制。 ℹ️ 本文范围:本文主要介绍经典 CAN。文中会顺带提到 CAN FD 和 CAN 2.0A / 2.0B,但重点仍然是基础概念、帧格式、仲裁和同步机制。 1. 特点与应用背景 CAN
通信协议篇四:CAN 总线原理与通信机制基础详解

通信协议篇三:SPI 通信原理详解之时钟模式、时序与W25Q32示例

SPI 是嵌入式开发里最常见的高速串行总线之一。相比 I2C 和 UART,SPI 结构更直接、速度更高,也更适合和 Flash、ADC、DAC、显示屏等板级外设通信。本文从底层原理、时钟模式、通信时序到 W25Q32 读 ID 实验,系统讲清 SPI 到底是怎么工作的。 ℹ️ 一句话先讲清楚:SPI(Serial Peripheral Interface,串行外设接口)是最早由摩托罗拉(Moto
通信协议篇三:SPI 通信原理详解之时钟模式、时序与W25Q32示例

C语言循环队列

循环队列(Circular Queue / Ring Buffer) 1. 定义 循环队列是基于定长数组实现的队列。其核心思想是将数组视为首尾相接的环形空间,通过让 front / rear 用 % N 循环移动复用存储单元。 在嵌入式系统中,循环队列常称为 Ring Buffer(环形缓冲区),常用于:UART 接收缓冲、按键事件、日志缓存。。 2. 为什么需要循环队列 顺序队列若采用数组实现,
C语言循环队列

C语言位运算笔记

C 语言位运算是嵌入式开发的基础能力。对于 STM32 来说,GPIO、UART、SPI、定时器等外设最终都是通过寄存器中的 bit 位来控制的。掌握位运算,才能真正理解 HAL 库背后的底层逻辑,并具备直接操作寄存器的能力。 💡 核心结论 嵌入式里最常见的 4 个动作就是:置位、清位、翻转、读位。 六大位运算符速览 运算符 名称 示例 说明 & 按位与 a & b 同 1 为 1
C语言位运算笔记

通信协议篇二:I2C 通信协议详解

I2C 通信协议(Inter-Integrated Circuit)是飞利浦设计的两线同步串行总线,仅用 SCL(时钟)和 SDA(数据)两根线即可实现一主多从通信。本文结合 ESP32-C3 + SHT40 实战,从 I2C 通信协议时序原理到 MicroPython 代码逐层拆解。 一、I2C 通信时序详解 ℹ️ 四个核心信号 信号 解决的问题 触发条件 START 通信开始边界 SCL 高电
通信协议篇二:I2C 通信协议详解

C语言进阶:双向循环链表与哨兵头节点

C语言进阶:双向循环链表与哨兵头节点 双向循环链表与哨兵节点是嵌入式 C 语言开发中最实用的链表组合。链表通过指针串联离散内存节点,弥补了数组在插入/删除上的不足。本文重点讲解双向循环链表与哨兵头节点设计——这是嵌入式系统中最常用的链表形态。 一、数组 vs 链表 特性 数组 链表 内存布局 连续,随机访问 O(1) 离散,需遍历 O(n) 插入/删除 需移动数据 O(n) 只改指针 O(1) 大
C语言进阶:双向循环链表与哨兵头节点

C语言结构体:定义、访问、指针、嵌套

C语言结构体是 C 语言中最常用的复合数据类型之一。它不仅能把多个不同类型的数据组织成一个整体,还经常出现在函数传参、链表设计、设备寄存器映射、通信协议解析等场景中。理解结构体,基本就掌握了 C 语言中“描述复杂对象”的核心手段。 一、C语言结构体是什么? C语言结构体是一种用户自定义的数据类型,可以将多个不同类型的数据组合在一起,形成一个逻辑整体。它特别适合描述一个对象的多种属性,比如学生的姓名
C语言结构体:定义、访问、指针、嵌套

C语言弱链接函数完全指南:__weak原理与STM32实战

1. 什么是弱链接函数 __weak 修饰的函数属于弱符号,用于提供可被覆盖的默认实现。当链接时发现同名的强符号函数,链接器会优先使用强符号,弱符号被忽略。 ℹ️ 典型应用:HAL 库提供空的弱回调函数,用户在自己的代码中实现同名函数即可覆盖,无需修改库代码。 2. 语法格式 GCC 原生语法是 __attribute__((weak)),通常会自定义宏 __weak 来简化使用: #define
C语言弱链接函数完全指南:__weak原理与STM32实战

STM32 中断系统详解:NVIC、EXTI、优先级分组与 HAL 库实战

STM32 中断系统详解 1. 什么是中断? CPU 正在执行主程序,突然外部或内部事件发生(按键按下、定时器溢出、串口收到数据……),CPU 暂停当前工作,跳去处理紧急事件,处理完再回来继续。 中断响应与返回流程 💡 核心思想:中断让 CPU 不用\"傻等\",而是事件驱动——有事才处理,没事干正事。 2. NVIC — 嵌套向量中断控制器 NVIC = Nested Vectored Interr
STM32 中断系统详解:NVIC、EXTI、优先级分组与 HAL 库实战

C语言指针详解(上):指针变量、函数指针

C语言指针详解(上):指针变量、函数指针 本篇讲解指针的核心概念与使用方法。关于指针安全(空指针、野指针)和嵌入式实战用法,请看《C语言指针详解(下)》。 一、指针基础 1.1 定义 指针变量是一个特殊的变量,它存储的值是另一个变量的内存地址(即地址编号),而不是数据本身。我们平时说的"指针",通常指的就是这个地址值本身。 ℹ️ 指针 vs 指针变量 指针:一个内存地址(一个数
C语言指针详解(上):指针变量、函数指针