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)} $$
- 主要参数:
- Prescaler
PSC预分频系数: 把高速时钟变慢 - Counter Period
ARR自动重装载值: 计数多少次后溢出(产生中断)
- Prescaler
- 所以这里我们填入
PSC=99,ARR=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
