如果想学硬件编程,请从单片机学起,然后转到FPGA或者ARM。
- 作者优秀
- 优秀教师/博士学历/特邀专家/独家讲师
- 平台推荐
- 内容稀缺
这条学习路线是市面上最稳妥、适合新手的主流路径,但 ARM 和 FPGA 是两条完全不同的方向,不能混为一谈。先理清三者本质区别:
单片机(MCU)
串行执行指令的通用处理器,软件思维为主,硬件为辅; ARM(嵌入式 Linux,STM32 属于 ARM 内核单片机)
FPGA
硬件描述语言,并行电路搭建思维,和 C 语言编程思维差异较大。
最近又到了本科毕业设计开题阶段,很多学生心高气傲,单片机没学好,就想开FPGA之类的题目,不是不可以,但是绝对不建议。学习不是建造空中楼阁,需要脚踏实地的一步步沿路攀登,不然学习效果就是事倍功半。在学校里,这种想大踏步学习现象看得太多了,效果都很差。所以在这个时间段,写了本文。第一阶段:入门基石 — 单片机(强烈建议先学)
推荐芯片:STM32(ARM Cortex-M 内核),不推荐先学 51 单片机(资源弱,工业用得越来越少)
学习目标:
- C 语言硬件编程基础:寄存器、时钟、GPIO、中断、定时器、串口、I2C、SPI、ADC、PWM
- 理解概念:时序、电平、外设驱动、上拉下拉、通信协议
为什么建议要从单片机起步?硬件编程最基础的「软硬件交互思想」在这里建立:你会明白:代码最终控制引脚电平,所有外设都依赖时序。如果直接冲 FPGA,很多人不懂通信时序、电气基础;直接冲 ARM Linux,底层原理一片空白,只会调用库。
误区:有人说 “STM32 本身就是 ARM,不用再学 ARM”STM32 是
Cortex‑M(微控制器);我们常说的 ARM 开发板(树莓派、IMX6ULL、RK3568)是 Cortex‑A(应用处理器,跑 Linux),二者定位差异巨大。
第二阶段:两条分支,二选一深耕(也可以浅学另一条拓宽视野)
分支 A:偏嵌入式软件方向 — ARM Linux(Cortex-A)
适合目标:嵌入式设备、工控网 关、智能硬件、物联网网 关、音视频设备学习递进:
- 过渡到 ARM 裸机(Cortex-A 寄存器、MMU)【可选,想深入驱动必学】
- Linux 基础:shell、Makefile、交叉编译
- Linux 应用开发 → Linux 驱动开发(字符设备、平台驱动、设备树)
特点:依然以 C 语言为主,思维还是顺序执行软件思维,向上层软件延伸。
分支 B:偏数字硬件方向 — FPGA
适合目标:高速信号处理、通信基带、图像预处理、工控逻辑、芯片前端验证推荐语言:Verilog HDL(优先,工业主流),SystemVerilog
重点提醒:单片机思维会阻碍 FPGA 学习!
单片机:顺序执行;FPGA:硬件电路并行运行很多新手拿着写 C 语言的思路写 Verilog,写出一堆时序 bug。
学习路径:
- Verilog 语法、组合逻辑 / 时序逻辑、FIFO、异步同步时钟
- 常用 IP:UART、SPI、I2C、PLL、DDR 驱动
- 进阶:高速接口(PCIe、以太网、SerDes)、信号处理算法硬件化
可选学习顺序参考
版本 1(嵌入式软件路线)C 语言 → STM32 单片机裸机 → ARM Linux 应用 → Linux 驱动
版本 2(数字硬件路线)C 语言 → STM32 单片机(熟悉时序与外设)→ 数字电路 → Verilog → FPGA 开发
避坑提醒!
- 不要跳过单片机直接学 FPGA:看不懂通信时序,调试寸步难行;
- 不要学完 STM32 直接跳 Linux 驱动:底层一无所知,只会复 制粘贴代码;
- 硬件编程离不开仪器:万用表、逻辑分析仪、示波器,学校条件允许请尽早接触。
这些就是本人的一些学习建议,希望正在考虑毕业设计题目的同学们认真看一下,为自己后续的毕业设计做好准备。本人现在很少带硬件方面的毕业设计,不是自己不愿意教,是因为这方面的技术难度偏向于实践动手,而这方面恰恰是学院学生的弱点,还是要避重就轻,毕竟很多人毕业之后就去上班了,安安稳稳毕业就行。