Aily Blockly 辅助 STM32 开发教程2
Aily Blockly 辅助 STM32 开发教程2
第 7 章:串口通信
7.1 串口基础
UART/USART(通用异步收发器)是最常用的串行通信接口,可用于:
- 与电脑通信(调试打印)
- 与其他模块通信(蓝牙、WiFi、GPS 等)
STM32F103 有 3 个 USART 接口:
| 串口 | TX 引脚 | RX 引脚 |
|---|---|---|
| USART1 | PA9 | PA10 |
| USART2 | PA2 | PA3 |
| USART3 | PB10 | PB11 |
常用参数配置:
- 波特率:9600 / 115200 / 921600 bps
- 数据位:8 位
- 停止位:1 位
- 校验位:无
7.2 Hello World —— 串口打印
硬件连接
使用 USB-TTL 模块连接 USART1:
STM32F103 USB-TTL 模块 PA9 ────────► RX PA10 ◄──────── TX GND ──────── GND⚠️ 注意:TX 接 RX,RX 接 TX,交叉连接。
图形化程序
当启动时 ├─ 初始化串口 USART1,波特率 115200 └─ 永远重复 ├─ 串口发送文本 USART1: "Hello STM32!\r\n" └─ 延时 1000 毫秒查看串口输出
- 将 USB-TTL 模块插入电脑
- 打开串口调试助手(如 Serial Monitor、PuTTY、串口助手等)
- 选择对应的 COM 端口
- 设置波特率 115200,数据位 8,停止位 1,无校验
- 打开串口,观察输出
预期输出:
Hello STM32! Hello STM32! Hello STM32! ...7.3 串口控制 LED
通过电脑发送指令控制 LED 状态。
积木程序
当启动时 ├─ 初始化引脚 PC13 为 推挽输出 ├─ 初始化串口 USART1,波特率 115200 └─ 永远重复 ├─ 如果 串口有数据 USART1 │ ├─ 定义变量 cmd = 串口读取字符 USART1 │ ├─ 如果 cmd = '1' │ │ └─ 设置引脚 PC13 为 低电平 │ ├─ 如果 cmd = '0' │ │ └─ 设置引脚 PC13 为 高电平 │ └─ 如果 cmd = 's' │ └─ 串口发送文本 USART1: "LED 状态: " + 读取引脚 PC13 + "\r\n" └─ 延时 10 毫秒测试方法
在串口调试助手中发送字符:
- 发送
1→ LED 点亮 - 发送
0→ LED 熄灭 - 发送
s→ 返回当前 LED 状态
7.4 串口中断接收
使用中断方式接收串口数据,避免轮询占用 CPU。
定义变量 rx_buffer = "" // 接收缓冲区 定义变量 rx_done = false // 接收完成标志 定义函数 USART1_接收中断(char_data) ├─ 如果 char_data != '\n' │ └─ rx_buffer = rx_buffer + char_data └─ 否则 └─ rx_done = true 当启动时 ├─ 初始化串口 USART1,波特率 115200,启用接收中断 └─ 永远重复 ├─ 如果 rx_done = true │ ├─ 串口发送文本 USART1: "收到: " + rx_buffer + "\r\n" │ ├─ rx_buffer = "" │ └─ rx_done = false └─ 延时 10 毫秒第 8 章:中断与事件响应
8.1 什么是中断?
中断是单片机中一种重要的机制:当某个事件(如引脚电平变化、定时器溢出、串口收到数据)发生时,CPU 暂停当前执行的程序,转而去执行"中断服务函数",处理完后再回到原来的程序继续执行。
中断的优势:
- ⚡实时响应:事件发生立即处理
- 💤节省 CPU:主程序可以做其他事甚至休眠
- 🔄并行处理:"看起来"同时做多件事
8.2 外部中断(EXTI)
STM32 的每个 GPIO 引脚都可以配置为外部中断源,支持:
- 上升沿触发(低电平→高电平)
- 下降沿触发(高电平→低电平)
- 双边沿触发(任意跳变)
实验:按键触发中断
定义变量 count = 0 定义函数 EXTI_PA0_中断处理 └─ count = count + 1 当启动时 ├─ 初始化引脚 PC13 为 推挽输出 ├─ 初始化引脚 PA0 为 输入下拉,下降沿中断