stm32f407zg跟ze的区别_STM32F407ZE有扇区10和11吗

附上写入代码

enum bsp_err STM_FLASH_Write(uint32_t WriteAddr, uint32_t *pBuffer, uint32_t NumToWrite)

{

uint32_t start_addr;

uint32_t end_addr;

uint16_t begin_sec;

uint16_t end_sec;

FLASH_Status status = FLASH_COMPLETE;

if (   (WriteAddr < STM32_FLASH_BASE)

|| (WriteAddr > STM32_FLASH_END)

|| (WriteAddr % 4 != 0) )

{

return BSP_ERR_FLASH_ADDR;        // invalid address

}

FLASH_Unlock();

FLASH_DataCacheCmd(DISABLE);

FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_OPERR | FLASH_FLAG_WRPERR |

FLASH_FLAG_PGAERR | FLASH_FLAG_PGPERR|FLASH_FLAG_PGSERR);

start_addr = WriteAddr;

end_addr   = WriteAddr + (NumToWrite * 4);

begin_sec = STM_FLASH_GetFlashSector(start_addr);

end_sec   = STM_FLASH_GetFlashSector(end_addr);

while ( begin_sec <= end_sec )

{

status = FLASH_EraseSector(begin_sec, VoltageRange_3);  //VCC=2.7~3.6VÖ®¼ä!!

if ( status != FLASH_COMPLETE )

{

FLASH_DataCacheCmd(ENABLE);

FLASH_Lock();

return BSP_ERR_FLASH_ERASE;        // error

}

if ( begin_sec == FLASH_Sector_11)

{

begin_sec += 40;

}

else

{

begin_sec += 8;

}

}

while ( start_addr < end_addr )   // write data

{

if ( FLASH_ProgramWord(start_addr, *pBuffer) != FLASH_COMPLETE )

{

FLASH_DataCacheCmd(ENABLE);

FLASH_Lock();

return BSP_ERR_FLASH_WRITE;

}

start_addr += 4u;

pBuffer++;

}

FLASH_DataCacheCmd(ENABLE);

FLASH_Lock();

return BSP_ERR_OK;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值