你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F407ZE有扇区10和11吗

[复制链接]
c疯鸟 提问时间:2018-12-5 13:36 /
求助,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吗,如果有是怎么分配地址,如果没有写入的话存储在哪里

评分

参与人数 1 ST金币 +20 收起 理由
STMCU + 20

查看全部评分

收藏 1 评论11 发布时间:2018-12-5 13:36

举报

11个回答
c疯鸟 回答时间:2018-12-5 13:41:15
附上写入代码
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;
}
andey 回答时间:2018-12-5 14:04:57
提示: 作者被禁止或删除 内容自动屏蔽
c疯鸟 回答时间:2018-12-5 15:56:05
andeyqi 发表于 2018-12-5 14:04
读出来相应的地址的内容和你写入的是否相同,确认下是否写成功了,怀疑如果没有相应的地址写有可能什么事都 ...

正确的,断电后读取正常
andey 回答时间:2018-12-5 15:59:56
提示: 作者被禁止或删除 内容自动屏蔽
andey 回答时间:2018-12-5 16:21:08
提示: 作者被禁止或删除 内容自动屏蔽
zengyi703-16313 回答时间:2018-12-5 17:03:56
ST的秘密被你发现了,可能出现了stm32f103c8t6和stm32f103cbt6相同的情况
TIM图片20181226105949_02.jpg
七哥 回答时间:2018-12-5 18:21:56
本帖最后由 toofree 于 2018-12-5 18:26 编辑

用某坛友的话说就是,其实流片时都是大容量的,只是出于某种原因,出厂时将产品信息写成了小容量512K的,但是物理上是没有屏蔽掉后512K的。
如果每个型号都流一次片,一次少出也得几十万,那么多系列和型号,ST是扛不住的。因此都按大容量的流片,测试稳定的话,就烧成大容量信息,正常的卖;如果有些缺陷,但是不影响小容量的功能,那么就当小容量的卖;最后剩下的,连小容量的功能也无法满足,就报废。

就当成是将产品按特等、优等、良品、次品、废品分类。

评分

参与人数 2ST金币 +12 蝴蝶豆 +3 收起 理由
STMCU + 6 + 3
andeyqi + 6 很给力!

查看全部评分

五哥1 回答时间:2018-12-5 22:02:55
这个是正确的,我们经常把STM32F103R8当成STM32F103RB来用,因为这些芯片有冗余。但是出了问题,就自己承担 了

评分

参与人数 1ST金币 +4 蝴蝶豆 +2 收起 理由
STMCU + 4 + 2

查看全部评分

c疯鸟 回答时间:2018-12-6 11:16:03
谢谢,学习了,第一次知道这种情况
查资料 回答时间:2019-2-27 12:52:16
学习了
goodgsq1 回答时间:2019-2-28 09:14:07
涨姿势!!
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版