嵌入式8 - 认识项目和GPIO输出速度

发布时间:2026/11/2 1:55:02
嵌入式8 - 认识项目和GPIO输出速度

一.main.c的注释

主函数中的注释都是BEGIN和END包夹,写代码的时候要写在这两者之间,要不然在STM32CubeMX中重新生成项目的时候代码会被重置掉。

所以在写代码的时候一定要在BEGIN和END之间。

二.HAL库简介

STM32程序需要手动定义出一系列宏来表示寄存器的地址,由于STM32涉及到的哇哦设寄存器非常多,在这个过程后还需要反复阅读文档,非常容易出错,因此ST官方推出了一套定义好的函数库,称为HAL库,王我们可以直接通过调用库函数的方式来完成上述所有寄存器的操作,简化了开发流程,提高了效率。

HAL库 -- 硬件抽象层。

三.项目结构

1.Application/MDK-ARM

内部放了启动文件startup_stm32f103xe.s,这个文件是由汇编代码实现的,而且已经给我们生成好了不需要手动拷贝。

2.Application/User/Core

这是我们自己写代码需要改动的部分。

main.c:入口文件,包含了main函数。

stm32f1xx_it.c:和中断处理相关的逻辑。

stm32f1xx_hal_nsp.c:内部包含一些硬件层的初始化。

3.Drivers/……HAL_Drivers

这里存放了HAL库的源码实现。

4.Drivers/CMSIS

CMSIS源码。

四.理解生成源代码

STM32CubeMX所谓的生成原码的本质是:拷贝一部分代码 + 生成一部分代码。

五.GPIO输出速度

1. GPIO输出速度越快,数字方波上升时间和下降时间越短,真实的角度也会越来越倾斜,同时,保持时间也会越来越短。

2.GPIO输出速度,因为上升时间和下降时间的存在,速度是一定有上限的,到达一定速度,就无法输出正常信号了。所以GPIO的输出速度不能一直增加,一定有上限。

3.GPIO的输出分为中速高速低速:

STM32F103ZET6 GPIO 输出速度与周期

速度档位最大翻转频率 (fmax)对应理论最小周期
低速 (Low)2 MHz500 ns
中速 (Medium)10 MHz100 ns
高速 (High)50 MHz20 ns

但要注意这里说的低速中速高速都是最高速度,不等于实际速度!

实际使用时,满足实际情况的最低速度即可。

STM32F103ZET6 GPIO 速度与外设推荐表

速度档位对应外设/场景推荐理由与关键数据注意事项
低速 (2 MHz)USART 串口(≤115.2 kbps)115.2k 波特率远低于 2 MHz 带宽,绰绰有余,且功耗与噪声最低。若串口速率超过 115.2k,需重新评估。
LED 控制、按键扫描、状态指示这些应用对边沿速度无要求,低速档即可满足,有利于降低系统整体噪声。无特殊风险。
中速 (10 MHz)I2C 接口(400 kHz 快速模式)2 MHz 档位对 400k 信号余量可能不足,选用 10 MHz 可为边沿留出足够裕量,避免波形退化导致通信失败。若 I2C 仅跑 100k 标准模式,低速档也可尝试。
中速 USART / 一般数字 I/O为高于 115.2k 但不太高的串口速率提供余量。一般 GPIO 翻转若频率很低,仍优先选低速。
高速 (50 MHz)SPI 接口(9 MHz / 18 MHz)STM32F103 的 SPI 最高可达 18 Mbit/s。若用 10 MHz 档位驱动 18 MHz SPI,信号会严重失真,必须选用 50 MHz 档位。高速档噪声较大,需注意 PCB 走线与 EMI。