嵌入式
大学里计算机组成原理这门课感觉和没上过一样,而电子电路基础是确实没上。
但,突然,确实想要看一看这些芯片和电路板,哪怕点个流水灯什么的x。
芯片能力 与 运行环境
MCU 微控制器
- 主频 < 200MHz
- RAM 几KB到几十KB; Flash:几十KB到几百KB。存储程序代码。
- 外设:基础的 GPIO、UART、I2C、SPI、ADC。
- 应用场景:遥控器、电动玩具、智能卡、直流电机控制、LED灯控。
- STM32F0 esp32-c3
MPU 微处理器
- 主频 < 500MHz
- RAM:64KB 到 512KB,足以运行FreeRTOS和多个任务栈、网络协议栈;Flash:512KB 到 2MB。可以存储复杂的应用程序和文件系统。
- 外设:更丰富的串口、CAN总线、USB、以太网MAC、加密加速器。
- 应用场景:智能家居设备(插座、传感器)、可穿戴设备、工业PLC、无人机飞控、复杂的电机驱动(FOC)。
- STM32F4 ESP32-S3
不那么微的处理器
- 500MHz 到 1.5GHz+ 到这里和普通手机电脑性能差距可能都不算很大了。
- RAM:512KB 到 1GB+。通常需要外接DDR内存。
- Flash:内部Flash可能不大,但支持外部eMMC、SD卡,存储空间以GB计。
- 外设:支持LCD显示器、摄像头、千兆以太网、高速USB等。
- 应用场景:智能家居中控屏、工业 HMI、网络网关、广告机、视频播放器。
- 树莓派/各种派
再就是,现在的手机电脑,
- 频率 2-4GHz
- …
更强大的,自动驾驶、机器人、高端医疗影像、5G基站。… 感觉和个人没什么关系了。
芯片另一个重要特征也许是,指令集,架构 risc/cisc 具体的 x86/arm/risc-v/pfga…
裸机, RTOS, TSOS(Linux/Android…)
现在手机电脑上的系统,都属于分时操作系统。这个名字描述的特征是,使用时间片轮转等等调度方式允许多个,很多很多个程序同时保持运行,进行任务调度的目标是高平均吞吐量和公平性。
而实时操作系统通常会追求确定性——通常会要求确定某个任务能在一定时间内完成,为此可以不在乎整体的平均吞吐量,完全基于优先级进行任务调度。
rtos 相对 linux 这种操作系统功能更加专一,会用在一些要求严格的关键任务控制上。
而 linux 这种操作系统会被用来做功能更多,更复杂,但没有硬性响应要求的东西上。比如带操作界面的东西,比如手机电脑。
而裸机,它通常运行在很简单的芯片,很简单的电路板上,处理很简单的事情。它可以有着更快的响应速度,更简单可控更稳定的行为,更少的能耗,当然还更便宜。 而相对而言,使用 rtos 其实意味着,这个东西还是需要处理多任务情况的。
通信外设 communication peripheral
- GPIO
- General-purpose input/output, 最基础的信号输入输出
- ADC, DAC
- ADC (Analog-to-Digital Converter) and DAC (Digital-to-Analog Converter), 模拟信号转数字信号,数字信号转模拟信号。adc 传感器数据读取,dac 将信息转为模拟信号比如电压。
- UART, I2C, SPI
- I2C
- 同步、半双工、多主多从。两根线(SDA数据线,SCL时钟线)。
- SPI
- 同步、全双工、高速。通常需要四根线:MOSI MISO SCLK CS/SS
- UART … 只是烧录时看到要这个
- I2C
- CAN
- Controller Area Network 控制器局域网
- 汽车和工业环境而生的“硬汉”协议。
- USB
- Universal Serial Bus 通用串行总线
- 消费电子和通用计算设计的“全能型”协议。
esp32
esp32 是一个芯片系列,似乎有时候也可以是系列的系列名。
有一个开发框架叫做 ESP-IDF ,这个框架是基于 free-rtos 这个操作系统做的,包含了各种库与编译烧录调试等一系列工具链。
- 环境搭建
- ESP-IDF 与 free-rtos
- 硬件与外设
- 物联网,wifi,tcp/ip/http
esp32-c3 esp32-c3 是另一个芯片系列,或型号
- risc-v 32-bit, 160Mhz
- 4 MB flash
- wifi(802.11/b/g/n(wifi1,3,4)), bluetooth 5
esp32-s3 esp32-s3 是又另一个芯片系列,或型号
- dual-core 32-bit, 240Mhz
- wifi(802.11/b/g/n(wifi1,3,4)), bluetooth 5
嗯…有点,不知道说什么的感觉。
好多小玩具我问问 deepseek,把代码粘贴过来,在 vscode ESP-IDF 的插件里点点点,就能装依赖构建烧录监控了…
我既没有了解更底层更硬件的东西,也没有去看那个 rtos 系统。
可能更多的看到的是各种设备要接什么线,
- 一个小 led 灯只要最简单的 gpio, 还有 ws2812 这种神奇的东西,一个线就能控制一大个灯板.
- 摇杆可能要用带 adc 的引脚
- 一个小的显示屏需要 I2C 的 SCL 和 SDA
- 以及这个小板板还带 wifi, 可以自己做 wifi 信号源,或者把wifi信息写进代码连接别的 wifi 后,启动一个小 web 服务器,全程… 也是调 ESP-IDF 的包。感觉,之前买的相机 wifi 连接就是前者。 …
deepseek 老师快帮帮我
你提到的这种“不知道说什么的感觉”,其实恰恰是每个从软件世界踏入硬件世界的开发者都会经历的阶段——理论与实践之间的那道鸿沟。
你已经用ESP32点过灯、驱动过外设、甚至玩转了Wi-Fi Web服务器,这已经超越了90%的纸上谈兵者。现在,让我们来帮你把这段经历“升华”一下,看看你具体学到了什么,以及下一步可以窥探哪些更深处的东西。
- 你实践中的“无形”收获
当你成功让代码在板子上运行时,你其实已经在不知不觉中掌握了几个至关重要的概念:
- 硬件抽象层:你调用
gpio_set_level时,没直接操作寄存器, ESP-IDF 帮你屏蔽了底层硬件差异。这就是HAL的意义——让开发者专注于业务逻辑。 - 库与框架的威力:你用几行代码就启动了Web服务器,这背后是 ESP-IDF 集成了LwIP这个轻量级TCP/IP协议栈。在嵌入式领域,站在巨人的肩膀上(使用成熟的库和RTOS)是项目成功的关键。
- 事件驱动编程:虽然你没直接写事件循环,但Wi-Fi连接成功、获取到IP地址,这些都是在触发事件,你的代码在响应这些事件。这是嵌入式GUI和网络应用的核心模式。
从“调包侠”到“明白人”:可以窥探的下一步
你觉得只是在调用API,这是因为 ESP-IDF 设计得太好了。想更深入?可以从这里下手:
- 掀开RTOS的窗帘看一眼 你不需要从头写一个调度器,但可以在调试时打开FreeRTOS的监视功能。
- 在
menuconfig中启用FreeRTOS -> Enable FreeRTOS trace hooks和Enable event trace。 - 烧录运行后,输入
idf.py monitor,然后按Ctrl+T再按C,可以列出所有任务的状态(Running, Blocked, Ready)。 - 你会亲眼看到,当你访问Web服务器时,网络处理任务从
Blocked变为Running,你的主任务可能正Blocked在vTaskDelay上。这一刻,多任务并发的概念就从书本变成了你眼前的现实。
- 解剖一个外设的驱动
以你用的I2C屏幕为例,别停留在“接线然后调用
i2c_master_write”这个层面。
- 去 ESP-IDF 的GitHub仓库,找到
/components/driver/i2c.c这个文件。 - 粗略地看一眼
i2c_master_write这个函数(不用全看懂)。你会发现,它最终是在操作一系列名为I2C0或I2C1的存储器(即外设寄存器)。 - 这时,你再搜一下 《ESP32-C3 Technical Reference Manual》,找到I2C控制器章节,你会看到这些寄存器的描述。你会恍然大悟:“哦,原来
i2c_master_write里写这个魔数,是为了配置时钟频率;写那个寄存器,是为了填充要发送的数据。” - 这个过程,就是你从“调包”到“理解硬件如何被驱动”的关键一步。
- 挑战“底层”的乐趣 - 点灯的另一重境界 你用过WS2812,它是个用单线特殊时序的协议。 ESP-IDF 有它的库。但你想过吗?这个“特殊时序”是怎么产生的?
- 尝试不用库,用纯粹的
gpio_set_level和esp_rom_delay_us来模拟WS2812的0码和1码(比如,高电平0.4us后拉低是0,高电平0.8us后拉低是1)。 - 你会发现很难调准,因为函数调用本身有开销。这时你就会理解,为什么数据手册里经常提到精确延时需要靠定时器甚至CPU汇编指令。
- 这个失败的经历,比成功点亮它更有价值,因为它让你直面了软件控制硬件的时序精度这个核心问题。
- 连接你已有的知识体系
你提到的“手机电脑是分时,嵌入式有实时”,这个理解完全正确。现在可以把这个概念和你的ESP32项目联系起来:
- 你的Web服务器项目里,网络协议栈处理、等待HTTP请求这些不紧急的任务,优先级可以设低一点。
- 如果同时有一个任务需要精确读取传感器数据,它的优先级就应该设高,并且它应该能够抢占那个网络任务。
- 你在代码中配置任务优先级时,就是在实践和验证实时调度的理论。