你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 G0系列,程序运行在BANK1,擦写BANK2失败

[复制链接]
kkkkkkkkkkkkfed 提问时间:2024-7-8 07:42 / 已解决

STM32 g0系列双BANK芯片,程序运行在BANK1时,想要擦写BANK2,会发生Error或者HardFault。

是否不支持这样的操作?

收藏 评论5 发布时间:2024-7-8 07:42

举报

5个回答
xmshao 最优答案 回答时间:2024-7-9 17:29:47
我这边经过实际测试发现,如果在option里DUAL_BANK勾选时,我们基于库函数


的相关定义给定BANK进行擦除时,假设程序运行在BANK1,即0x8000000开始的空间。


若要擦除BANK2,给的宏参数是FLASH_BANK_1才行。


我刚开始给的是FLASH_BANK_2,结果发现每次0x8000000开始的空间都被擦除了。这点要注意下。


我使用ARM MDK IDE测试的,当我按键多次后就对BANK2进行全擦除,是可以实现对BANK2的擦除的。


不过就是那个参数给的是FLASH_BANK_1,这点跟手册描述似乎是相反的,我会继续跟踪确认这点。


void HAL_GPIO_EXTI_Falling_Callback(uint16_t GPIO_Pin)
{

if (Cnt_KeyIN>3)
        
{
       Cnt_KeyIN = 0;
      
      HAL_FLASH_Unlock();
      
      FLASH->CR |=  FLASH_BANK_1;//!!!!
      
      FLASH->CR |= (FLASH_CR_STRT );
}

}
butterflyspring 回答时间:2024-7-8 09:39:36
肯定支持这样的功能。
STM32 一直都支持 flash 擦写。

不过双bank 模式首先检查一下是否使能了双bank,否则写错地址就容易发生错误。

xmshao 回答时间:2024-7-8 09:49:06
对于STM32G0系列,那些片内FLASH容量不低于256kB的型号是支持双BANK的。


对于双BANK芯片,其典型应用就是对BANK 1进行Flash编程或擦除时,另一个BANK 2里的程序可以正常运行,


不过,不支持同时对该bank 2的flash编程操作。


注意页地址给正确。擦除时芯片供电稳定。
kkkkkkkkkkkkfed 回答时间:2024-7-8 11:03:38

xmshao 发表于 2024-7-8 09:49
对于STM32G0系列,那些片内FLASH容量不低于25kB的型号是支持双BANK的。</p>
<p>

我使用的是STM32 G0B1RCT6,已经使能了双BANK,生成的HAL中已经定义了“FLASH_DBANK_SUPPORT”

现在程序运行在BANK1(默认),想要尝试擦写BANK2,调用擦写函数也能返回HAL-OK,但是在IAR中View Memory,擦写成功的BANK2的那一页,没有变成0xFF。接着再写入,就发生hardfault了。

是否还有什限制或者还需要提前做什么设定吗?求指导!

xmshao 回答时间:2024-7-9 17:39:47
.
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版