STM32单片机学习日记
I2C:
中断:
可以产生中断的功能叫做中断源
中断跳转地址:
INT外部中断:
中断处理程序中禁止调用主函数中用过的子函数。
TTL
奇偶校验位的判断
RS232

RS485
差分电压
随着距离的增加传输速率也会相应降低。
1. 什么是 RS485?
RS485 是一种 串行通信标准(不是芯片,不是协议,而是一个 电气层标准)。
它规定了电压、电流、差分传输方式等物理特性。上层可以跑 UART 协议,也可以跑 Modbus、自定义协议等。
UART:规定了数据怎么一位一位传。
RS485:规定了电信号怎么在长距离、多人通信的线路上跑。
2. 为什么要用 RS485?
RS485 相比普通 UART(TTL 电平,TXD/RXD)有以下优势:
差分传输
使用两根信号线(A 和 B),电压差代表逻辑 0/1。
比如:
A > B:逻辑 1
A < B:逻辑 0
好处:抗干扰能力强,能在电磁噪声大的环境下稳定通信。
传输距离远
- TTL 一般只能跑几米。
- RS485 可以在 1200 米 左右的距离稳定通信(速率降低时)。
支持多总线
- RS485 允许 1 对多,一条总线上可以挂 32 个以上设备(收发器)。
所以它很适合做工业总线,多个设备挂在一根线通信。
RS485的硬件特点:
双线制(半双工):常见的 RS485 接口只有 A、B 两根线,同一时间只能收或者发。
四线制(全双工):有些扩展接口会用 4 根线,支持同时收发。
终端电阻:
为了防止信号反射,在线路两端加 120 Ω 电阻。
偏置电阻:
防止总线上没人发信号时,A、B 处于悬空导致误判,需要加上拉/下拉电阻。
通讯方式
RS485 本质上还是 异步串口通信,所以常见参数有:
波特率:9600、115200 …
数据位:8 位
校验位:无/偶/奇
停止位:1/2
UART 逻辑层 + RS485 电气层 = 可以实现多点长距离通信。
典型电路
MCU(比如 STM32)输出 UART (TXD/RXD)。
通过 RS485 收发器芯片(如 MAX485、SP3485、SN75176)。
RS485 芯片负责把 UART 电平 ↔ RS485 差分信号转换。
例如:
STM32 ----TXD----> DI (MAX485)
STM32 ----RXD----< RO (MAX485)
STM32 ----IO----> DE/RE (控制发送/接收)
MAX485 ---- A/B ----> RS485 总线
DE:发送使能
RE:接收使能
通常把 DE 和 RE 绑在一起,由单片机 GPIO 控制是发还是收。
应用场景
工业控制(PLC、传感器网络、变频器)
电力系统(电表抄表)
智能家居(485 总线灯控)
安防设备(门禁、监控)
常见协议:Modbus RTU(运行在 RS485 上)
举例:
假设你做一个 智能门锁系统,需要和一个远程控制器通信,普通 UART 只能跑 2~3 米就容易出错;
改成 RS485:
用 MAX485 把信号变成差分。
一根两芯屏蔽线拉到几十米外的控制终端。
抗干扰,稳定性好。
RS485 不是协议,而是一个抗干扰强、支持远距离和多设备的串口电气标准。
STM32F030F4P6
这个芯片是 20 引脚封装 (TSSOP20)
STM32F030F4P6 的 PA6 既是普通 GPIO,也可以作为定时器输入捕获引脚(TIM3_CH1 或 TIM16_CH1)。
PA6 的复用功能包括:
TIM3_CH1(定时器3的通道1)
TIM16_CH1(定时器16的通道1)
SPI1_MISO
USART3_CTS
普通 GPIO
📌 STM32F030F4P6 输入捕获功能引脚表
引脚 | 定时器通道功能 | 是否支持输入捕获 | 备注 |
---|---|---|---|
PA0 | TIM2_CH1 | ✅ 支持 | 可作为输入捕获/外部触发 |
PA1 | TIM2_CH2 | ✅ 支持 | 同上 |
PA2 | TIM2_CH3 / TIM15_CH1 | ✅ 支持 | 可选 TIM2 或 TIM15 输入捕获 |
PA3 | TIM2_CH4 / TIM15_CH2 | ✅ 支持 | 可选 TIM2 或 TIM15 输入捕获 |
PA4 | — | ❌ 不支持 | 仅普通 IO / SPI1_NSS 等 |
PA5 | — | ❌ 不支持 | 普通 IO / SPI1_SCK 等 |
PA6 | TIM3_CH1 / TIM16_CH1 | ✅ 支持 | 你关心的这个引脚,可以做捕获 |
PA7 | TIM3_CH2 / TIM17_CH1 | ✅ 支持 | |
PB0 | TIM3_CH3 | ✅ 支持 | |
PB1 | TIM3_CH4 | ✅ 支持 | |
PA8 | MCO / TIM1_CH1 | ✅ 支持 | 高速时钟输出也可用 |
PA9 | TIM1_CH2 | ✅ 支持 | |
PA10 | TIM1_CH3 | ✅ 支持 | |
PA11 | TIM1_CH4 | ✅ 支持 | |
PA13 | — (SWDIO) | ❌ 调试引脚 | 一般不用作定时器 |
PA14 | — (SWCLK) | ❌ 调试引脚 | 同上 |
PA15 | TIM2_CH1 (复用) | ✅ 支持 | 可与 PA0 类似作为捕获 |
🔑 总结
支持输入捕获的主要引脚:
PA0, PA1, PA2, PA3, PA6, PA7, PB0, PB1, PA8, PA9, PA10, PA11, PA15
GD32E230C8T6
STM32F030C8T6 在引脚兼容度、外设资源上比较接近,但因为 GD32E230 属于 Cortex-M23 内核 (Armv8-M),算是 STM32F0 的国产替代加强版,所以有一些改进。
芯片基本信息
封装:LQFP48(48 个引脚)
内核:Cortex-M23
定时器资源:
高级定时器 TIM1
通用定时器 TIM2、TIM3、TIM14、TIM15、TIM16、TIM17
I/O 数量:37 个 GPIO
输入捕获原理回顾
在 GD32(和 STM32 一样),定时器的 CHx 通道 都支持:
PWM 输出
输入捕获
外部触发
所以凡是能映射到 TIMx_CHy 的引脚,都可以用作 输入捕获引脚。
GD32E230C8T6 输入捕获功能引脚表
我根据官方手册(GD32E230 datasheet + RM)整理:
引脚 | 复用功能 | 输入捕获支持 | 备注 |
---|---|---|---|
PA0 | TIM2_CH1 / TIM1_CH1_ETR | ✅ | 常用于外部触发 |
PA1 | TIM2_CH2 / TIM1_CH2 | ✅ | |
PA2 | TIM2_CH3 / TIM15_CH1 | ✅ | |
PA3 | TIM2_CH4 / TIM15_CH2 | ✅ | |
PA5 | TIM2_CH1_ETR / TIM2_CH1 | ✅ | 可作为备用捕获入口 |
PA6 | TIM3_CH1 / TIM16_CH0 | ✅ | 和 STM32F0 一样可捕获 |
PA7 | TIM3_CH2 / TIM17_CH0 | ✅ | |
PA8 | TIM1_CH1 | ✅ | 高级定时器 |
PA9 | TIM1_CH2 | ✅ | |
PA10 | TIM1_CH3 | ✅ | |
PA11 | TIM1_CH4 | ✅ | |
PB0 | TIM3_CH3 | ✅ | |
PB1 | TIM3_CH4 | ✅ | |
PB3 | TIM2_CH2 | ✅ | 备用 |
PB4 | TIM3_CH1 | ✅ | |
PB5 | TIM3_CH2 | ✅ | |
PB6 | TIM4_CH1 (部分型号) / TIM1_BKIN | ⚠️ | 主要BKIN功能,不常用 |
PB7 | TIM4_CH2 (部分型号) | ⚠️ | |
PB8 | TIM1_CH1N / TIM16_CH0 | ✅ | 常用输入捕获 |
PB9 | TIM1_CH2N / TIM17_CH0 | ✅ |
✅ GD32E230C8T6 输入捕获可用的主要引脚:
通用定时器:PA0、PA1、PA2、PA3、PA6、PA7、PB0、PB1、PB4、PB5
高级定时器 TIM1:PA8、PA9、PA10、PA11、PB8、PB9
其他定时器扩展:PA15、PB3 等
BKIN
BKIN = Break Input,中文叫 刹车输入/紧急制动输入。
BKIN 的作用
它不是普通的捕获输入,而是一个 保护机制:
在电机控制、逆变器、驱动功率管(MOSFET/IGBT)时,高级定时器会输出 PWM 去驱动功率开关。
如果出现 过流、短路、过压 等危险情况,外部保护电路(比如比较器、保护 IC)会拉低 BKIN 引脚。
一旦 BKIN 触发,定时器 立即关闭所有 PWM 输出通道,避免烧毁功率器件。
可以理解为:BKIN 是高级定时器的“紧急刹车开关”。
典型应用场景
电机驱动(三相无刷电机、步进电机):
BKIN 接到电流检测电路输出。
电流超限 → BKIN 触发 → PWM 立即关闭 → 电机保护。
逆变器 / 电源变换器:
BKIN 接过压检测信号。
电压异常 → PWM 关断 → 防止炸管。
外部急停按钮:
工业控制里 BKIN 直接接到一个急停按钮。
人按下 → BKIN 拉低 → 系统立即停机。
举个例子(STM32 / GD32)
BKIN 输入是 低有效(一般通过外部上拉,保护电路拉低触发)。
当 BKIN 被触发时:
TIM1/TIM8 所有输出通道(CH1~CH4 及互补通道)会被强制拉到安全状态(比如低电平)。
同时可以配置 自动输出使能 (AOE),决定 BKIN 解除后是否自动恢复 PWM。
总结
BKIN ≠ 普通输入捕获
BKIN = 紧急刹车输入,用于保护电机/电源系统安全。