打印
[STM8]

STM8S207,EEPRO block编程死机,请教高手!

[复制链接]
3939|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lzymcu|  楼主 | 2011-3-31 21:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
每次运行块编程CPU就不动啦,仿真出现SWIM错误,我用的V1.1.1固件库,这个问题已经困扰我很久啦,老板很生气,后果很严重!
void EEPROM_Init(void)
{
u8 i;u16 j=0;
FLASH_DeInit();
FLASH_ITConfig(DISABLE);
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
EEPROM_to_Buffer();
j|=System_Parameter[4];
j<<=8;
j|=System_Parameter[3];
if(j==0) //系统首次启动
{
  for(i=0;i<60;i++)
   System_Parameter[i]=System_Parameter_Default[i];
}
j+=1;//启动次数+1
System_Parameter[3]=j;
System_Parameter[4]=j>>8;
Buffer_to_EEPROM();
return;
}

void Buffer_to_EEPROM(void)
{
u8 i;
disableInterrupts();
FLASH_Unlock(FLASH_MEMTYPE_DATA);
/*
for(i=0;i<60;i++)
{
  FLASH_ProgramByte(0x4000+i,System_Parameter[i]);
  while(!FLASH_GetFlagStatus(FLASH_FLAG_EOP )) ;
}*/
Delay_nms(10);
FLASH_ProgramBlock(0,FLASH_MEMTYPE_DATA ,FLASH_PROGRAMMODE_STANDARD,System_Parameter );
  FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);//start address is 0x4000
FLASH_Lock(FLASH_MEMTYPE_DATA);
enableInterrupts();
return;
}
沙发
lzymcu|  楼主 | 2011-4-2 12:09 | 只看该作者
怎么没人回复啊?单字节写入太慢,用block一写CPU就挂了,连看门狗也复位不了,香水城救我啊!

使用特权

评论回复
板凳
lzymcu|  楼主 | 2011-4-2 12:15 | 只看该作者
具体表现是

使用特权

评论回复
地板
lzymcu|  楼主 | 2011-4-2 12:23 | 只看该作者
产品调试现场[local]1[/local]

使用特权

评论回复
5
lzymcu|  楼主 | 2011-4-2 12:26 | 只看该作者

使用特权

评论回复
6
qianguiyi| | 2011-4-2 13:33 | 只看该作者
我不用库,
不过我用的是STM8L152 ,
不用 // while(!(FLASH_IAPSR&0x02));        /*等待写完成*/
这个语句就可以了

使用特权

评论回复
7
lzymcu|  楼主 | 2011-4-15 19:52 | 只看该作者
怎么没人回复 啊香主?哎。。。真的搞不定了,都有外挂EEPROM 的打算了

为什么程序一执行到这里STLINK就挂了啊?

使用特权

评论回复
8
guanggaoren| | 2011-4-16 00:41 | 只看该作者
MARK

使用特权

评论回复
9
lzymcu|  楼主 | 2011-4-16 15:13 | 只看该作者
改用word编程了,ok!一边喝着茶一边看着仿真,心里总算放下了这块砖头。。。。。。。。。。。把程序贴上
void Buffer_to_EEPROM(void)
{
        u8 i;
        u32 k;
//        disableInterrupts();
        FLASH_Unlock(FLASH_MEMTYPE_DATA);       
/*       
        for(i=0;i<60;i++)
        {
                FLASH_ProgramByte(0x4000+i,System_Parameter[i]);
                while(!FLASH_GetFlagStatus(FLASH_FLAG_EOP )) ;
        }*/
        IWDG_ReloadCounter();//feeding watchdog
        for(i=0;i<27;i++)//实际只用了108字节
        {
                k=0;
                k+=(u8)System_Parameter[i*4];
                k<<=8;
                k+=(u8)System_Parameter[i*4+1];
                k<<=8;
                k+=(u8)System_Parameter[i*4+2];
                k<<=8;
                k+=(u8)System_Parameter[i*4+3];
                FLASH_ProgramWord((0x4000+i*4),k);
                while(!FLASH_GetFlagStatus(FLASH_FLAG_EOP )) ;
                GPIO_WriteReverse (GPIOC, GPIO_PIN_6);
        }
//        FLASH_ProgramBlock(0,FLASH_MEMTYPE_DATA ,FLASH_PROGRAMMODE_STANDARD,System_Parameter );
//                FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);//start address is 0x4000
        FLASH_Lock(FLASH_MEMTYPE_DATA);
        return;
}

断开仿真。。。。。。。。。。。。。。。。。。。。
再连接仿真看看。。。。。。。。。。。。。。。。。。。。
靠,里面数据又什么都没有。。。。。。。。。。。。。。。。:'(
似乎数据都只是存在了电脑里面,并没有真正写入eeprom。。。。。。。。。。。。。。。汗
ST你TMD就这么个折磨人,不就一个eeprom吗,至于吗?
对ST彻底失望了。。。。。。。。。。。。。
在这里发帖也基本没用。。。。。。。。。。。。。就当发发牢骚解解闷了:@

使用特权

评论回复
10
sdpz| | 2011-4-16 16:53 | 只看该作者
用库的我看都不会看一眼

使用特权

评论回复
11
xzb_0531| | 2011-5-30 08:03 | 只看该作者
block 操作貌似要在ram中运行!!!!

使用特权

评论回复
12
bili| | 2011-5-30 09:12 | 只看该作者
block编程操作要在RAM中运行才可以。如何在RAM中运行请继续搜索坛里的帖子

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

96

帖子

1

粉丝