收藏官网首页
查看: 18951|回复: 5

STM32 内部FLASH编程

65

主题

123

帖子

787

积分

高级会员

Rank: 4

积分
787
跳转到指定楼层
楼主
发表于 2015-11-27 15:08:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
编译环境:我用的是(Keil)MDK4.7.2   
STM32库版本:我用的是3.5.0
一、本文不对FLASH的基础知识做详细的介绍,不懂得地方请查阅有关资料。
  对STM32 内部FLASH进行编程操作,需要遵循以下流程:
  FLASH解锁
  清除相关标志位
  擦除FLASH(先擦除后写入的原因是为了工业上制作方便,即物理实现方便)
  写入FLASH
  锁定FLASH
实例:
#define FLASH_PAGE_SIZE    ((uint16_t)0x400) //如果一页为1K大小
#define WRITE_START_ADDR   ((uint32_t)0x08008000)//写入的起始地址
#define WRITE_END_ADDR      ((uint32_t)0x0800C000)//结束地址
uint32_t EraseCounter = 0x00, Address = 0x00;//擦除计数,写入地址
uint32_t Data = 0x3210ABCD;//要写入的数据
uint32_t NbrOfPage = 0x00;//记录要擦除的页数
volatile FLASH_Status FLASHStatus = FLASH_COMPLETE;/*FLASH擦除完成标志*/
void main()
{
  /*解锁FLASH*/
 FLASH_Unlock();
  /*计算需要擦除FLASH页的个数 */
 NbrOfPage = (WRITE_END_ADDR - WRITE_START_ADDR) / FLASH_PAGE_SIZE;
  /* 清除所有挂起标志位 */
  FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);        
  /* 擦除FLASH 页*/
 for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)
    {
      FLASHStatus = FLASH_ErasePage(WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));
    }
  /* 写入FLASH  */
 Address = WRITE_START_ADDR;
 while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))
    {
      FLASHStatus = FLASH_ProgramWord(Address, Data);
      Address = Address + 4;
    }
/* 锁定FLASH  */
 FLASH_Lock();
}

33

主题

67

帖子

361

积分

中级会员

Rank: 3Rank: 3

积分
361
沙发
发表于 2015-11-30 16:16:59 | 只看该作者
很实用的东西,谢谢楼主

36

主题

69

帖子

265

积分

中级会员

Rank: 3Rank: 3

积分
265
板凳
发表于 2015-12-10 21:29:39 | 只看该作者
好厉害,好想学习下

20

主题

112

帖子

1626

积分

金牌会员

Rank: 6Rank: 6

积分
1626
5#
发表于 2016-9-23 09:16:52 | 只看该作者
免费使用STM32、APP自动代码生成工具
请教如果要用FLASH存储一个结构体数据  需要如何处理

65

主题

123

帖子

787

积分

高级会员

Rank: 4

积分
787
6#
 楼主| 发表于 2016-9-30 10:19:52 | 只看该作者
jipin 发表于 2016-9-23 09:16
请教如果要用FLASH存储一个结构体数据  需要如何处理

我们可以先写flash写的基础函数,比如:
int8_t flash_write(uint8_t * buf_to_save , uint16_t len , uint32_t w_flash_addr);
参数1:待写入数据地址
参数2:待写入数据长度
参数3:Flash地址
其实,上层调用写接口的时候,不需要关心写入内容的数据结构
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表