嵌入式小白第一站:单片机是什么?有哪些单片机?(风趣且详细的入门博客)
嵌入式小白第一站:单片机是什么?有哪些单片机?(风趣且详细的入门博客)
欢迎来到嵌入式新手村。你可能听过“单片机”这三个字很多次:
- 有人说它是“电子界的瑞士军刀”;
- 有人说它是“会发光会动的幕后黑工”;
- 还有人说:学它之前我很快乐,学它之后我依然快乐(但头发少了点)。
你现在相当于站在“嵌入式新手村”门口,背包里只有两样东西:好奇心和**“我是不是学不会”**。放心,后者很快会被你用 printf 打败。
1) 单片机是什么?别把它想成“缩水电脑”,把它想成“专用大脑”
单片机(MCU)= 专门用来控制一个设备/系统的“小型控制计算机”。
它通常被设计成:低功耗、低成本、够用就好、稳定第一。
MCU 和电脑 CPU 最大的区别(干货)
- 电脑 CPU:擅长跑复杂系统(Windows/Linux)、大内存、多任务、多媒体
- 单片机 MCU:擅长 直接操作引脚、实时响应、长期稳定运行(几十天不死机那种)
更具体点——MCU 是那种:
- 你按一下按钮,它 几微秒~几毫秒内得响应;
- 你开机就得跑,最好 开机即工作;
- 你断电重启,它还能从 Flash 再爬起来继续打工。
2) MCU 内部到底有什么?(理解“器官”,你就能理解“能力上限”)
一颗典型 MCU 的内部结构可以理解成下面这套组合:
2.1 三大件(必备)
- CPU 内核:执行指令(比如 ARM Cortex-M0/M3/M4、8051、RISC-V)
- Flash(程序存储):你写的固件存在这里,断电不丢
- RAM(运行内存):变量、堆栈、中间数据在这里,断电清空
干货:你的程序“烧录”= 写入 Flash;运行时变量爆炸= RAM 不够。
2.2 外设(MCU 的“超能力来源”)
- GPIO:输入输出引脚(LED/按键/继电器/读电平)
- Timer / PWM:定时、测频、生成 PWM(电机、舵机、蜂鸣器、调光)
- UART:串口(和电脑/模块说话,调试第一神器)
- I2C / SPI:和传感器、屏幕、Flash、ADC 芯片通信
- ADC:把模拟电压变成数字(电位器、电池电压、模拟传感器)
- DAC(有的才有):输出模拟电压(波形/音频/控制)
- WDT 看门狗:程序跑飞了,给你一脚踹重启(稳定性靠它)
- DMA(进阶):外设搬运数据不用CPU亲自搬砖,效率大增
干货:嵌入式很多时候不是“写算法”,而是“把外设调通 + 把数据流跑顺”。
3) MCU 的程序长什么样?(90% 项目逃不出这三段式)
3.1 初始化阶段(开机先把“部门”安排好)
- 配时钟(系统频率)
- 配 GPIO(哪些输出哪些输入)
- 配串口/I2C/SPI
- 配定时器/中断
- 启动外设
3.2 主循环(反复打工)
- 读输入(按键、传感器)
- 更新状态机(逻辑判断)
- 控输出(LED、电机、继电器)
- 通信(发数据、收命令)
3.3 中断(处理“突发事件”)
- 串口收到数据
- 定时器到点
- 按键触发外部中断
- ADC 转换完成
干货:主循环做“日常事务”,中断做“紧急事件”。把它分清,你就赢一半。
🔧 扩展:MCU 代码到底怎么跑起来的?(从上电到执行的全过程)
当你按下电源键,一颗 MCU 内部其实经历了以下流程:
-
上电复位(Power-On Reset)
所有寄存器恢复默认值,程序计数器(PC)被置为初始位置。 -
执行启动文件 startup.s
- 设置堆栈指针
- 初始化中断向量表
- 跳转到 C 语言环境初始化代码
-
C 运行库初始化(CRT)
- 清空 .bss(未初始化变量)
- 将 .data 从 Flash 复制到 RAM
- 调用全局构造函数(C++)
-
跳到 main() 函数
🎉 你写的程序此时才真正开始执行。
干货:这个流程解释了为什么“全局变量能正常使用”、“未初始化变量是 0”以及“程序为什么一定有 startup 文件”。
4) 有哪些单片机?用“门派”认识会清晰很多(含选型干货)
4.1 经典教学派:51(8051)
代表:STC89C52、AT89S52 等
- ✅ 优点:概念非常“裸”,能把寄存器、IO、定时器本质讲明白
- ❌ 缺点:生态老、性能弱、项目实用价值有限(但学原理不错)
**适合:**理解基础原理、学校课程、了解“最传统的单片机味道”。
4.2 工业主流派:ARM Cortex-M(STM32 / NXP / TI / Silicon Labs…)
最典型:STM32
-
STM32F1:老牌入门(资料多)
-
STM32F0/G0:更现代的入门
-
STM32F4/F7/H7:性能怪物(复杂项目)
-
STM32L:低功耗方向
-
✅ 优点:资料多、外设全、工业用得多、路线最“正统”
-
❌ 缺点:外设配置多,新手容易被“时钟树/初始化”吓到
**适合:**认真走嵌入式路线、想做项目/就业的人。
4.3 物联网派:ESP32 / ESP8266(Wi-Fi/蓝牙天赋点满)
- ✅ 优点:联网很爽,IoT 项目速度起飞,生态强(Arduino / ESP-IDF)
- ❌ 缺点:系统更复杂,实时性和底层控制也能做但门槛略高
**适合:**智能家居、联网控制、远程采集、手机控制设备。
4.4 国产性价比派:GD32 / CH32 / 其他 RISC-V/ARM MCU
- ✅ 优点:便宜,板子多,适合量大成本敏感
- ❌ 缺点:不同型号资料质量参差、兼容性不一定“丝滑”
**适合:**低成本项目、练手、比赛。
4.5 创客友好派:Arduino(是生态/开发方式,不是单一芯片)
常见芯片:ATmega328P、SAMD21、ESP32、STM32…
- ✅ 优点:上手极快,库多,“先做出东西”
- ❌ 缺点:容易只会“调库”,不懂底层时会卡住
**适合:**纯新手快速建立信心、做作品展示。
5) 新手怎么选?给你一套“不纠结决策树”(干货)
-
想 最快做出能演示的东西(例如联网、手机控制、智能家居)
→ ESP32(Arduino 或 ESP-IDF) -
想 走正规嵌入式开发路线(外设、驱动、工业常用)
→ STM32(F0/G0 或 F103) -
学校教 51、而你想“既完成作业又别被时代抛弃”
→ 先学 51 的 GPIO/定时器/串口概念,立刻转 STM32/ESP32
6) 入门学习路线(从 0 到能做项目):建议按“技能树”走
下面是强烈推荐的新手路线,每一步都能做出“可见成果”,不空学。
6.1 第一关:GPIO(点灯 + 按键)
- 目标:点亮 LED、按键控制 LED
- 干货点:上拉/下拉、输入输出模式、消抖
6.2 第二关:定时器(让时间听你指挥)
- 目标:定时闪烁、周期任务
- 干货点:分频、计数、溢出、中断
6.3 第三关:PWM(调光/控速/舵机)
- 目标:呼吸灯、电机调速、舵机转角
- 干货点:占空比、频率、舵机 50Hz 的脾气
6.4 第四关:串口 UART(printf 之神降临)
- 目标:输出调试信息、接收命令控制设备
- 干货点:波特率、缓冲区、中断收发
6.5 第五关:I2C / SPI(和“外部世界”沟通)
- 目标:读温湿度、读 IMU、驱动 OLED
- 干货点:地址、时序、ACK/NACK、片选 CS
6.6 第六关:ADC(读模拟世界)
- 目标:电位器调节亮度、电池电压检测
- 干货点:参考电压、采样时间、滤波
6.7 第七关(进阶):中断 + 状态机 +(可选 RTOS)
- 目标:系统不靠“死等”,能同时做多件事
- 干货点:中断优先级、临界区、任务调度思想
干货:先把“裸机 + 状态机”写顺,再上 RTOS,你会非常稳。
📡 扩展:你必须认识的常见通信协议(并不难)
I2C:
- 两根线(SDA、SCL)
- 多主多从
- 地址通讯
- 必须上拉电阻
SPI:
- 高速
- 全双工
- 常用在屏幕、Flash、无线模块
- 有 4 条线(SCLK, MOSI, MISO, CS)
UART:
- 串口
- 最常用
- 调试神器
CAN:
- 汽车、工业应用
- 抗干扰强
干货:新手应从 I2C + UART 开始,SPI 次之,CAN 属于进阶。
7) 新手最容易踩的坑(重点来了:这是省命的)
下面我按“出现频率”给你列坑,每个坑附带“症状 + 原因 + 快速自救”。
坑 1:LED 怎么都不亮(嵌入式第一劫)
**症状:**程序跑了,但灯不亮
常见原因:
- LED 是 低电平点亮(板子上很常见)
- GPIO 模式没配成输出(或复用成别的外设了)
- 引脚号看错(原理图上是 PA5 你却在操作 PB5)
- 没开 GPIO 外设时钟(STM32 常见)
自救:
- 先用万用表测引脚电平有没有变化
- 看原理图:LED 接 VCC 还是 GND?判断高亮还是低亮
坑 2:按键抖成“机关枪”(消抖没做)
**症状:**按一次触发多次
**原因:**机械按键有抖动(毫秒级)
自救:
- 软件消抖:延时 10~20ms 再读一次确认
- 或用状态机/定时器消抖(更优雅)
坑 3:串口乱码(新手最常见的“我怀疑人生”)
**症状:**输出一堆火星文
原因:
- 波特率不一致(PC 端设置错 / MCU 配错)
- 系统时钟配错(导致波特率计算全歪)
- 串口参数不一致(校验位、停止位)
自救:
- 先固定一个经典波特率(115200 或 9600)
- 确认时钟频率(晶振/PLL)是否正确
- 用逻辑分析仪抓波形更直接(有条件的话)
坑 4:I2C 设备死活读不到(“没有ACK”的噩梦)
**症状:**读不到数据、一直 NACK
原因:
- 地址写错:7位地址 vs 8位地址(超级常见!)
- SDA/SCL 没上拉电阻(I2C 必须上拉)
- 供电电压不匹配(3.3V 器件被你 5V 强上)
- 时序太快/线太长干扰大
自救:
- 查传感器手册:它写的地址是 0x68(7位)还是包含 R/W 位?
- 给 SDA/SCL 加 4.7k~10k 上拉(很多模块自带)
- 降速到 100kHz 先跑通
坑 5:SPI 屏幕不亮 / 读数据全 0
**症状:**屏幕白屏、花屏、读不到 ID
原因:
- CS/CLK/MOSI/MISO 接错
- 模式不对(CPOL/CPHA)
- 屏幕复位脚没正确拉
- 片选时序错(CS 拉低时才通信)
自救:
- 从最慢速开始通信
- 严格对照 datasheet 的 SPI mode(0/1/2/3)
- 用示波器/逻辑分析仪看线是否有波形
坑 6:程序跑着跑着就“死了”(堆栈溢出/内存炸了/看门狗咬了)
**症状:**运行一会卡死或复位
原因:
- 局部数组太大(栈爆了)
- while 死循环里做了阻塞操作
- 中断里做了耗时操作(printf!)
- 看门狗没喂或喂的位置不对
自救:
- 大数组放全局/静态
- 中断只做“快进快出”,耗时放主循环
- 复位原因寄存器查一下(很多芯片可查 reset cause)
坑 7:中断优先级乱套,系统“偶发”抽风
**症状:**偶现丢数据、偶现卡死
原因:
- 中断嵌套管理不当
- 在中断和主循环之间共享变量没加
volatile - 临界区没保护(读写被打断)
自救:
- 共享变量加
volatile - 多字节共享数据要加临界区/关中断保护
- 中断里不要做复杂逻辑
坑 8:电源/地线问题导致的“玄学”
**症状:**板子偶尔重启、串口偶尔乱码、传感器偶尔失联
原因:
- 供电不足、电机回扫干扰
- 地线没处理好
- 没有足够去耦电容
自救:
- 电机/继电器与 MCU 供电隔离(或加电感/二极管)
- 关键芯片电源脚旁边放 0.1uF 去耦
- 优先怀疑电,而不是怀疑“我代码写得太玄”
🔧 扩展:单片机调试的四大神器(新手不知道,但高手离不开)
1. 串口(UART)打印调试
最简单、最实用的调试方式。printf("这里走到了…"); 是嵌入式界的光。
2. 逻辑分析仪
价格几十到几百,却是 SPI/I2C/UART 分析神器。
能帮助你:
- 看时序
- 看 ACK/NACK
- 看丢包
- 看信号是否真的发出去了
3. 示波器
调模拟信号、PWM、电源波形时必备。
能看到你“猜不到”的电压变化。
4. JTAG/SWD 调试器
可以:
- 单步调试
- 断点
- 查看寄存器
- 查看变量值
- 在线修改程序运行
干货建议:新手的第一个工具应该是 逻辑分析仪(比万用表更重要)。
8) 新手最实用的“学习姿势”(少走弯路的干货)
- 一定要会看原理图:至少看懂 LED、按键、供电、串口引脚
- 建立“验证链”:每次写功能都要能观察到结果
例如:LED 状态、串口打印、示波器波形、逻辑分析仪数据 - 别一口吃成胖子:先把一个平台学透(STM32 或 ESP32),别来回换
- 写代码尽量状态机:别到处 delay,delay 是“时间高利贷”
- 每个外设都要知道它的“时序/电气约束”:I2C要上拉,SPI 看 mode,UART 看波特率
9)🧠什么是寄存器?为什么必须学?
MCU 的外设都靠寄存器控制。
寄存器其实就是固定地址的一块内存,写值进去会改变外设行为。
例:
- 一个 GPIO 控制寄存器可能是
0x48000014 - 写 1 = 输出高电平
- 写 0 = 输出低电平
学寄存器的好处:
- 彻底理解外设本质
- 不会依赖库(HAL、Arduino 都是封装)
- 数据手册看得懂
- 卡住时“能自己看寄存器调试”
10):📦 嵌入式工程师的代码风格是怎样的?
优秀的嵌入式代码具有这些特点:
- 状态机结构清晰
- 定时任务不写 delay
- ISR(中断)轻量快进快出
- 全局变量最少化
- 硬件抽象层(HAL)隔离硬件与应用逻辑
- 对外设操作封装成驱动
示例状态机结构:
while (1)
{
switch(system_state)
{
case IDLE:
check_button();
break;
case RUNNING:
read_sensor();
update_display();
break;
case ERROR:
alarm_beep();
break;
}
}
好处:
结构清晰、可扩展、利于调试,不会写成“意大利面条代码”。
11) 给你一个“入门就能做的干货小项目”(建议你照这个练)
项目:带串口指令的温度显示小系统
-
MCU:STM32 或 ESP32
-
外设:温湿度传感器(I2C)+ OLED(I2C/SPI)
-
功能:
- 定时采样温度
- OLED 显示
- 串口输入
LED ON/OFF控制板载灯 - 超温报警(蜂鸣器/灯闪)
你会在一个项目里练到:GPIO、定时器、串口、I2C、显示、简单协议、状态机——含金量非常高。
12) 结尾:你已经入门了(真的)
你现在应该回答得出:
单片机是什么:一颗芯片里的小电脑
能干什么:控制硬件、采集数据、通信
有哪些:51、STM32 等 ARM Cortex-M、ESP32、国产 GD32/CH32、RISC-V…
新手怎么选:按目标选平台,不纠结型号
✅ 最终总结
如果你读到了这里,那么恭喜你:
你已经从“听说过单片机的小白”进化成了“知道它是什么、能干嘛、怎么选、怎么学、怎么不踩坑”的 合格入门玩家。
你现在掌握了这些关键点:
✔ 单片机是什么?
- 一颗集成 CPU、Flash、RAM、外设的“小电脑”,专门负责控制设备。
✔ 有哪些类型的单片机?
- 传统派:51(适合学原理)
- 工业主流派:STM32(ARM Cortex-M)
- 物联网派:ESP32(Wi-Fi + 蓝牙)
- 国产性价比派:GD32 / CH32 / RISC-V MCU
- 创客快速派:Arduino
✔ 如何选择入门平台?
- 要快 → ESP32 / Arduino
- 要专业 → STM32
- 要课程作业 → 51(但不要长期停留)
✔ 入门要学哪些技能?
GPIO → 定时器 → PWM → 串口 → I2C/SPI → ADC → 中断/状态机 → RTOS(进阶)
✔ 新手最易踩的坑?
- LED 不亮(低电平点亮 + 时钟没开)
- 按键抖动(需要消抖)
- 串口乱码(波特率/时钟)
- I2C NACK(7/8 位地址 + 上拉电阻)
- SPI 时序错(CPOL/CPHA)
- 内存溢出 / 看门狗复位
- 中断优先级 / volatile 忘写
- 电源干扰
一句话总结:
嵌入式不是玄学,只是你看不见电,所以需要工具和耐心。
只要完成本文的路线,你完全可以从零做出一个:
能显示、能通信、能联网、能控制的“小型智能系统”。
你的嵌入式之旅,正式开始了。
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐


所有评论(0)