STM8S005 STVD+COSMIC在进行FLASH擦除或写入操作时,在执行了使能的代码后(FLASH_CR2 |= 0x01; FLASH_NCR2 &= 0xFE;)程序就卡死了。如果把这两行注释掉,就可以完成写入或擦除。Flash操作相应的代码已经放到RAM执行。对比了例程,寄存器的配置等都应该没有问题,现在陷入僵局,不知道问题出在哪里了,请各位大佬帮忙指点指点,不胜感谢!
贴上代码:
#pragma section (FLASH_CODE)
void sFlashBlockErase(INT16U ulBlockAddr)
{
FLASH_PUKR = 0x56;
FLASH_PUKR = 0xAE;
while (!(FLASH_IAPSR & 0x02));
FLASH_CR2 |= 0x20;
FLASH_NCR2 &= 0xDF;
*((volatile INT8U*)ulBlockAddr) = 0;
while (!(FLASH_IAPSR & 0x04));
FLASH_IAPSR &= 0xFD;
}
void sFlashDataWrite(INT16U wAddress,INT16U length,INT8U *pData)
{
INT16U bCount;
FLASH_PUKR = 0x56;
FLASH_PUKR = 0xAE;
while (!(FLASH_IAPSR & 0x02));
FLASH_CR2 |= 0x01;
FLASH_NCR2 &= 0xFE;
for (bCount = 0; bCount < length; bCount++)
{
*((@near INT8U *)wAddress+bCount) = ((INT8U)(pData[bCount]));
while (!(FLASH_IAPSR & 0x05));
}
PB_ODR |= 0x0F;
FLASH_IAPSR &= 0xFD;
}
#pragma section ()
|