[STM32F0] stm32f031g4 flash 擦除最后一页跑飞

[复制链接]
1211|7
 楼主| xiaofei558008 发表于 2019-12-10 11:55 | 显示全部楼层 |阅读模式

各位大侠,stm32f031g4 最后一页起始是0x08003c00,页大小1024字节;

试了4块板子,2块稳定ok,2块老是跑飞,2块跑飞的就在执行擦除指令的时候跑飞,有时候单步直线ok,全速跑飞;代码完全一样,已经关闭全局中断,执行擦除操作;
求大侠帮忙呀!



bool FlashErase(FLASH_TypeDef *pTemp, uint32_t PageAddr)
{
  bool status = false;
  int16_t temp = (PageAddr - FLASH_START_ADDRESS) / FLASH_PAGE_BYTES;

  if((temp > 0) && (temp < FLASH_PAGES))
  {
    /* Unlock Flash.
    */
    FlashUnlock(pTemp);

    /* Enable Erase Operation.
    */
    pTemp->CR |= FLASH_CR_PER;
    pTemp->AR  = PageAddr;
    pTemp->CR |= FLASH_CR_STRT;   //这个代码开始跑飞;那2个正常的,一直不跑飞;芯片代码一样

    /* Waiting for Erase finish.
    */
    while ((pTemp->SR & FLASH_SR_BSY) != 0);

    if((pTemp->SR & FLASH_SR_EOP) != 0)
    {
      pTemp->SR = FLASH_SR_EOP;
      status = true;
    }

    /* Clear Erase Operation.
    */
    pTemp->CR &= ~FLASH_CR_PER;

    /* Lock Flash.
    */
    FlashLock(pTemp);
  }

  return status;
}
goodluck09876 发表于 2019-12-10 12:54 | 显示全部楼层
感觉还是不要使用到最大的一个flash,但是你读写靠前的,是肯定不会出问题的!后面的,估计无法保证!
 楼主| xiaofei558008 发表于 2019-12-10 13:47 | 显示全部楼层
goodluck09876 发表于 2019-12-10 12:54
感觉还是不要使用到最大的一个flash,但是你读写靠前的,是肯定不会出问题的!后面的,估计无法保证! ...

没这么水吧?靠前都是代码区域
 楼主| xiaofei558008 发表于 2019-12-10 16:06 | 显示全部楼层
问题找到了,jlink仿真器速度太快了,挂了;换成1000k就好了;
zeshoufx 发表于 2019-12-10 17:19 | 显示全部楼层
xiaofei558008 发表于 2019-12-10 16:06
问题找到了,jlink仿真器速度太快了,挂了;换成1000k就好了;

谢谢分享,,,,以后注意降低仿真速度
wakayi 发表于 2020-1-7 14:21 | 显示全部楼层
感谢楼主分享经验
wowu 发表于 2020-1-7 14:29 | 显示全部楼层
以后我也需要注意了
xiaoqizi 发表于 2020-1-7 14:34 | 显示全部楼层
看来是速度过快了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

142

主题

997

帖子

13

粉丝
快速回复 在线客服 返回列表 返回顶部