| 
 
中级会员  
 
	积分345金钱345 注册时间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 ()
 | 
 |