Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Embedded Systems Notes

嵌入式系统学习笔记,涵盖 STM32 开发、FreeRTOS 实时操作系统、PID 控制算法和嵌入式 Linux。笔记以 Markdown 编写,配合大量原理图和代码示例,适合嵌入式开发入门和进阶参考。


目录

专题 路径 内容概要
STM32 STM32/ 标准库 + HAL 库双版本,覆盖全部常用外设
FreeRTOS FreeRTOS/ 从任务调度到内存管理,含实战项目笔记
PID 控制 PID/ 基础理论、算法改进、双环 PID、平衡车应用
嵌入式 Linux Linux/ Ubuntu 入门、ARM 裸机开发、驱动开发

STM32 笔记

STM32F103 系列开发笔记,包含标准外设库HAL 库两条学习路线。

标准库 (STM32/标准库/new/)

系统性整理的外设驱动笔记,每篇包含原理讲解 + 寄存器分析 + 代码示例:

  • 01-中断与NVIC — 中断优先级分组、NVIC 配置、EXTI 外部中断
  • 02-ADC模数转换 — ADC 工作原理、单次/连续/扫描模式、DMA 传输
  • 03-DMA直接存储器存取 — DMA 通道配置、内存到外设/外设到内存传输
  • 04-USART串口通信 — 波特率计算、中断收发、printf 重定向
  • 05-I2C总线通信 — I2C 协议时序、软件/硬件 I2C、EEPROM 读写
  • 06-SPI总线通信 — SPI 四种模式、全双工通信、W25Q Flash 驱动
  • 07-WDG看门狗 — 独立看门狗、窗口看门狗、喂狗策略
  • 08-PWR电源控制与PWM — 低功耗模式、PWM 输出、舵机/电机控制
  • 09-BKP备份与RTC实时时钟 — 备份寄存器、RTC 日历、掉电保存
  • 10-Flash闪存 — 内部 Flash 读写、双字编程、掉电参数存储

另有 backup/ 目录保留了原始课堂笔记版本。

HAL 库 (STM32/HAL库/)

基于 STM32CubeMX 的 HAL 库开发笔记:

  • 01-STM32 HAL库开发 — CubeMX 工程创建、HAL 库架构、回调机制
  • 02-时钟系统 — HSE/HSI/PLL 时钟树配置、系统时钟切换
  • 03-GPIO输出模式 — 推挽/开漏输出、最大输出速度等级
  • 06-GPIO输入模式 — 上拉/下拉/浮空输入、按键消抖
  • 07-LED闪灯 — GPIO 输出实战
  • 08-按钮实验 — GPIO 输入实战
  • 09-HAL中断 — NVIC 配置、HAL 回调、中断优先级设计
  • 10-UART串口 — HAL UART 收发、DMA 接收、空闲中断
  • 11-I2C — HAL I2C 驱动、HAL_MEM_Write/Read
  • 12-SPI — HAL SPI 全双工通信

通用技巧 (STM32/通用知识/)

  • 状态机编程 — 状态机在嵌入式中的应用模式
  • 定时器实现非阻塞式程序 — 用定时器替代 Delay,实现多任务并发

FreeRTOS 笔记

从零开始学习 FreeRTOS 实时操作系统,分为系统性笔记项目实战笔记两部分。

系统性笔记

按学习路径组织,从基础到进阶:

基础概念 (01_基础概念/)

  • 任务创建与调度、任务状态机(就绪/运行/阻塞/挂起)
  • Cortex-M3/M4 中断与 FreeRTOS 的关系

核心机制 (02_核心机制/)

  • 队列(Queue)— 任务间消息传递、生产者-消费者模型
  • 信号量(Semaphore)— 二值信号量、计数信号量、互斥量
  • 事件组(EventGroup)— 多条件同步、按位等待
  • 任务通知(Task Notification)— 轻量级替代队列/信号量
  • 软件定时器 — 回调式定时任务

进阶主题 (03_进阶主题/)

  • 内存管理 — heap_1 到 heap_5 五种方案对比
  • 资源管理 — 优先级继承、临界区、调度器挂起
  • 中断管理 — FromISR API、延迟中断处理
  • 低功耗 — Tickless Idle 模式

源码与工程 (04_源码与工程/)

  • FreeRTOS 内核源码结构分析
  • 移植到 STM32F103 的完整步骤
  • FreeRTOSConfig.h 配置项详解
  • 堆栈溢出检测与调试技巧

项目实战笔记

基于游戏项目的 FreeRTOS 实践 (个人笔记/游戏设计/)

  • 队列实现多设备输入处理(10 篇)
  • 信号量控制资源访问
  • 互斥量解决优先级反转
  • 事件组同步多任务
  • 任务通知实现高效通信
  • 软件定时器管理游戏循环
  • 资源管理避免死锁

