当前位置: 首页 > news >正文

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 输入捕获功能引脚表

引脚定时器通道功能是否支持输入捕获备注
PA0TIM2_CH1✅ 支持可作为输入捕获/外部触发
PA1TIM2_CH2✅ 支持同上
PA2TIM2_CH3 / TIM15_CH1✅ 支持可选 TIM2 或 TIM15 输入捕获
PA3TIM2_CH4 / TIM15_CH2✅ 支持可选 TIM2 或 TIM15 输入捕获
PA4❌ 不支持仅普通 IO / SPI1_NSS 等
PA5❌ 不支持普通 IO / SPI1_SCK 等
PA6TIM3_CH1 / TIM16_CH1✅ 支持你关心的这个引脚,可以做捕获
PA7TIM3_CH2 / TIM17_CH1✅ 支持
PB0TIM3_CH3✅ 支持
PB1TIM3_CH4✅ 支持
PA8MCO / TIM1_CH1✅ 支持高速时钟输出也可用
PA9TIM1_CH2✅ 支持
PA10TIM1_CH3✅ 支持
PA11TIM1_CH4✅ 支持
PA13— (SWDIO)❌ 调试引脚一般不用作定时器
PA14— (SWCLK)❌ 调试引脚同上
PA15TIM2_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)整理:

引脚复用功能输入捕获支持备注
PA0TIM2_CH1 / TIM1_CH1_ETR常用于外部触发
PA1TIM2_CH2 / TIM1_CH2
PA2TIM2_CH3 / TIM15_CH1
PA3TIM2_CH4 / TIM15_CH2
PA5TIM2_CH1_ETR / TIM2_CH1可作为备用捕获入口
PA6TIM3_CH1 / TIM16_CH0和 STM32F0 一样可捕获
PA7TIM3_CH2 / TIM17_CH0
PA8TIM1_CH1高级定时器
PA9TIM1_CH2
PA10TIM1_CH3
PA11TIM1_CH4
PB0TIM3_CH3
PB1TIM3_CH4
PB3TIM2_CH2备用
PB4TIM3_CH1
PB5TIM3_CH2
PB6TIM4_CH1 (部分型号) / TIM1_BKIN⚠️主要BKIN功能,不常用
PB7TIM4_CH2 (部分型号)⚠️
PB8TIM1_CH1N / TIM16_CH0常用输入捕获
PB9TIM1_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 是高级定时器的“紧急刹车开关”

典型应用场景

  1. 电机驱动(三相无刷电机、步进电机):

    • BKIN 接到电流检测电路输出。

    • 电流超限 → BKIN 触发 → PWM 立即关闭 → 电机保护。

  2. 逆变器 / 电源变换器

    • BKIN 接过压检测信号。

    • 电压异常 → PWM 关断 → 防止炸管。

  3. 外部急停按钮

    • 工业控制里 BKIN 直接接到一个急停按钮。

    • 人按下 → BKIN 拉低 → 系统立即停机。

举个例子(STM32 / GD32)

  • BKIN 输入是 低有效(一般通过外部上拉,保护电路拉低触发)。

  • 当 BKIN 被触发时:

    • TIM1/TIM8 所有输出通道(CH1~CH4 及互补通道)会被强制拉到安全状态(比如低电平)。

    • 同时可以配置 自动输出使能 (AOE),决定 BKIN 解除后是否自动恢复 PWM。

总结

  • BKIN ≠ 普通输入捕获

  • BKIN = 紧急刹车输入,用于保护电机/电源系统安全。

http://www.xdnf.cn/news/1320337.html

相关文章:

  • 网络常识-SSE对比Websocket
  • 记一次安装OpenStack(Stein)-nova报错问题解决
  • 数据赋能(396)——大数据——抽象原则
  • 智能汽车领域研发,复用云原生开发范式?
  • 48.Seata认识、部署TC服务、微服务集成
  • http工作流程
  • C++算法竞赛:位运算
  • 前端项目练习-王者荣耀竞赛可视化大屏 -Vue纯前端静态页面项目
  • 服务器管理与配置学习总结
  • MYSQL-175. 组合两个表
  • JavaScript性能优化实战(四):资源加载优化
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 【数据结构】堆和二叉树详解——上
  • 旋钮键盘项目---foc讲解(闭环位置控制)
  • 学习Python中Selenium模块的基本用法(5:程序基本步骤)
  • Linux817 shell:until,nfs,random
  • 力扣438:找到字符串中所有的字母异位词
  • Django前后端交互实现用户登录功能
  • [python学习记录2]变量
  • 脉冲计数实现
  • Docker之自定义jkd镜像上传阿里云
  • 排列组合+数量+资料
  • 25. 能否创建一个包含可变对象的不可变对象
  • 编程算法实例-Armstrong数(阿姆斯特朗数)
  • IDE/去读懂STM32CubeMX 时钟配置图(有源/无源晶振、旁路/晶振模式、倍频/分频)
  • 负载测试与压力测试详解
  • Rust Async 异步编程(五):执行器和系统 I/O
  • Spring 创建 Bean 的 8 种主要方式
  • MXFP4量化:如何在80GB GPU上运行1200亿参数的GPT-OSS模型
  • 【SpringBoot】Swagger 接口工具