每当我们的单片机断电之后就无法进行上次的操作,如何让单片机在单片机在断电之后继续进行单片机断电之前的操作呢?

其实原理很简单,只需要将上次的操作存入单片机的FLASH 里面(起始地址是0x8000000),当上电之后,先将FLASH里面该段数据从新取出来继续操作即可。

首先需要两个函数,分别是读FLASH和写FLASH的函数

1、读FLASH函数

//FLASH读出数据
u16 FLASH_R(u32 add)//参数1:32位读出FLASH地址。返回值:16位数据
{ u16 a;a = *(u16*)(add);//从指定页的addr地址开始读return a;
}

2、写FALSH函数

//FLASH写入数据
void FLASH_W(u32 add,u16 dat)//参数1:32位FLASH地址。参数2:16位数据
{ FLASH_Unlock();  //解锁FLASH编程擦除控制器FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位FLASH_ErasePage(add);     //擦除指定地址页FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位FLASH_Lock();    //锁定FLASH编程擦除控制器
}

拥有着两个函数过后,下面就是mian.c进行操作的程序

#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "flash.h" #define FLASH_START_ADDR  0x0801f000     //写入的起始地址int main (void){//主程序u16 a; //定义变量//初始化程序RCC_Configuration(); //时钟设置LED_Init();//LED初始化KEY_Init();//按键初始化a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读FLASHGPIO_Write(GPIOC,a); //直接数值操作将变量值写入LED(LED在GPIOB组的PB0和PB1上)while(1){if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){ //读按键接口的电平delay_ms(20); //延时20ms去抖动if(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)){ //读按键接口的电平a++; //变量加1if(a>3){ //当变量大于3时清0a=0; }GPIO_Write(GPIOC,a); //直接数值操作将变量值写入LEDFLASH_W(FLASH_START_ADDR,a); //从指定页的地址写入FLASHwhile(!GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)); //等待按键松开 }}}
}

如何利用单片机的FLASH进行上次断电操作相关推荐

  1. 【嵌入式干货】利用二分法定位Flash存有数据(非FF)的地址

    前言 最近项目中需要实现这样的功能:设备具备温湿度数据采集并写入flash保存的功能:当设备复位后,还能重新开启采集功能且将采集到的数据继续接着写入.问题来了,复位后,MCU会将RAM的数据清除,这样 ...

  2. U盘GPIO文件系统映射-STM32利用内置FLASH做U盘

    受到linux对一切设备的控制都当成文件对待的启发 于是便有了这个将GPIO映射到U盘中的想法,这样一来便可以在任何支持U盘的设备中扩展系统的硬件功能了 我的QQ是243786753,这属于原创作品, ...

  3. 单片机编程php,STC单片机内部FLASH读写程序(最新整理)

    <STC单片机内部FLASH读写程序(最新整理)>由会员分享,可在线阅读,更多相关<STC单片机内部FLASH读写程序(最新整理)(6页珍藏版)>请在人人文库网上搜索. 1.S ...

  4. 利用单片机控制74HC595显示图案

    利用单片机控制74HC595显示图案(单片机型号STC89C52) 此文将介绍如何用74HC595自定义显示图案,需要一定的单片机学习基础,话不多说,上代码 #include "reg51. ...

  5. 合泰单片机demo_合泰 单片机 BS83B08A-3 Flash 触控 单片机开发 合泰单片机

    bs83b08-3/b12-3/b16-3/b16g-3/c24-3 -- 8-bit touch key flash mcu 概述 该系列单片机是一款 8 位具有高性能精简指令集且完全集成触控按键功 ...

  6. 利用单片机串口实现甲乙两机的数据传输

    文章目录 题目:利用单片机串口实现甲乙两机的数据传输. 1.虚拟电路图 2.实现的效果 3.相关代码 题目:利用单片机串口实现甲乙两机的数据传输. 要求: ①甲机连续发送0-F,共记16个字符,并显示 ...

  7. 单片机串口中断控制流水灯c语言,利用单片机中断实现流水灯

    在我们的生活中,随处可见各式各样的彩灯,给这本来充满美丽的世界又添加了一份别致的美,想知道流水灯是怎么实现的吗?现在就跟我走进这实现流水灯的大道吧! 其实利用单片机的中断功能就可以实现.本篇文章是当每 ...

  8. 利用单片机实现天气服务器获取指定位置天气数据

    大家好,今天主要和大家聊一聊,如何利用单片机从心知天气服务器上获取到指定位置的天气数据,咱们先来了解一下心知天气吧!​ 目录 第一:天气数据API 第二.通信原理图以及数据解析 第三.天气数据返回结果 ...

  9. STM32单片机内部FLASH使用注意事项

    目录 1.前言 2.STM32 F1.F4.L1系列内部FLASH分区及大小 1.STM32F1系列 2.STM32F4系列 3.STM32L1系列 3.STM32 F1.F4.L1系列内部FLASH ...

最新文章

  1. git 提交命令_Git和Github快速上手指南
  2. Android系统shell中的clear命令实现
  3. 描述Linux的虚拟化实现,Linux中实现虚拟化的四种常用方法
  4. CentOS 7下的MariaDB Master-Slave Replication配置
  5. input python_Python input 使用
  6. spring boot 整合web开发之文件上传、静态资源访问、异常处理、返回JSON数据
  7. tensorflow:Multiple GPUs
  8. 通过qemu调试centos7内核
  9. sql server 2000 更改账户默认数据库
  10. 1051: 平方根的和
  11. linux shell数据重定向(输入重定向与输出重定向)详细分析 下(转)
  12. Elastic 技术栈之 Logstash 基础
  13. 分享100个好看且实用的JavaScript特效
  14. Chrome浏览器打开Axure原型图
  15. java 一年 周数_java获取一年共有多少周
  16. 阿里云服务器添加CDN
  17. MatConvNet的excise 3改为网络配置文件形式
  18. 华大单片机移植TencentOS
  19. html兼容ie低版本,jquery不兼容低版本ie浏览器怎么办?
  20. Python教你用三行代码批量添加水印

热门文章

  1. PCB封装添加3D模型AltiumDesigner09/18
  2. Java 技术栈的变迁是如何深受敏捷影响的?
  3. Redis新数据类型Geospatial
  4. 隐藏文件(密码解锁)
  5. 汉字转拼音函数 linux,汉字转拼音项目pinyin-plus开源
  6. 雷达高度计数据读取与显示
  7. 淘宝API开发系列--商家的绑定2
  8. 64位微处理器_计算机微处理器的发展史
  9. Web3中文|无聊猿Otherside元宇宙启动第二次旅行
  10. CSMA/CD与CSMA/CA