OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9148|回复: 1

我把STM32内部Flash了三个区域!老是跑到 硬件错误发生的中断处理函数

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2012-7-17
在线时间
0 小时
发表于 2012-7-17 12:51:35 | 显示全部楼层 |阅读模式
 第一个区域用来放引导程序,第二个区域用来放IAP更新程序,第三个区域用来执行用户程序
第一个区域0x08000000-0x08003000
第二个区域0x08003000-0x08013305
第三个区域0x08013360-0x0801 FFFF
第一、第二个区都可以到了第三写数据的时老是跑到 硬件错误发生的中断处理函数 这是为什么啊
#include "common.h"
#include "stm32f10x_flash.h"
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;
/* 变量声明 -----------------------------------------------------------------*/
uint8_t file_name[FILE_NAME_LENGTH];
//用户程序Flash偏移
uint32_t FlashDestination = ApplicationAddress;
uint32_t Flash2 = Address;
uint32_t ENDAddress = 0x0801FFFF;
uint16_t PageSize = PAGE_SIZE;
uint32_t EraseCounter = 0x0;
uint32_t Erase_Counter = 0x0;
uint32_t NbrOfPage = 0, Add = 0x00;
uint32_t NbrO_fPage = 0;
FLASH_Status FLASHStatus = FLASH_COMPLETE;
uint32_t RamSource;
extern uint8_t tab_1024[1024];
uint32_t dat=0x00021212;
uint32_t dat1;
volatile TestStatus MemoryProgramStatus;



void flsh_dat(void)
{   //int32_t i;
   
   NbrO_fPage= ( ENDAddress - Flash2) / PAGE_SIZE;
   for(Erase_Counter = 0x0800a87f; (Erase_Counter < NbrO_fPage) && (FLASHStatus == FLASH_COMPLETE); Erase_Counter++)
    {
    FLASHStatus = FLASH_ErasePage(Flash2 + (PAGE_SIZE * EraseCounter));
    }
         dat1 = *(__IO uint32_t*)Address;
         Flash2 = Address;
    while((Flash2< ENDAddress) && (FLASHStatus == FLASH_COMPLETE))
   {          
     if(dat1==0xffffffff)
         {
          FLASH_Unlock();
          FLASH_ProgramWord(Flash2, dat);
        
 FLASH_Lock();
         }
         Flash2= Flash2 + 4;
    }
   Flash2 = Address;
  while((Flash2 < ENDAddress) && (MemoryProgramStatus != FAILED))
  {
    if((*(vu32*) Flash2) != dat)
    {
      MemoryProgramStatus = FAILED;
    }
    Flash2 += 4;
  }
  
}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-17 18:34:21 | 显示全部楼层
0x08013360这个地址不对.
应该地址为0X200的倍数.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-22 12:24

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表