中级会员
 
- 积分
- 342
- 金钱
- 342
- 注册时间
- 2018-2-1
- 在线时间
- 72 小时
|

楼主 |
发表于 2025-6-19 19:39:45
|
显示全部楼层
#pragma section (FLASH_CODE)
INT8U sFlashBlockErase(INT16U ulBlockAddr)
{
INT8U status = FLASH_BUSY;
INT32U dwTimeOutCnt = 0xFFFFF;
FLASH_PUKR = 0x56;
FLASH_PUKR = 0xAE;
while (!(FLASH_IAPSR & (1 << FLASH_IAPSR_PUL)));
FLASH_CR2 |= (1 << FLASH_CR2_ERASE);
FLASH_NCR2 &= (INT8U)(~(1 << FLASH_NCR2_NERASE));
*((volatile INT8U*)ulBlockAddr) = 0x00;
while (!(FLASH_IAPSR & (1 << FLASH_IAPSR_EOP)));
status = FLASH_COMPLETE;
FLASH_IAPSR &= (INT8U)(~(1 << FLASH_IAPSR_PUL));
return status;
}
INT8U sFlashDataWrite(INT16U wAddress,INT8U length,INT8U *pData)
{
INT8U i;
INT8U status = FLASH_BUSY;
FLASH_PUKR = 0x56;
FLASH_PUKR = 0xAE;
while (!(FLASH_IAPSR & (1 << FLASH_IAPSR_PUL)));
FLASH_CR2 |= (1 << FLASH_CR2_PRG);
FLASH_NCR2 &= (INT8U)(~(1 << FLASH_NCR2_NPRG));
for (i=0; i<length; i++)
{
*((volatile INT8U*)(wAddress+i)) = pData[i];
while (!(FLASH_IAPSR & (1 << FLASH_IAPSR_EOP)));
}
FLASH_IAPSR &= (INT8U)(~(1 << FLASH_IAPSR_PUL));
status = FLASH_COMPLETE;
return status;
}
#pragma section () |
|