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

请问STM32写flash怎么总是写不进?

[复制链接]
vvhhbc 提问时间:2015-11-19 09:44 /
本帖最后由 vvhhbc1 于 2015-11-22 21:45 编辑

stm32f030c8 内部flash空间区域为:
0x8000000 ~ 0x8001000

我的页定义为:
#define PAGE_SIZE  (uint16_t)0x400  /* Page size = 1KByte */

#define EEPROM_START_ADDRESS    ((uint32_t)0x0800f400)

/* Pages 0 and 1 base and end addresses */
#define PAGE0_BASE_ADDRESS      ((uint32_t)(EEPROM_START_ADDRESS + 0x000))
#define PAGE0_END_ADDRESS       ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1)))

#define PAGE1_BASE_ADDRESS      ((uint32_t)(EEPROM_START_ADDRESS + PAGE_SIZE))
#define PAGE1_END_ADDRESS       ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1)))


初始化时, 去对页0写VALID_PAGE标志:

HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);

最终是调用下面接口, 在地址0x0800f400处写入VALID_PAGE,

static void FLASH_Program_HalfWord(uint32_t Address, uint16_t Data)
{
  /* Clean the error context */
  pFlash.ErrorCode = HAL_FLASH_ERROR_NONE;

    /* Proceed to program the new data */
    SET_BIT(FLASH->CR, FLASH_CR_PG);

  /* Write data in the address */
  *(__IO uint16_t*)Address = Data;   //////////////////这里, 写无效//////////////////////
}


请问为什么会写入无效呢??? 盼用的朋友能指点迷津, 谢谢!!!!!!!

收藏 评论3 发布时间:2015-11-19 09:44

举报

3个回答
chifen 回答时间:2015-11-19 10:49:47
写内部 flash要先解锁,
Paderboy 回答时间:2015-11-19 10:52:31
要先解锁,然后再擦除你要存储的区域。。。然后写入。再上锁。。。
STMCU-Logo.png
废鱼 回答时间:2015-11-19 14:05:26
参考例程:

Flash_Program.rar

下载

11.18 KB, 下载次数: 127, 下载积分: ST金币 -1

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版