【项目思维】这是一份嵌入式软件开发的大纲(简化版)

发布于:2025-09-03 ⋅ 阅读:(20) ⋅ 点赞:(0)

这是一份嵌入式软件开发的大纲(简化版),当然,如果你想要在这个专业上更进一步,目前的技术栈是远远不够的,项目我也仅仅介绍了项目运作的思维模型。后续如果大家需要,我会继续写下去,运用日常手搓的小项目和真实的大型项目 向您介绍项目开发的完整流程。

首先,我们要掌握基本的C语言语法:
在这里插入图片描述
因为嵌入式开发一般是跑在Linux系统上的,所以我们需要学习 Linux 的用法:

在这里插入图片描述

然后,我们开始进入单片机,需要理解单片机的大体框架(单片机都有哪些):

在这里插入图片描述

我们最常见的一些单片机(GD32,ESP32,STM32…),我们需要深入到单片机的内部:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

因为 XMIND 绘图空间有限,仅仅写了一点问答示意,实际的技术问答非常多,在面试中会逐一遇到这些内容,所以单片机的外设部分一定要精通。

然后我们进入Linux驱动 / 理解Linux内核,推荐书籍:

《深入理解Linux内核》作者:DANIEL P.BOVET & MARCO CESATI 著 —— 中国电力出版社

在这里插入图片描述
在这里插入图片描述
此处的内容写的非常简化,其中还有更多的技术内容,您可以在书的目录上找到更多分支章节。

🧭 一、嵌入式系统的分类

✅ ① MCU(微控制器)

MCU = Microcontroller Unit,适用于实时控制、低功耗场景。

📌 按位数分类:

位数 代表架构 典型芯片 特点
8位 8051 C51 架构简单,资源极少,学习入门
16位 STC89、STC15 STC 系列 C51升级版,性能略高
32位 ARM Cortex-M STM32、GD32、ESP32 主流嵌入式开发平台
✅ ② MPU(嵌入式 Linux)

MPU = MicroProcessor Unit,通常运行 Linux / Android 等操作系统,适合图形界面、网络通信、AI 等。

📌 常见 MPU 芯片:

平台 芯片 厂商 特点
STM32MP1 STM32MP157 ST 支持 Linux + Cortex-M 协处理
RK 系列 RK3566、RK3588 瑞芯微 多媒体强、NPU支持
MTK 平台 MT6765 等 联发科(MTK) 多用于手机/IoT
全志平台 V3S、A133 全志科技 廉价、高性价比
海思平台 Hi3516、Hi3559 华为海思 安防/摄像头方案用得多
✅ ③ DSP(数字信号处理器)

专门用于高速信号处理、音频/图像/雷达等领域。

厂商 典型芯片 应用场景
TI C6000/C2000 电机控制、雷达信号处理
ADI SHARC 音频、滤波处理
✅ ④ FPGA(现场可编程逻辑门阵列)

用于硬件级并行逻辑控制,可实现软硬件协同或完全自定义逻辑。

厂商 典型芯片
Xilinx Spartan、Zynq
Intel (Altera) Cyclone、MAX

二、总览:单片机内容知识树结构

我将单片机的知识树系统整理如下五大板块:

模块 说明
① 初级外设 基础硬件控制,适合入门:GPIO、UART、ADC、PWM 等
② 高级外设 用于图像/存储/通信等复杂系统:CAN、SDIO、DCMI 等
③ 操作系统 基于 MCU 的 RTOS:FreeRTOS、RT-Thread 等
④ 外设总线 (板级) 各种总线协议对应的典型外设使用
⑤ 板间通信 多板卡/模块间通信方式:USB、485、WIFI、蓝牙等
📦 ① 初级外设(基础控制类)
编号 模块 说明
1 开发环境 Keil、VSCode + 插件、PlatformIO
2 GPIO 控制 高低电平输出、LED、按键输入等
3 时钟树 SYSCLK、APB1CLK、APB2CLK 配置,影响外设速度
4 中断控制器 NVIC 配置,外部中断、优先级管理
5 定时器 / PWM 定时触发、中断 / 控制舵机、LED 呼吸灯
6 ADC 模拟量采集(电压、光敏、温度)
7 DMA 内存外设之间高速搬运
8 UART 串口通信,串口调试、打印日志
9 I2C EEPROM、OLED、RTC、音频芯片
10 SPI Flash、OLED、SD 卡等高速外设通信
🧩 ② 高级外设(复杂接口类)
外设 用途 说明
SDIO 协议 SD卡高速接口 比 SPI 快,需文件系统支持
DCMI 摄像头图像采集 STM32F4+ 常见,图像识别
FSMC 与并口 TFT 屏接口 外部存储器控制器
CAN 总线 工业通信 车载、工业自动化广泛使用
RS-485 长距离通信 差分信号、抗干扰强
WIFI/蓝牙 无线通信 ESP32 内置,STM32 需外挂模块
🧩 ③ 操作系统支持(RTOS)
系统 特点 适合芯片
FreeRTOS 轻量级、跨平台、工业应用广泛 STM32、ESP32、GD32
RT-Thread 国产 RTOS,图形化配置,组件丰富 STM32、GD32、RISC-V
ESP-IDF 乐鑫官方开发框架,内置 RTOS ESP32 专用

📌 单片机操作系统支持 学习重点:

  • 任务调度(优先级、抢占)
  • 互斥锁 / 信号量 / 队列 …
  • 软件定时器
  • 系统 SysTick 和节拍精度
🔌 ④ 外设总线(板级接口 + 模块接入)
接口 对应模块 技术要点
GPIO 红外、人体感应 数字电平检测
单总线 DHT11 温湿度 单线协议,需时序控制
UART WIFI(ESP8266),4G,GPS 串口通信
I2C OLED、wm8978 音频芯片、触摸屏 地址访问,主从模式
SPI OLED、RC522、SD卡 高速,主从模式,4线
SDIO SD 卡 高速模式,需 FatFS
FSMC TFT 屏 并口屏幕,需大量引脚
MIPI/DSI/DCMI 摄像头 / 屏幕 图像采集、显示接口

📌 常见模块推荐:

  • OLED 0.96寸(I2C/SPI)
  • RC522(SPI)
  • DHT11(单总线)
  • SD 卡(SPI/SDIO)
  • 摄像头 OV2640(DCMI)
🧩 ⑤ 板卡之间的通信方式
通信方式 特点 使用场景
USB 高速、即插即用 USB转串口、HID
UART 简单、可靠 单片机间通信、调试
RS-485 抗干扰、远距离 工厂总线、楼宇控制
RS-232 老式串口协议 PC通讯、工业仪表
WIFI 无线、需要协议栈 模块间远程通信
蓝牙 近距离无线 配对通信、BLE传感器等

📌 一些拓展问题解答(如图示):

  1. 通信速度排序:USB > WIFI > SPI > UART > I2C > 485 > 单总线
  2. 通信距离排序:485 > RS232 > WIFI > 蓝牙 > UART/I2C
  3. 232 与 485 的区别
    • 232 为单端通信,点对点;最大距离约15米
    • 485 为差分通信,支持多点通信,最大距离可达1200米
  4. SPI 传输距离短的原因
    • 高速信号无差分、抗干扰差
    • 可通过加缓冲芯片、屏蔽线、降低速率、加 CRC 检错等方式提升可靠性

单片机阶段推荐学习路径:

阶段 内容 推荐平台
基础阶段 GPIO、UART、ADC、PWM、I2C STM32F103 / GD32F103
提高阶段 DMA、FreeRTOS、SPI、OLED STM32F407 / ESP32
项目阶段 音频、摄像头、WIFI、SD卡 ESP32 / STM32F4 + 模块
通信阶段 485、CAN、蓝牙、WIFI通信 GD32+RS485 / ESP32
系统阶段 RTOS + 多任务 + 外设调度 RT-Thread / FreeRTOS

单片机开发就像搭积木:先学会控制每个外设模块 + 掌握系统调度能力 + 精通通信协议,然后你就能搭建出任意嵌入式应用系统。


三、总览:《Linux 驱动开发知识结构树(初级 + 高级)》

