大家好,我用STM8S208MB来做自升级。 在RAM里运行的时候,发现一个比较怪异的问题。用块写数据的时候,当数据小于64K(10000H)的时候,一切正常。当数据大于64K(10000H)的时候,就无法写进去。关键程序如下: for (Count = 0; Count < BLOCK_SIZE; Count++) { *((@far u16*)StartAddress + Count) = ((u8)(Buffer[Count])); } 如果是那个数据类型是u16,数据大于64K就无法写进去,一直停在那里。如果数据类型是u8,数据大于64K它也能写,但它写的地方不是10000H,而是8000H的位置。 百思不得其解,困扰我一周了,请高手解惑。 |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
RE:为什么STM8S208写不进Flash(超过64K)
回复:为什么STM8S208写不进Flash(超过64K)
关键代码如下:
#if 1
/************* write into flash rom *************/
for(i=0;i
RE:为什么STM8S208写不进Flash(超过64K)
单单这样 很难看出问题的
只能说方法没错 ,不知道细节的东西了。
回复:为什么STM8S208写不进Flash(超过64K)
我用的是COSMIC,代码其实很简单,就是在RAM里直接调用Flash擦写的那三个INRAM函数。
回复:为什么STM8S208写不进Flash(超过64K)
disableInterrupts();
unlock_PROG();
unlock_DATA();
_fctcpy('F');
MCUUpdateCodeProc();
写Flash的动作:
for(i=0;iIAPSR = ~0x02;
/* Lock data memory */
FLASH->IAPSR = ~0x08;
跳转到起始位置,相当于重启:
//reset stack pointer (lower byte - because compiler decreases SP with some bytes)
_asm("LDW X, SP ");
_asm("LD A, $FF");
_asm("LD XL, A ");
_asm("LDW SP, X ");
RE:为什么STM8S208写不进Flash(超过64K)
还有当大于64K的时候 你重新写一个以64K那个地址为起始地址的看看,就是说呢分开 两个64K的来写 。
回复:为什么STM8S208写不进Flash(超过64K)
计算一下:D400H-8000H = 5400H = 21504/128 = 168块 = 21504/1024 = 21K。
测试发现,也就是在这里会停下来,用小于64的代码写,有时候会重复写到8000H去,有时候就是在D400H一直写错,非常精准。
我原来以为是通信出了错误,由于在RAM里无法查看,就去掉在RAM里运行,关闭擦写Flash动作,在ROM里跑程序,发现接收没有错。
回复:为什么STM8S208写不进Flash(超过64K)
回复:为什么STM8S208写不进Flash(超过64K)