单片机/嵌入式修行之路
第一阶段:基础筑基
这个阶段的目标是建立坚实的计算机和电子技术基础,为后续学习扫清障碍。
1、C语言编程
为什么? C语言是嵌入式开发的母语,效率高、贴近硬件。
学什么?
- 基本语法:变量、运算符、流程控制、函数。
- 核心重点:指针、数组、结构体、内存管理(malloc/free)、位运算。 这是C语言的灵魂,必须深刻理解。
- 预处理器、头文件、多文件编程。
怎么学? 在PC上编写程序,使用GCC编译,用调试器(如GDB)调试。可以做一些小练习,如学生管理系统、字符串处理工具等。
推荐:小甲鱼—带你学C带我飞:
带你学c带你飞【小甲鱼c语言入门教学】_哔哩哔哩_bilibili
2、计算机基础
数字电路: 了解与、或、非等逻辑门,触发器、寄存器、组合逻辑和时序逻辑的概念。这是理解CPU和外围电路如何工作的基础。
计算机组成原理: 了解CPU是如何工作的(取指、译码、执行)、内存、总线、I/O接口的概念。
3、基础硬件知识
电路分析基础: 欧姆定律、电容、电感、二极管、三极管(开关作用)的基本概念。
工具使用: 学会使用万用表,初步了解示波器。
模拟电子技术—郑益慧
模电教程—郑益慧_哔哩哔哩_bilibili
数字电路—王红
视频去哪了呢?_哔哩哔哩_bilibili
第二阶段:入门实战
这个阶段的目标是选择一个具体的单片机平台,亲手操作,建立嵌入式开发的直观感受。
选择一款主流单片机,推荐: STM32系列(基于ARM Cortex-M内核)。这是当前绝对的主流,资料丰富,就业需求大。备选: ESP32(适合物联网方向,自带Wi-Fi/蓝牙),或者从经典的51单片机入门(简单,但已逐渐被淘汰)。
零基础入门学习arduino单片机_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Ni4y157p9?spm_id_from=333.999.0.0
江科大:51单片机入门(好评最多)
江科大单片机
https://blog.csdn.net/qq_40838412/article/details/124656716
开发环境搭建
STM32: 安装 STM32CubeIDE。这是ST官方推出的免费集成开发环境,集成了编译器、调试器和图形化配置工具,对新手非常友好。
stm32入门 正点原子mini板精英板教学视频完整版_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1at4y1Y7bv?spm_id_from=333.999.0.0
【野火】stm32 零基础入门 霸道/指南者/MINI 入门篇 中级篇_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1mT4y1T7ad?spm_id_from=333.999.0.0
【野火】stm32 零基础入门 霸道/指南者/MINI 提高篇 大师篇_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1Ut4y1673t?spm_id_from=333.999.0.0
核心技能突破
- GPIO(通用输入输出): 实现经典的“点灯”(输出),以及读取按键状态(输入)。理解推挽、开漏等模式。
- 中断系统: 理解中断的概念,学会配置外部中断,这是事件驱动编程的基础。
- 定时器/计数器: 学会使用定时器实现精准延时、产生PWM波(控制舵机、电机调速)、捕获脉冲。
- 串口通信: 学会配置串口,实现单片机与PC(通过串口助手)或其他设备的数据收发。这是最基础的调试和通信方式。
- 调试技巧: 学会使用仿真器(如ST-Link)进行在线调试,设置断点、单步执行、查看变量和寄存器。这是最重要的技能之一,能极大提高解决问题效率。
第三阶段:进阶与外设
掌握了核心功能后,开始学习与各种外部设备传感器进行通信,让单片机具备“感知”和“控制”的能力。
常用通信协议:
- I2C: 理解主从设备、SCL、SDA线。学会驱动OLED屏幕、MPU6050陀螺仪等I2C设备。
- SPI: 理解主从设备、MISO、MOSI、SCK、CS线。学会驱动FLASH芯片、TFT屏幕等高速设备。
- ADC/DAC: 模拟与数字世界的桥梁。学会读取电位器的电压值(ADC),输出模拟电压(DAC)。
常用传感器与执行器
- 传感器: 温湿度传感器(DHT11、SHT30)、光照传感器、超声波测距模块、红外接收等。
- 执行器: 舵机、直流电机(通过电机驱动模块如TB6612控制)、继电器。
项目实践
- 制作一个智能温湿度计,在OLED上显示数据。
- 制作一个循迹/避障小车。
- 制作一个通过手机APP控制的智能台灯。
第四阶段:软件工程与操作系统
当项目变得复杂时,你需要更强大的软件架构和系统来管理它。
1、模块化与软件设计
- 将代码按功能拆分为独立的
.c和.h文件。 - 学习状态机编程,处理复杂的业务流程。
2、实时操作系统
为什么需要RTOS?
当需要同时处理多个任务(如一边采集数据,一边通信,一边控制)时,裸机编程会变得非常复杂且难以维护。RTOS提供了任务调度、同步、通信等机制。
学什么?
- 任务(Task)的创建与管理。
- 任务间通信: 信号量、消息队列、事件标志组。
- 任务间同步: 互斥锁。
- 内存管理: 动态内存分配。
推荐系统: FreeRTOS,它是STM32CubeIDE内置的,资料最多。或者 μC/OS。
[野火]《FreeRTOS内核实现与应用开发实战指南》_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV16K4y157Tp?spm_id_from=333.999.0.0
【野火】《uCOS-III内核实现与应用开发实战指南》视频教程_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1FA411W7UE?spm_id_from=333.999.0.0
3、项目实践
用FreeRTOS重新实现你的智能小车:一个任务控制电机,一个任务处理传感器数据,一个任务负责蓝牙通信。
第五阶段:高级与系统整合
这个阶段的目标是向更复杂的嵌入式系统迈进,并向软件底层和硬件设计延伸。
1、Linux嵌入式开发
为什么? 对于需要复杂网络、图形界面(GUI)或大量数据处理的场景,跑Linux的系统(如ARM Cortex-A内核处理器)是更好的选择。
学什么?
- Linux基本使用: 命令行操作、Shell脚本。
- 嵌入式Linux开发环境搭建: 交叉编译工具链。
- 系统移植: Bootloader(如U-Boot)、Linux内核的配置与编译、根文件系统的制作。
- 驱动开发: 学习Linux设备驱动模型,能够编写简单的字符设备驱动。
- 应用编程: 在嵌入式Linux上编写C/C++应用程序,进行文件操作、多进程/多线程编程、网络编程等。
野火Linux入门学习:第一期-0基础入门篇_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1g54y1x7d8?spm_id_from=333.999.0.0
2、硬件设计入门
- 学习使用 KiCad 或 Altium Designer 等EDA软件。
- 能够阅读和理解芯片数据手册。
- 尝试自己设计一个简单的STM32最小系统板。
Altium Designer 17 绘制51单片机开发板PCB全程实战视频0基础入门_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1eK4y1L7BS?spm_id_from=333.999.0.0
Altium Designer16 绘制STM32 pcb开发板0基础入门_哔哩哔哩_bilibili
https://www.bilibili.com/video/BV1hV411h7Pk?spm_id_from=333.999.0.0
3、网络编程
- 在STM32上使用LwIP协议栈实现以太网通信。
- 在ESP32上深度使用Wi-Fi和蓝牙。
- 学习MQTT等物联网协议,连接云平台(如阿里云、AWS IoT)。
4、性能优化与调试
- 使用示波器、逻辑分析仪深入分析硬件问题。
- 学习代码性能分析、功耗优化技巧。
第六阶段:项目实战与持续学习
1、打造个人项目集
将之前做过的项目整理、优化,形成一个作品集(可以放到GitHub上)。
尝试完成一个综合性项目,例如:
- 四轴飞行器
- 智能家居中控
- 基于Linux的迷你视频监控设备
- 自定义的机械臂控制器
2、关注行业动态
- 关注RISC-V等新兴架构。
- 了解AIoT(智能物联网)边缘计算等前沿概念。
3、最重要的建议
- 动手!动手!动手!
- 善用搜索引擎和社区(如STM32中文论坛、GitHub、Stack Overflow、CSDN、知乎)。
- 学会阅读官方文档和数据手册,这是第一手资料。
- 不要害怕失败,调试和解决问题的过程就是你成长最快的时候。