📘 Linux 驱动开发知识树(总体结构)
Linux 驱动开发
├── 初级阶段
│   ├── 1. 系统移植与内核裁剪
│   ├── 2. 字符设备驱动框架
│   ├── 3. 设备树写法
│   ├── 4. GPIO 子系统 / pinctrl 子系统
│   ├── 5. 平台设备驱动模型
│   ├── 6. 中断处理机制
│   └── 7. select / poll 等应用层接口
│   └── 8. ...
├── 高级阶段
│   ├── 1. input 子系统
│   ├── 2. I2C 子系统
│   ├── 3. SPI 子系统
│   ├── 4. 混杂设备子系统(misc)
│   ├── 5. DRM 显示驱动框架
│   ├── 6. 触摸屏驱动(结合 input + I2C)
│   ├── 7. V4L2 视频驱动框架
│   ├── 8. 音频驱动(ASoC 框架)
│   └── 9. USB 驱动框架 / 按键设备驱动
│   └── 10. ...

由于技术无远弗届,所以学到了常用的技术之后就可以开始进入项目阶段了,后续的技术在项目中用到的时候再去补充技术栈。
🧱 初级阶段

📌 1. 系统搭建与内核裁剪

  • uboot 移植、内核移植
  • uboot 启动流程分析
  • 内核启动流程、根文件系统制作
  • menuconfig 配置内核、设备树编写
  • 交叉编译工具链准备

📌 2. 字符设备驱动编写

  • 编写最小字符设备驱动框架
  • 注册主设备号:register_chrdev
  • 创建设备节点:device_create
  • file_operations 操作集:
    • openreadwriteioctl
    • 提供用户空间访问入口

📌 3. 设备树的写法

  • 设备节点定义格式
  • compatiblereginterrupts 等属性
  • 如何绑定驱动和设备树节点

📌 4. GPIO 子系统 / pinctrl 子系统

  • GPIO 描述与申请方式
  • GPIO 子系统接口使用
  • pinctrl 子系统配置方法

📌 5. 平台设备驱动模型

  • platform_device / platform_driver
  • 资源管理:IOIRQclock
  • 设备和驱动的匹配机制

📌 6. 中断上下半部机制

  • 中断注册与释放
  • 上半部(快速处理)、下半部(tasklet/workqueue

📌 7. select / poll 机制

  • 阻塞与非阻塞通信
  • 驱动层 poll 实现
  • 应用层 select 使用

🧱 高级阶段

📌 1. input 子系统

  • 驱动键盘、触摸屏、鼠标
  • input_event 上报机制
  • input_register_device 流程

📌 2. I2C 子系统

  • i2c_driver / i2c_client 注册
  • I2C 总线驱动模型
  • i2c_transfer / i2c_smbus_xxx 使用

📌 3. SPI 子系统

  • spi_driver / spi_device
  • spi_transfer / spi_sync 接口
  • 典型 SPI 外设驱动(如 Flash)

📌 4. 混杂设备子系统

  • misc_register / misc_deregister
  • 简化字符设备开发流程
  • 应用于 LED、蜂鸣器、按键等

📌 5. DRM 显示驱动框架

  • DRM 架构基本组成:CRTC、Encoder、Connector、Plane
  • 屏幕驱动开发流程
  • 分辨率配置 / 缓冲区管理

📌 6. 触摸屏驱动

  • I2C 协议通信
  • input 子系统事件上报
  • 多点触控处理

📌 7. V4L2 视频驱动框架

  • 摄像头驱动框架
  • video_device 注册
  • V4L2 ioctl 实现(VIDIOC_REQBUF 等)

📌 8. ASoC 音频驱动

  • Codec 驱动 / 平台驱动
  • DAI(音频接口)配置
  • 声卡注册流程

📌 9. USB 驱动

  • USB 总线枚举流程
  • USB 驱动模型(usb_driver
  • 按键 / 存储类设备驱动编写

📘 推荐硬件平台:

平台 说明
RK3568 工业级,支持多媒体、Linux 驱动开发
STM32MP157 Cortex-A7 + Cortex-M4,适合 Linux + RTOS
IMX6ULL NXP 主推的嵌入式 Linux 教学平台
全志 V3S 带 DDR 的国产芯片,主打低成本 Linux 驱动开发

以上。这是一份嵌入式软件开发的大纲(简化版)汇总推荐。

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!


网站公告

今日签到

点亮在社区的每一天
去签到