打印
[STM8]

STM8L152R8T6的flash块写问题

[复制链接]
2154|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skyhawl|  楼主 | 2017-11-23 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 skyhawl 于 2017-11-23 15:45 编辑

该芯片的flash的main program区域可以到0x17fff,但是在进行flash块写的时候,可以一直写到0xffff所在块。但是0x10000之后的块写不进去了。不知道是何原因。大概代码如下。完整代码比较多。简单贴出部分。大致做法是:有一个flash中的fls_write_block函数。将它copy到ram中,然后从ram中调用。使用环境为STVD环境。


        COPY_FLSWRITEBLOCK_INTO_RAM();        
        for(i=0;i<128;i++)//初始化/赋值块数据缓冲区
        {
                DataBuffer = i;
        }
        eeprom_block = 0xff80; // 块操作的首地址。
        _asm("call _eeprom_write_block_in_ram");        // 调用RAM地址的指令
//----------------------------------------        
        eeprom_block = 0x10000; // 块操作的首地址。
        _asm("call _eeprom_write_block_in_ram");        // 调用RAM地址的指令


//----------------------------------------        
void FLS_WRITE_BLOCK(void)
{
        unsigned char count;
        
        /*固定编程时间为tprog,FIX=1 */
        FLASH_CR1 &= ~0x01;
        FLASH_CR1 |= 0x01;
        /*设置为块编程模式*/
        FLASH_CR2 &= ~0x01;
        FLASH_CR2 |= 0x01;

        /*输入MASS密钥,解锁EEPROM */
        FLASH_PUKR = 0x56;
        FLASH_PUKR = 0xAE;
        
        /*写入128字节数据,即一个块*/
        for(count = 0;count < 128;count++)
        {
                *((unsigned char*)(eeprom_block + count)) = DataBuffer[count];
        }
        
        /*等待HVOFF=1,即EEPROM编程结束*/
        while((FLASH_IAPSR & 0x40)!= 0);
}
//----------------------------------------        
/************将块写函数EEPROM_WRITE_BLOCK拷贝到RAM中************/
void COPY_EEPROMWRITEBLOCK_INTO_RAM(void)
{
        unsigned char eecount = 0;
        while(*((unsigned char*)FLS_WRITE_BLOCK+ eecount) != 0x81)
        {
                eeprom_write_block_in_ram[eecount] = *((unsigned char*)FLS_WRITE_BLOCK+ eecount);
                eecount++;
        }
        eeprom_write_block_in_ram[eecount] = 0x81;         //0x81为RET指令
}

沙发
kingkits| | 2017-11-23 15:56 | 只看该作者
eeprom_block 是整型的吧

使用特权

评论回复
板凳
skyhawl|  楼主 | 2017-11-30 15:52 | 只看该作者
改为调用stm8l15x_flash.c中的函数,配置.FLASH_CODE,带-ic。就没有问题了。上述代码,如果用u32,反而正确的跑不对了。

使用特权

评论回复
地板
zhuotuzi| | 2017-11-30 21:12 | 只看该作者
多谢楼主的宝贵经验

使用特权

评论回复
5
zhuotuzi| | 2017-11-30 21:13 | 只看该作者
是不是后面的存储区跟前面的不同?

使用特权

评论回复
6
heisexingqisi| | 2017-11-30 23:59 | 只看该作者
虽然不知道怎么回事,但是觉得楼主挺厉害的

使用特权

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

本版积分规则

13

主题

22

帖子

0

粉丝