stm32教程系列之flash

stm32教程系列之flash

ID:5638050

大小:67.50 KB

页数:7页

时间:2017-12-20

stm32教程系列之flash_第1页
stm32教程系列之flash_第2页
stm32教程系列之flash_第3页
stm32教程系列之flash_第4页
stm32教程系列之flash_第5页
资源描述:

《stm32教程系列之flash》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、实现的功能1.实现对STM32Fxxx的片内FLASH的擦除和烧写,并读出后进行检验。2.用串口打印出检验FLASH内容是否正确的变量值。二、实验操作及现象1.双击FLASH.eww打开工程文件,然后进行编译。2.用Flash Loader将程序下载到ARM内,或者利用JLINK等仿真器进行仿真。3.在程序运行前,用串口线将开发板的串口1和PC机的串口1连接,并打开“串口调试助手”,设置波特率为115200,将会看到每0.5秒显示一次“Flash Status=1”,则说明FLASH操作成功,否则说明FLASH操作失败。三、片内FLASH学习大家可能

2、会疑惑,既然我们可以利用工具将代码下载芯片内部,为什么还要讲解Flash编程呢?目的是让大家掌握后可以编写自己的BootLoader,例如用CAN总线接口来更新产品中的升级代码,不需要将产品拆卸即可完成。另外一个很重要的问题就是我们要保护好自己编写的代码,否则被破_解后,就成别人的产品了。1.解除Flash锁   复位后,闪存擦写控制器模块是被保护的,不能写入FLASH_CR寄存器,通过写入两个关键字(KEY1,KEY2)到FLASH_KEYR寄存器打开闪存擦写控制器,才可以进行其他闪存操作。其中KEY1为0x45670123,KEY2为0xCDEF89

3、AB。编程如下:FLASH->KEYR = FLASH_KEY1;  FLASH->KEYR = FLASH_KEY2;2.页擦除在FLASH操作中,每次擦除只能擦除一页,不能一个字节一个字节的擦除,其实所谓的擦出就是将指定的页全部填写成0XFF,下面是页擦除的过程:   -检查FLASH_SR寄存器的BSY位,以确认没有其他正在进行的闪存操作;   -用FLASH_AR寄存器选择要擦除的页;   -设置FLASH_CR寄存器的PER位为1;   -设置FLASH_CR寄存器的STRT位为1;   -等待BSY位变为0;   -读出被擦除的页并做验证。编

4、程如下://等待前次操作完毕(检查FLASH_SR寄存器的BSY位)  status = FLASH_WaitForLastOperation(EraseTimeout);    if(status == FLASH_COMPLETE)//如果FLASH处于可以操作状态,开始进行页擦除操作  {         FLASH->CR

5、= CR_PER_Set;//设置FLASH_CR寄存器的PER位为1    FLASH->AR = Page_Address;//用FLASH_AR寄存器选择要擦除的页    FLASH->CR

6、= CR_STRT_Set;

7、//设置FLASH_CR寄存器的STRT位为1        //等待擦除操作完毕(等待BSY位变为0)    status = FLASH_WaitForLastOperation(EraseTimeout);    if(status != FLASH_BUSY)//如果SR的BSY为0    {      //如果擦除操作完成,禁止CR的PER位      FLASH->CR &= CR_PER_Reset;    }  }3. 全部擦除全部擦除就是将全部FLASH都填写成0xFF,其过程如下:   -检查FLASH_SR寄存器的BSY位,以确认没

8、有其他正在进行的闪存操作;   -设置FLASH_CR寄存器的MER位为1;   -设置FLASH_CR寄存器的STRT位为1;   -等待BSY位变为0;   -读出所有页并做验证。编程如下: //等待前次操作完毕(检查FLASH_SR寄存器的BSY位)  status = FLASH_WaitForLastOperation(EraseTimeout);    if(status == FLASH_COMPLETE)//如果FLASH出于可以操作状态,开始进行全部页擦除操作  {     FLASH->CR 

9、= CR_MER_Set;//设置FLA

10、SH_CR寄存器的MER位为1     FLASH->CR 

11、= CR_STRT_Set;//设置FLASH_CR寄存器的STRT位为1        //等待全部页擦除操作完毕(等待BSY位变为0)    status = FLASH_WaitForLastOperation(EraseTimeout);    if(status != FLASH_BUSY)//如果SR的BSY为0    {      //如果擦除操作完成,禁止CR的PER位      FLASH->CR &= CR_MER_Reset;    }  }   4. 编程   编程就是

12、将数据写入指定的FLASH地址,STM32的FLASH每次编程都是16位(在32

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。