视频课程笔记 (视频笔记/, 05_课程笔记/, 百问网资料/)

  • 配套视频课程的详细笔记,含大量原理图和代码注释

PID 控制算法笔记

从基础理论到工程实践的完整 PID 学习路径:

  • 01_PID基础理论 — 比例/积分/微分的作用、位置式与增量式公式推导
  • 02_PID算法改进 — 积分分离、积分限幅(抗饱和)、微分先行、不完全微分
  • 03_程序优化 — 定点数运算、查表法、死区处理、输出限幅的工程实现
  • 04_双环PID的基本理论 — 串级 PID 结构(外环 + 内环)、参数整定方法
  • 05_平衡车基于MPU6050的俯仰角和互补滤波 — 陀螺仪 + 加速度计融合、互补滤波器设计
  • 06_平衡车的PID控制之角度环 — 直立环 PD 控制、机械中值校准
  • 07_PID的速度环 — 速度环 PI 控制、角度环 + 速度环串级调试

嵌入式 Linux 笔记

Ubuntu 入门 (Linux/正点原子Ubuntu入门篇/)

Linux 基础操作,适合零基础入门:

  • 文件系统结构、目录管理、文件权限
  • vim 编辑器使用、GCC 编译、Makefile 编写
  • 用户管理、网络配置、SSH 远程连接
  • 软件包管理(apt)、Shell 脚本基础

ARM 裸机开发 (Linux/ARM裸机开发/)

从零搭建 ARM Linux 开发环境:

  • ARM 处理器架构(Cortex-A 系列)
  • 交叉编译工具链搭建
  • Bootloader(U-Boot)编译与烧录
  • Linux 内核配置与编译
  • 设备树(Device Tree)基础

驱动开发笔记 (Linux/ai总结笔记/)

系统性的 Linux 驱动开发笔记(72 篇),覆盖:

  • 字符设备驱动框架(open/release/read/write/ioctl)
  • GPIO 驱动(LED/按键/蜂鸣器)
  • 中断处理(软中断、tasklet、工作队列)
  • 平台设备驱动(platform_driver)
  • 设备树与驱动绑定
  • I2C/SPI 设备驱动
  • 并发控制(原子操作、自旋锁、信号量、互斥体)
  • 内核定时器与延时
  • 输入子系统(input subsystem)
  • 网络设备驱动基础
  • 调试技巧(printk、proc 文件系统、oops 分析)

快速导航(MOC)

Obsidian Map of Content 链接,快速定位相关笔记:


笔记结构

embedded-notes/
├── STM32/                    # STM32 开发笔记
│   ├── 标准库/new/           #   标准外设库(10 篇系统性笔记)
│   ├── 标准库/backup/        #   标准库原始课堂笔记
│   ├── HAL库/                #   HAL 库 + CubeMX(12 篇)
│   └── 通用知识/              #   状态机编程、非阻塞设计
├── FreeRTOS/                 # FreeRTOS 实时操作系统
│   ├── 01_基础概念/           #   任务、调度、中断
│   ├── 02_核心机制/           #   队列、信号量、事件组、任务通知
│   ├── 03_进阶主题/           #   内存管理、资源管理、低功耗
│   ├── 04_源码与工程/         #   内核源码、移植、配置
│   ├── 个人笔记/游戏设计/     #   实战项目(游戏中的 FreeRTOS 应用)
│   └── 视频笔记/              #   配套视频课程笔记
├── PID/                      # PID 控制算法
│   ├── 01-03_基础与改进       #   理论、改进、程序优化
│   ├── 04_双环PID             #   串级 PID 控制
│   └── 05-07_平衡车应用       #   MPU6050 + 互补滤波 + 直立环 + 速度环
├── Linux/                    # 嵌入式 Linux
│   ├── 正点原子Ubuntu入门篇/  #   Linux 基础操作
│   ├── ARM裸机开发/           #   ARM + U-Boot + 内核 + 设备树
│   └── ai总结笔记/            #   驱动开发(72 篇)
├── Assets/                   # 图片资源
├── _MOC_FreeRTOS.md          # FreeRTOS 知识地图
├── _MOC_STM32.md             # STM32 外设索引
└── _MOC_PID.md               # PID 算法索引

技术栈

MCU:         STM32F103 (Cortex-M3) / STM32L4xx (Cortex-M4F)
RTOS:        FreeRTOS (CMSIS-RTOS V2)
IDE:         Keil MDK-ARM / STM32CubeMX / VS Code
调试器:       ST-Link / J-Link
Linux:       Ubuntu 20.04 / ARM Cortex-A / Buildroot
通信协议:     UART / I2C / SPI / CAN
控制算法:     PID / 互补滤波 / 卡尔曼滤波

License

MIT License

About

嵌入式系统学习笔记 | STM32 + FreeRTOS + PID + Linux

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors