打印
[STM8]

STM8S使能标准块编程后遇到MCU不执行的问题

[复制链接]
590|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
使用STM8S005C6做IAP的时候, 使用了Flash的标准块编程, 执行了使能Flash标准块编程后, MCU就不执行了, 从串口上看到无输出, 断点也没有执行到. 以下是调用的代码及设置:

#pragma section (FLASH_CODE) 
//addr must at begin of block
void FLASH_ProgBlock(uint8_t * addr, uint8_t *Buffer)
{
    u8 i;

    FLASH->CR2 |= (uint8_t)0x01;  // 这里执行到...
    FLASH->NCR2 &= (uint8_t)(~0x01);  //这里之后就不执行了
   
    for (i = 0; i < BLOCK_BYTES; i++)
    {
        //*((PointerAttr uint8_t*) (uint16_t)addr + i) = ((uint8_t)(Buffer[i]));   
    }
}
#pragma section ()
当然, 在标准块编程前, 已经解锁了Flash:

        FLASH->PUKR = 0x56;
        FLASH->PUKR = 0xAE;


       _fctcpy('F');//把Flash部分的代码拷贝到Ram


想不明白为什么会出问题. 各位, 能给个思路吗?

QQ图片20170412170535.png (30.54 KB )

QQ图片20170412170535.png
沙发
598330983| | 2017-4-13 08:56 | 只看该作者
库函数


void StmWriteEeprom(unsigned char Addr,unsigned char c)
{
    FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
    while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)FLASH_Unlock(FLASH_MEMTYPE_DATA);
    unsigned char *p=(unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+Addr);
    *p=c;
    while(FLASH_GetFlagStatus(FLASH_FLAG_EOP)== RESET);   
}

unsigned char StmReadEeprom(unsigned char Addr)
{
    return( *( (unsigned char *)(FLASH_DATA_START_PHYSICAL_ADDRESS+Addr) ) );
}

使用特权

评论回复
板凳
598330983| | 2017-4-13 08:56 | 只看该作者
我在另外一个贴看到的人家这么回复的,我看你都是用的寄存器操作,这个貌似官方提供 的有库函数。。你可以可以去看看库函数怎么实现的,对比一下哪儿的纰漏。

使用特权

评论回复
地板
zaijzhgh|  楼主 | 2017-4-13 10:38 | 只看该作者
598330983 发表于 2017-4-13 08:56
我在另外一个贴看到的人家这么回复的,我看你都是用的寄存器操作,这个貌似官方提供 的有库函数。。你可以 ...

感谢回复. 单个byte编程没有问题. 我使用寄存器也没有问题. 现在的问题是我想使用块编程(提供写的速度)遇到问题了...
换了一个STM8S207R8的开发板也是同样的问题.

使用特权

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

本版积分规则

4

主题

6

帖子

0

粉丝