求助,STM32F407ZE与STM32F407ZG按官方给的datasheet一个是512k flash,一个是1M flash,STM32F407ZG的内存范围如下 #define ADDR_FLASH_SECTOR_0 (0x08000000) // sector0 16 Kbytes #define ADDR_FLASH_SECTOR_1 (0x08004000) // sector1 16 Kbytes #define ADDR_FLASH_SECTOR_2 (0x08008000) // sector2 16 Kbytes #define ADDR_FLASH_SECTOR_3 (0x0800C000) // sector3 16 Kbytes #define ADDR_FLASH_SECTOR_4 (0x08010000) // sector4 64 Kbytes #define ADDR_FLASH_SECTOR_5 (0x08020000) // sector5 128 Kbytes #define ADDR_FLASH_SECTOR_6 (0x08040000) // sector6 128 Kbytes #define ADDR_FLASH_SECTOR_7 (0x08060000) // sector7 128 Kbytes #define ADDR_FLASH_SECTOR_8 (0x08080000) // sector8 128 Kbytes #define ADDR_FLASH_SECTOR_9 (0x080A0000) // sector9 128 Kbytes #define ADDR_FLASH_SECTOR_10 (0x080C0000) // sector10 128 Kbytes #define ADDR_FLASH_SECTOR_11 (0x080E0000) // sector11 128 Kbytes 那STM32F407ZE应该是前8个扇区,但是我在不小心将数据写入第10和第11扇区可以正常读写,求大侠指点,STM32F407ZE有扇区10和11吗,如果有是怎么分配地址,如果没有写入的话存储在哪里 |
STM32F407 定时器触发DMA 求助大神
【MCU实战经验】基于STM32F407的音频播放器设计
盘古UE-STM32F407工控板原理图
【STM32F429心得\疑问】+STM32F4之FSMC和FMC
STM32F429读取IO口传输的数据速率
STM32F407ZGT6 手摸芯片背部重启
STM32F4 SPI 动作时,软件片选信号被拉高,IO口程序逻辑失控
STM32F401RE NUCLEO求助,串口一直不能进中断
读取STM32F407内部温度传感器值错误
STM32F429多路内部ADC独立采集的办法
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;
}
正确的,断电后读取正常
用某坛友的话说就是,其实流片时都是大容量的,只是出于某种原因,出厂时将产品信息写成了小容量512K的,但是物理上是没有屏蔽掉后512K的。
如果每个型号都流一次片,一次少出也得几十万,那么多系列和型号,ST是扛不住的。因此都按大容量的流片,测试稳定的话,就烧成大容量信息,正常的卖;如果有些缺陷,但是不影响小容量的功能,那么就当小容量的卖;最后剩下的,连小容量的功能也无法满足,就报废。
就当成是将产品按特等、优等、良品、次品、废品分类。
评分
查看全部评分
评分
查看全部评分