主要问题: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工程一样出现该情况)。具体测试情况如下面图片,毕竟有图有真相。 不知道大家是否有碰到过,请远离深坑! |
《MCSDK5.X中增加位置环》提及mc_position.c/mc_position.h
STM32G473 DRDY不置位?
STM32G030F6 ADC+DMA多通道非连续采样无法正常工作?
STM32G0B1VE的CAN过滤器个数问题
stspin32G4这颗mcu里面集成的是哪一款G4?能不能用cubemx来进行配置
STM32G473是否支持硬件AES?
STM32G473VET6同时使用6个片上放大器(OPAMP)的PGA加外部偏置模式,引脚位置让差分信号走线分离,信号有无较大影响?
stm32G474的flash模式如何判定?single bank 和dual bank
STM32G0B1adc+dma采样数据错位
STM32G474 ADC无法正常启动转换
如果用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