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