跳过正文

STM32 Hal库 学习

·2689 字

GPIO 配置
#

GPIO Pull-up/Pull-down
#

1. No pull-up and no pull-down (无上拉和下拉)
#

  • 含义: GPIO引脚在内部不连接任何电阻到电源(VDD)或地(GND)。
  • 适用场景:
    • 推挽输出 (Output Push Pull): 在这个模式下,GPIO的输出驱动电路可以强力地将引脚拉到高电平(连接到VDD)或强力地推到低电平(连接到GND)。引脚电平总是被明确定义的,永远不会浮空。因此,内部的上拉或下拉电阻是完全多余的。这就是你当前驱动LED的情况。
    • 模拟输入 (Analog Mode): 在用作ADC输入等模拟功能时,为了不影响外部模拟信号的精度,必须禁用内部的数字上拉/下拉电阻。
    • 外部已有上拉/下拉: 如果你的电路板上已经在外部为该引脚设计了上拉或下拉电阻,那么就应该禁用内部的,以避免两个电阻并联影响电路特性。

2. Pull-up (上拉)
#

  • 含义: 在GPIO内部,通过一个阻值较大的电阻(通常在30kΩ~50kΩ范围)将引脚连接到电源(VDD)。
  • 作用: 当引脚不受外部驱动时(例如作为输入,且外部没有信号),这个内部电阻会将其电平“拉”到高电平。
  • 典型适用场景:
    • 按键输入: 这是最经典的应用。将按键的一端接GPIO,另一端接地。当按键未按下时,引脚处于悬空状态,内部上拉电阻使其稳定在高电平。当按键按下时,引脚被直接拉到地,变为低电平。MCU通过检测电平从高到低的变化就知道按键被按下了。
    • I2C通信总线: I2C协议的SCL和SDA线是开漏(Open-Drain)输出。总线上的设备只能将线路拉低,不能主动推高。因此,总线需要上拉电阻来在空闲时将其恢复到高电平。在低速I2C中,可以使用MCU内部的上拉电阻。
    • 单总线协议 (e.g., Dallas 1-Wire): 与I2C类似,也需要一个上拉电阻。

3. Pull-down (下拉)
#

  • 含义: 在GPIO内部,通过一个电阻将引脚连接到地(GND)。
  • 作用: 当引脚不受外部驱动时,这个内部电阻会将其电平“拉”到低电平。
  • 典型适用场景:
    • 按键输入 (与上拉相反的逻辑): 将按键的一端接GPIO,另一端接电源(VDD)。当按键未按下时,内部下拉电阻使其稳定在低电平。当按键按下时,引脚被拉到高电平。
    • 需要默认低电平的输入: 在某些逻辑设计中,希望一个输入的默认状态或安全状态是低电平。

SPI 配置
#

Mode
#

  • 这里可以选择全双工、半双工、单传输、单接收等不同模式

Hardware NSS Signal
#

  • 这里选择是否使用硬件片选引脚
  • 对于在主模式下工作的器件,此配置允许多主模式功能,此时应使用GPIO控制从机的片选。
  • 对于设置为从模式的器件,NSS引脚用作传统的片选输入,在NSS引脚为低电平时片选该器件,为高电平时,取消对该器件的片选。
  • 实际应用中,若配置为主模式,希望通过主机的NSS引脚硬件自动片选从设备,还需在硬件上对NSS引脚设计上拉,以保证主机SPI关闭时,NSS引脚为高电平。

Configuration
#

Data Size
#

  • 每次传输的数据宽度
  • 一般来说是 8bit

First Bit
#

  • (高/低) 有效位先传输
  • MSB 高位优先(D7)
  • LSB 低位优先(D0)

Prescaler (for Baud Rate)
#

  • 系统频率预分频给波特率,SPI的通信速度

Clock Polarity (CPOL)
#

  • 时钟线(SCL)在空闲状态(没有数据传输时)是低电平还是高电平

Clock Phase (CPHA)
#

  • 数据在时钟的第几个边沿被采样(读取)
    • 1 Edge = 第 1 个边沿(即上升沿 Rising Edge)采样。
    • 2 Edge = 第 2 个边沿(即下降沿 Falling Edge)采样。

USB HOST 配置
#

MODE
#

  • Mode/OTG/Dual Role_Device (双角色设备模式):工作在双角色设备模式,通过ID线切换角色
  • Host_Only (仅主机模式):工作在主机模式下
  • Device_Only (仅外设模式):工作在外设模式下

