1. 硬件连接与CubeMX基础配置
第一次用STM32F407的DMA+SPI驱动M95512 EEPROM时,我在硬件连接上就踩了坑。这个512Kbit的SPI接口存储芯片,引脚看似简单但暗藏玄机。最容易被忽略的是WP(写保护)引脚必须接高电平,否则所有写操作都会失败。我当时用杜邦线随便接了GND,结果调试了一整天才发现是这个低级错误。
CubeMX配置SPI3时,时钟源要选PLLCLK才能达到最高42MHz。具体参数设置有个关键细节:CPOL和CPHA必须与EEPROM规格书一致。M95512默认是模式0(CPOL=0,CPHA=0),但实际测试发现模式3(CPOL=1,CPHA=1)更稳定。这里有个技巧:用逻辑分析仪抓取EEPROM开发板的波形,直接对照着配置最保险。
DMA通道配置容易出错的地方是数据流选择。以SPI3_TX为例,查参考手册可知要选DMA1 Stream5 Channel0。我最初错选了Stream7,导致数据传输时触发硬件错误。建议配置时打开"Show Advanced"选项,仔细核对每个参数:
- Direction: Memory to Peripheral
- Priority: Medium
- Memory Data Width: Byte
- Peripheral Data Width: Byte
- Memory Increment: Enable
- Peripheral Increment: Disable
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GPIO速度的隐藏陷阱
调试时遇到最诡异的问题是SPI完全没有波形输出。用示波器检查所有引脚,发现SCK、MOSI都是死寂的直线。查遍CubeMX配置没发现问题,最后发现是GPIO速度设置不当——初始配置为低速模式,而SPI3时钟设成了21MHz。
教训:GPIO速度必须与SPI时钟匹配。当SPI时钟超过10MHz时,GPIO必须配置为Very High Speed。修改方法是在MX_GPIO_Init函数里增加这行:
c复制GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
这个坑让我浪费了两天时间,因为CubeMX默认生成的代码是低速模式,而手册里又没明确说明这个关联性。后来发现STM32的GPIO速度实际
