
主要问题:STM32G031K8程序打断点在STARTUP.S文件中,停在断点处就出现FLASH_CR寄存中的CFGBSY置位为1,导致操作flash错误。而且按照手册说明该位的置位和复位均由硬件决定。所以外部完全无法操作。导致G系列的flash是无法操作的。本人认为是芯片的设计问题,已经排除芯片坏掉,除非整个批次均有问题因为已经换过5片MCU以验证问题。(按照断点处的情况 即整个代码只执行了一句话)。 主要情况如下:IDE为MDK-KEIL-V5.36,工具是STM32G031-Nucleo-32。参考例程是官方例程STM32Cube_FW_G0_V1.5.0\Projects\NUCLEO-G031K8\Examples_LL\GPIO\GPIO_InfiniteLedToggling_Init中的例程MDk例程(当然也做过自己的工程测试,结局一样)(为啥采用GPIO工程例程而不是操作flash工程来说明芯片有情况,是因为用flash工程一样出现该情况)。具体测试情况如下面图片,毕竟有图有真相。 不知道大家是否有碰到过,请远离深坑! ![]() |
STM32H745启动与烧录问题
motor profiler参数识别卡在7%是什么原因啊,电机只响不动,手动旋转有阻力,顿感
STM32G0b1 USB device cdc显示设备描述符请求失败
STEVAL-PTOOL4A开发板资料求助
nucleo板子自带的stlinkv3坏了咋整
stm32h563 无法完全整片擦除
STSPIN32G4的AN5432文档资料去哪里找?
开发逆变器进行STM32学习,路径如何规划?
STM32G474如何实现Buck变换器的COT控制模式
关于使用cubemx配置stm32g473re的opamp工作模式:Programmable gain amplifier mode with external filtering
如果用Mdk,那个CFGBSY位似乎有点不稳定,感觉跟IDE有点关系。
您好,如果用IAR,在显示上面的确如您贴图所示CFCGSY不会为1,但是照样操作不了Flash,原因是一致的,只是CFCGSY不是为1,没在IDE上显示,但是操作flash那一步需要判断时条件达到了 如下代码进入了:
/* Wait for control register to be written */
timeout = HAL_GetTick() + Timeout;
while ((FLASH->SR & FLASH_SR_CFGBSY) != 0x00U)
{
if (HAL_GetTick() >= timeout)
{
return HAL_TIMEOUT;
}
}
MDK不是不稳定, 是把把必出现该位置1,不知道ST后续是否会优化处理该问题,同样问题在STM32G4上也有,不过G4没有这个CFGBSY位,则会导致PGAERR,PGSERR两位置1,同样是打断点,没有执行与flash任何相关的代码,我个人怀疑是断点所导致,不过暂时没有定位明白。
是的,怀疑跟MDK处理端点这个地方有关。
不过只是怀疑,没有证明现在
有时候上电的时候没问题,软件复位后再操作flash擦除又有问题。都是同样卡死在cfgbsy