ST意法半导体
直播中

贾桂林

7年用户 1478经验值
私信 关注
[问答]

SWD上的STM32L431批量擦除不起作用是什么原因?怎么解决?

我创建了一个带有 STM32F207 控制器的自定义 PCB。有了这个板,我想使用 SWD 解决不同的目标。我的目标是 STM32F407 和 STM32L431 控制器。我在我的 F207 控制器上实现了一个带有定时器和 DMA 的自定义 SWD 接口,现在我可以通过它们的内置 SWD 接口与我的目标交谈。例如,我可以读取目标的 UniqueID 或写入它们的闪存。
但是我对闪存的批量擦除有疑问。使用 F407,闪存整体擦除工作正常。大约用了 8 秒,然后孔闪光灯变空了。但在 L431 上它不会工作。
写入 L431 的空闪存工作正常。
我采取以下步骤来执行闪存的批量擦除:
  • 解锁对闪存寄存器的写访问(有效,因为不再设置 LOCK 位,我可以写入闪存)。
  • 然后我检查闪存状态寄存器中的 BSY 位是否已设置。设置好后,我等到它被清除。
  • 然后我清除 FLASH_ACR 寄存器中的 ICEN 和 DCEN 位。参考手册中没有提到这一点,但ST在HAL函数中是这样做的。但是删不删都没有关系,删flash都不行。
  • 现在我正在清除闪存状态寄存器中的每个错误位
  • 设置flash控制寄存器中的MER1位(然后读出flash控制寄存器检查该位是否已设置)
  • 最后设置 FLASH_CR 寄存器中的 STRT 位
在 F407 上,此例程运行良好。设置 STRT 位后,大约需要 8 秒。直到 BSY 标志被清除。另一方面,对于 L431,整体擦除只需要 22 毫秒(根据 ST 的介绍)。但它根本不起作用。
PGSERR 位也在 L431 的 FLASH_SR 寄存器中设置。我不明白这个上下文中的位,因为我不想写,我想删除。
有任何想法吗?






回帖(1)

李玉林

2022-12-14 14:30:42
FLASH_CR 寄存器中的 PG 位已设置。对于 F407 这不是问题,但 L431 有问题。Wenn PG 位被清除,整体擦除按预期工作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分