You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32L073调用HAL_FLASHEx_DATAEEPROM_Program触发HardFault问题咨询

核心问题排查

1. EEPROM寄存器操作顺序错误

你当前代码先调用HAL_FLASHEx_DATAEEPROM_DisableFixedTimeProgram()再执行解锁操作,而所有EEPROM控制寄存器在锁定状态下都是写保护的,此时写保护寄存器会直接触发总线错误,进入HardFault。
正确的操作顺序应该是先解锁EEPROM,再修改控制寄存器配置:

HAL_FLASHEx_DATAEEPROM_Unlock();
// 解锁后再修改固定时间编程配置
HAL_FLASHEx_DATAEEPROM_DisableFixedTimeProgram();

2. 指针非对齐访问触发异常

STM32L0系列使用Cortex-M0+内核,该内核不支持非对齐的32位数据访问。如果你传入的pData是从字符串指针强制转换而来,没有保证4字节对齐,那么代码执行到*pData读取32位数据时就会直接触发HardFault,根本不会执行后续的EEPROM写入操作。
你可以在函数入口增加对齐校验,或者在传入字符串时手动对齐到4字节边界。

3. 循环逻辑语义模糊

参数dataLength的定义不清晰,当前循环逻辑会导致计数错误:

  • 如果dataLength代表要写入的字数(每个字4字节),那么循环终止条件应该改为ui32Addr < dataLength * 4,否则循环次数只有实际需要的1/4
  • 如果dataLength代表要写入的字节数,需要保证传入的字节数是4的整数倍,否则会出现越界访问pData或者写入不完整的问题

优化建议

EEPROM编程过程中建议临时关闭全局中断,避免其他中断打断编程流程导致操作异常,编程完成后再恢复中断状态。

内容的提问来源于stack exchange,提问作者Dr_Smu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 13:27:03