usb在stm32h743vit6作为主机的时候,有两种模式,片上集成了 USB_OTG_FS(全速,最高12Mb/s) 和 USB_OTG_HS(高速,最高480Mb/s) 两个USB_OTG,这里简单介绍一下FS模式

Activate_SOF Activate_VBUS
#

  • SOF:用于全速模式下主机从机发送一个内部的 1ms 时间基准信号,直接通过 STM32 的一个 GPIO 引脚输出,用于保持总线同步和防止设备进入挂起状态。
  • VBUS:

Speed
#

如字面意思所示:

  • Full Speed 12Mb/s
  • Low Speed 1.5Mb/s

Enable internal IP DMA
#

  • 意思:是否让 USB 外设使用自带的 DMA(直接存储器访问)控制器来自动搬运数据,而不占用 CPU。
  • 作用
    • 开启 (Enabled):效率最高,CPU只需发指令,数据自动传输。但是,在 STM32H7 系列上,开启此项会引入复杂的 Cache Coherence(缓存一致性) 问题。你需要配置 MPU(内存保护单元)并确保 USB 缓冲区位于非 Cache 区域(如 D2 SRAM),否则会导致数据读不到或发不出去。
    • 禁用 (Disabled):CPU 参与数据搬运。
  • 建议保持 Disabled。对于键盘/手柄这种数据量极小(几十毫秒才几十个字节)的应用,CPU 搬运的开销几乎可以忽略不计。禁用它可以避开 H7 系列最难调试的 Cache 坑,确保项目快速成功。

Signal start Of frame
#

  • 意思:配置是否在一个特定引脚上输出 1ms 周期的脉冲信号(SOF 信号)
  • 作用:通常用于音频流同步等对时间基准要求极高的场景
  • 建议保持 Disabled。你的小车控制应用不需要这个功能

NVIC 配置
#

STM32 的官方 USB Host 库(Middleware)是完全基于中断驱动的。它依赖中断信号来判断什么时候设备插入了、什么时候数据接收完成了。

  • USB OnThe Go FS global interrupt:USB 全局主中断
  • USB On The Go FS End Point 1 Out/In…:端点 1 的专用中断(通常用于特殊传输)
  • 建议:开启 USB OnThe Go FS global interrupt 的中断,实现通信

TIM 配置
#

以配置一个31Hz的定时器为例子:

Slave Mode 从模式
#

  • 含义: 决定该定时器是否受其他定时器或外部信号控制(例如,让另一个定时器触发这个定时器启动)
  • 你的情况: 你只需要一个独立运行的定时器来产生周期性中断,不需要依赖外部信号
  • Disable

Trigger Source 触发源
#

  • 含义: 配合从模式使用,选择具体的触发信号来源
  • Disable

Clock Source 时钟源
#

  • 含义: 决定定时器计数的基准“心跳”来自哪里
  • 选项通常包括: Internal Clock (内部时钟,来自APB总线), ETR2 (外部触发引脚) 等
  • 关键点: 为了产生精确的定时中断,我们通常使用MCU内部的高速总线时钟
  • 必须选择 Internal Clock (内部时钟)。选定后,下方的配置栏(Prescaler, Period等)才会出现

Channel 1-4 通道1-4
#

  • 含义: 这些通道用于输入捕获(测量外部信号脉宽)或输出比较(产生PWM波形)
  • Disable

Combined Channels / One Pulse Mode 等
#

  • 高级功能(霍尔传感器接口、单脉冲模式等)

频率计算
#

  • stm32f411ceu6的 TIM1 挂在 APB2 总线上,所以查看当前定时器总线速度,显示为 100MHz
  • 计算定时器频率: $$ 定时器溢出频率 = \frac{\text{定时器输入时钟 (TIM\_CLK)}}{(Prescaler + 1) \times (Period + 1)}​ $$
  • 主要参数:
    1. Prescaler PSC 预分频系数: 把高速时钟变慢
    2. Counter Period ARR 自动重装载值: 计数多少次后溢出(产生中断)
  • 所以这里我们填入 PSC=99ARR=32257
  • 向上计数模式
  • 自动重装开启
  • CKD 保持默认

中间件相关配置
#

NFC4 配置
#

2025.12.01

针对st25dv系列芯片:选用中间件 X-CUBE-NFC4

mode
#

需要勾上两个勾:Board Part NFC & Board Support STM32Cube Custom BSP Drivers (软件包也是下这两个就行,这里是3.0.0版本)

Platform Settings
#

手动配置三个项目:LPD & I2C & GPO

Haley
作者
Haley