欢迎来到天天文库
浏览记录
ID:5638050
大小:67.50 KB
页数:7页
时间:2017-12-20
《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
此文档下载收益归作者所有