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

[复制链接]
807|3
 楼主| zaijzhgh 发表于 2017-4-12 17:11 | 显示全部楼层 |阅读模式
使用STM8S005C6做IAP的时候, 使用了Flash的标准块编程, 执行了使能Flash标准块编程后, MCU就不执行了, 从串口上看到无输出, 断点也没有执行到. 以下是调用的代码及设置:

  1. #pragma section (FLASH_CODE)
  2. //addr must at begin of block
  3. void FLASH_ProgBlock(uint8_t * addr, uint8_t *Buffer)
  4. {
  5.     u8 i;

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

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


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


想不明白为什么会出问题. 各位, 能给个思路吗?
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

粉丝
快速回复 在线客服 返回列表 返回顶部