STM32 总线架构详解:ICode/DCode/System/DMA 工作原理

STM32 总线架构采用改进型哈佛架构,CPU 通过 ICode、DCode、System 三条通路工作,DMA 也能作为主设备参与访问;AHB/APB 是片上总线分层,连接不同速率的外设。本文将从访问通路和片上互连两个层次,帮你建立清晰的认知。 改进型哈佛架构:为什么要多条总线 架构 特点 冯·诺依曼 指令和数据共享一条路,易瓶颈 经典哈佛 指令和数据分路,但结构死板 STM32 改进型哈佛 统
STM32 总线架构详解:ICode/DCode/System/DMA 工作原理

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 Interrupt Contro
STM32 中断系统详解:NVIC、EXTI、优先级分组与 HAL 库实战

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

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

C语言关键字—typedef/sizeof/struct/union/enum/inline笔记(下)

C语言进阶 — 关键字详解(下) 上篇:C语言关键字(上)—— static、extern、volatile、const。 本篇聚焦嵌入式开发中与类型定义、编译优化、数据组织相关的关键字:typedef、sizeof、register、inline、enum、struct、union。 5 typedef 关键字 💡 核心思想 typedef 为已有类型创建一个别名,提高代码可读性和可移植性。 5
C语言关键字—typedef/sizeof/struct/union/enum/inline笔记(下)

C语言关键字—static/extern/volatile/const 笔记(上)

C语言进阶 — 关键字详解(上) C 语言共有 32 个关键字(C89)/ 44 个(C11)。本篇聚焦嵌入式开发中与存储、链接、优化直接相关的四个核心关键字:static、extern、volatile、const。 下篇:C语言关键字(下)—— typedef、sizeof、register、inline、enum、struct、union。 1 static 关键字 💡 核心思想 stati
C语言关键字—static/extern/volatile/const 笔记(上)

C 语言内存管理(一):内存段与布局(.text/.data/.bss/堆/栈)

内存管理 — 内存段与布局 内存管理是嵌入式 C 语言开发的核心难点。本文聚焦于程序内存布局、内存段的逻辑与物理映射、以及嵌入式内存优化实践。 1 程序内存布局 1.1 内存段的基本概念 C 程序运行时,内存被划分为不同的区域,每个区域存储特定类型的数据: 代码段(.text):存放程序的机器指令,只读 只读数据段(.rodata):存放常量和字符串字面量,只读 已初始化数据段(.data):存放
C 语言内存管理(一):内存段与布局(.text/.data/.bss/堆/栈)

FreeRTOS阅读源码之编程风格

FreeRTOS 阅读源码之编程风格 一、编程风格 FreeRTOS 严格遵循匈牙利命名法——看到名字就能推断出返回值类型、所属模块和参数类型。 变量看前缀,类型一目了然 → u/c/s/l/x/p 函数三段式,返回+模块+动作 → vTaskDelay / xQueueSend 宏看开头词,就知在哪定义 → config/pd/port/task 💬 匈牙利命名法已不是现代必用规范(IDE 弱化
FreeRTOS阅读源码之编程风格

嵌入式通信基础概念

嵌入式通信基础概念 在深入各种总线之前,先把几个容易混淆的基础概念彻底搞清楚。这些是理解所有通信协议的"元知识"。 1. 同步 vs 异步:到底谁在"喊节拍"? ℹ️ 一句话区别:有没有一根专门的时钟线来统一收发双方的节奏。 对比项 同步通信 异步通信 时钟线 有(如 I2C 的 SCL、SPI 的 SCLK) 没有 同步方式 主机通过时钟线"喊节
嵌入式通信基础概念