什么是串口?

1. 串口相关概念

串口是STM32入门实践中两个紧密相关的核心概念。我们来彻底搞懂它。


1.1. 第一部分:什么是串口?

1.1.1. 核心定义

​串口​​是一种采用​​串行通信​​方式的​​物理接口​​。它的核心思想是“一个一个来”。

  • ​并行 vs 串行​​:

    • ​并行​​:好比一条8车道的公路,8辆车(8个比特的数据)可以​​同时​​通过。速度快,但需要很多线(数据线多),成本高,抗干扰差,适合短距离。

    • ​串行​​:好比一条单车道,8辆车必须​​排成一队,一辆接一辆​​地通过。速度相对慢,但只需要很少的线(通常2-3根),成本低,抗干扰好,适合长距离通信。

在STM32这类微型控制器上,由于引脚资源非常宝贵,串行通信因其简洁性成为了绝对的主流。串口就是最基础、最常用的一种串行通信方式。

1.1.2. 串口通信的基本要素

要让两个设备通过串口成功对话,需要约定好三件事:

  1. ​波特率​​:数据传输的速度。单位是​​bps​​。常见的值有9600, 115200等。例如,115200表示每秒传输115200个二进制位。​​通信双方必须设置为相同的波特率,否则会收到乱码。​

  2. ​数据位​​:每个数据包包含的有效数据长度。通常是8位(一个字节)。

  3. ​停止位​​:用于标识一个数据包的结束。通常是1位。

  4. ​奇偶校验位​​:用于简单的错误检测(可选)。

1.1.3. 串口的物理接口和电平标准
  • ​物理接口​​:在电脑上,传统的串口是DB9接口。在STM32开发板上,通常是几个排针。

  • ​电平标准​​:这是关键!

    • ​RS-232​​:电脑传统串口使用 ​​±12V​​ 这样的高电压表示0和1。​​不能直接​​与单片机连接,会烧坏芯片!

    • ​TTL​​:单片机世界使用 ​​0V 表示逻辑0,3.3V或5V表示逻辑1​​。STM32一般是3.3V。

所以,当你用​​USB线​​连接​​电脑​​和​​STM32开发板​​时,中间需要一个“翻译官”——​​USB转TTL串口模块​​(如CH340G, CP2102, FT232RL等芯片),它负责把电脑USB信号转换成STM32能懂的TTL电平串口信号。

​连接时,要遵循“交叉互连”原则:​

  • ​STM32的TX引脚​​ -> 接 ​​USB转TTL模块的RX引脚​

  • ​STM32的RX引脚​​ -> 接 ​​USB转TTL模块的TX引脚​

  • ​GND​​ -> 接 ​​GND​​(共地非常重要!)

1.1.4. 串口在嵌入式开发中的巨大作用
  • ​打印调试信息​​:当你无法使用LED灯表达复杂信息时,串口是无价之宝。你可以用printf函数将变量值、程序状态等信息发送到电脑的串口助手软件上,这是最有效的调试手段之一。​​堪称嵌入式工程师的“透视眼”。​

  • ​与外部设备通信​​:连接GPS模块、蓝牙模块、Wi-Fi模块等,这些模块常常通过串口与STM32交换数据。

  • ​接收电脑指令​​:你可以从电脑的串口助手发送指令(如ONOFF)来控制STM32的行为。


1.2. 第二部分:为什么需要串口下载程序?(串口ISP)

1.2.1. 核心原因:给“空白”或“死掉”的单片机救急

想象一下,你刚拿到一块全新的STM32芯片,它的内部Flash(程序存储器)是​​完全空白​​的,没有任何程序。或者,你不小心烧录了一个有Bug的程序,导致芯片“变砖”,无法响应任何命令。

此时,​​基于JTAG或SWD的调试器(如ST-Link)将无法工作​​,因为调试器本身需要芯片内有一小段程序(调试监控程序)来配合。面对一块“白纸”或“死机”的芯片,调试器也无能为力。

1.2.2. 解决方案:内置的Bootloader

STM32的设计者预见了这个问题,他们在芯片出厂时,就在一块​​受保护的、用户无法修改的系统存储区​​里,预先烧录好了一段特殊的程序——​​Bootloader(引导加载程序)​​。

  • ​Bootloader的作用​​:它是在芯片上电后,​​真正第一个运行的程序​​。它不执行你的主程序,而是负责检查“是否收到了某个特定引脚(如串口的RX)上的特定指令(下载程序的请求)”。
1.2.3. 串口下载程序(ISP)的流程

串口下载,专业术语叫​​ISP​​。它的工作流程巧妙利用了内置的Bootloader:

  1. ​配置启动模式​​:通过设置STM32芯片的​​BOOT0​​和​​BOOT1​​引脚的电平,告诉芯片:“嘿,这次上电后,请先别跑我的主程序,直接去运行系统存储区里的那个Bootloader。”

    • 通常,我们将BOOT0引脚接高电平(3.3V),BOOT1接低电平(GND),即可进入串口下载模式。
  2. ​硬件连接​​:使用​​USB转TTL模块​​,将电脑和STM32的串口引脚(PA9/PA10,具体看芯片数据手册)正确连接。

  3. ​软件操作​​:在电脑上打开专用的ISP下载工具(如STM32的Flash Loader DemonstratorSTM32CubeProgrammer),选择正确的串口号,工具会通过串口向STM32的Bootloader发送握手信号。

  4. ​擦除与编程​​:Bootloader收到有效的握手信号后,就会准备好接收数据。接着,电脑上的工具会将你的.hex.bin文件通过串口发送过去,Bootloader负责将这些数据写入到芯片的用户Flash区域。

  5. ​切换模式并运行​​:下载完成后,将​​BOOT0引脚改接为低电平(GND)​​,然后复位芯片。这次芯片上电后,Bootloader检查不到下载请求,就会跳转到用户Flash区,开始执行你刚刚下载的全新程序!

1.2.4. 图示流程
graph TD
    A[设置BOOT0=1, BOOT1=0] --> B(芯片上电/复位);
    B --> C{运行内置<br>Bootloader};
    C --> D[通过串口接收<br>电脑发送的程序文件];
    D --> E[Bootloader将程序文件<br>写入用户Flash区];
    E --> F[设置BOOT0=0];
    F --> G(芯片复位);
    G --> H{运行用户程序};
    H --> I(程序正常执行!);

1.3. 总结:串口下载 vs 调试器下载(ST-Link/J-Link)

特性 串口下载 调试器下载
​原理​ 利用芯片​​内置的Bootloader​ 通过​​JTAG/SWD调试接口​​直接控制芯片内核
​所需硬件​ USB转TTL模块(便宜, 几元到十几元) ST-Link/J-Link调试器(稍贵)
​优势​ ​救砖神器​​, 适合空白芯片或程序死机的情况; 成本低 ​功能强大​​, 可在线调试(单步执行、 设置断点、 查看变量), 下载速度快
​劣势​ 只能下载程序, ​​无法进行在线调试​ 无法直接给完全空白或程序卡死的芯片下载程序
​应用场景​ 1. 量产烧录
2. 救援“变砖”的芯片
3. 仅验证程序功能, 无需调试
​日常开发调试的主要方式​

​给你的建议:​

作为学习者,​​最好同时备有ST-Link和USB转TTL模块​​。ST-Link用于日常高效的开发和调试,USB转TTL模块则作为“保险”,当你的程序有问题导致芯片不响应ST-Link时,就可以用串口下载方式去“救活”它。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