当前位置: 首页 > news >正文

网站站点断开临沂网站建设方案服务

网站站点断开,临沂网站建设方案服务,上城区商城网站建设,网站的规划FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分#xff0c;通过闪存存储器接口#xff08;外设#xff09;可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途#xff1a; 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在…FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分通过闪存存储器接口外设可以对程序存储器和选项字节进行擦除和编程读写FLASH的用途 利用程序存储器的剩余空间来保存掉电不丢失的用户数据 通过在程序中编程IAP实现程序的自我更新 在线编程In-Circuit Programming – ICP用于更新程序存储器的全部内容它通过JTAG、SWD协议或系统加载程序Bootloader下载程序在程序中编程In-Application Programming – IAP可以使用微控制器支持的任一种通信接口下载程序 闪存模块组织 FLASH基本结构 FLASH解锁  FPEC共有三个键值 1RDPRT键 0x000000A52KEY1 0x456701233KEY2 0xCDEF89AB解锁的方式 复位后FPEC被保护不能写入FLASH_CR也就是复位后FLASH默认是锁着的然后在FLASH_KEYR先写入KEY1再写入KEY2解锁。错误的操作序列会在下次复位前锁死FPEC和FLASH_CR。 解锁之后如何加锁呢我们操作完成之后要尽快把FLASH重新加锁以防止意外情况。 加锁 设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR。 接下来看一下如何使用C语言指针访问存储器 程序存储器全擦除 程序存储器擦除 程序存储器编程 擦除之后我们就可以执行写入的流程了STM32的闪存在写入之前会检查指定地址有没有擦除如果没有擦除就写入STM32则不执行写入操作除非写入的全是0这一个数据是个例外。 选项字节 简单介绍一下了解即可。 RDP写入RDPRT键0x000000A5后解除读保护USER配置硬件看门狗和进入停机/待机模式是否产生复位Data0/1用户可自定义使用WRP0/1/2/3配置写保护每一个位对应保护4个存储页中容量 选项字节编程 检查FLASH_SR的BSY位以确认没有其他正在进行的编程操作解锁FLASH_CR的OPTWRE位设置FLASH_CR的OPTPG位为1写入要编程的半字到指定的地址等待BSY位变为0读出写入的地址并验证数据 选项字节擦除 检查FLASH_SR的BSY位以确认没有其他正在进行的闪存操作解锁FLASH_CR的OPTWRE位设置FLASH_CR的OPTER位为1设置FLASH_CR的STRT位为1等待BSY位变为0读出被擦除的选择字节并做验证 器件电子签名 电子签名存放在闪存存储器模块的系统存储区域包含的芯片识别信息在出厂时编写不可更改使用指针读指定地址下的存储器可获取电子签名。 1闪存容量寄存器 基地址0x1FFF F7E0 大小16位 2产品唯一身份标识寄存器 基地址 0x1FFF F7E8 大小96位 FLASH应用 读写内部FLASH 代码整体规划如下 接下来看一下库函数 void FLASH_Unlock(void);//用来解锁 void FLASH_Lock(void);//加锁 FLASH_Status FLASH_ErasePage(uint32_t Page_Address);//页擦除 FLASH_Status FLASH_EraseAllPages(void);//全擦除 FLASH_Status FLASH_EraseOptionBytes(void);//擦除选项字节 FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);//指定地址写入字 FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data);//指定地址写入半字完整代码 MyFLASH.c #include stm32f10x.h // Device header/*读取字(32位) */ uint32_t MyFLASH_ReadWord(uint32_t Address) {return *((__IO uint32_t *)(Address)); }/*读取半字(16位) */ uint16_t MyFLASH_ReadHalfWord(uint32_t Address) {return *((__IO uint16_t *)(Address)); }/*读取字节(8位) */ uint8_t MyFLASH_ReadByte(uint32_t Address) {return *((__IO uint8_t *)(Address)); }/*全擦除 */ void MyFLASH_EraseAllPages(void) {FLASH_Unlock();//第一步对FLASH解锁FLASH_EraseAllPages();//第二步直接调库函数FLASH_Lock();//第三步锁上FLASH }/*页擦除 * 参数 PageAddress要擦除的页地址 */ void MyFLASH_ErasePage(uint32_t PageAddress) {FLASH_Unlock();//第一步对FLASH解锁FLASH_ErasePage(PageAddress);//第二步直接调库函数FLASH_Lock();//第三步锁上FLASH }/*编程,写入一个字 * 参数1 Address要写入的地址 * 参数2 Data32位的数据 */ void MyFLASH_ProgramWord(uint32_t Address, uint32_t Data) {FLASH_Unlock();//第一步对FLASH解锁FLASH_ProgramWord(Address, Data);//第二步直接调库函数FLASH_Lock();//第三步锁上FLASH }/*编程,写入半字 * 参数1 Address要写入的地址 * 参数2 Data16位的数据 */ void MyFLASH_ProgramHalfWord(uint32_t Address, uint16_t Data) {FLASH_Unlock();//第一步对FLASH解锁FLASH_ProgramHalfWord(Address, Data);//第二步直接调库函数FLASH_Lock();//第三步锁上FLASH } Store.c #include stm32f10x.h // Device header #include MyFLASH.h#define STORE_START_ADDRESS 0x0800FC00 #define STORE_COUNT 512uint16_t Store_Data[STORE_COUNT];void Store_Init(void) {/* 初始化闪存最后一页第一个半字是标志位A5A5剩下数据全是0 *///0xA5A5是随便定义的标志位如果第一个半字不是A5A5就说明是第一次使用if(MyFLASH_ReadHalfWord(0x08000000) ! 0xA5A5){MyFLASH_ErasePage(STORE_START_ADDRESS);//擦除最后一页MyFLASH_ProgramHalfWord(STORE_START_ADDRESS, 0xA5A5);//在第一个半字的位置写入规定的标志位for(uint16_t i 1;i STORE_COUNT;i)//把剩余的存储空间全都置为默认值0{MyFLASH_ProgramHalfWord(STORE_START_ADDRESS i*2, 0x0000);}}/* 上电时把闪存数据转存到SRAM数组 */for(uint16_t i 0;i STORE_COUNT;i){Store_Data[i] MyFLASH_ReadHalfWord(STORE_START_ADDRESS i*2);} }/*SRAM数组备份保存到闪存 */ void Stort_Save(void) {/* 第一步擦除最后一页 */MyFLASH_ErasePage(STORE_START_ADDRESS);/* 第二步把数组完全备份保存到闪存最后一页 */for(uint16_t i 0;i STORE_COUNT;i){MyFLASH_ProgramHalfWord(STORE_START_ADDRESS i*2, Store_Data[i]);} }/*数据清零 */ void Store_Clear(void) {for(uint16_t i 1;i STORE_COUNT;i){Store_Data[i] 0x0000;}Stort_Save();//把更改更新到闪存 } main.c #include stm32f10x.h // Device header #include Delay.h #include OLED.h #include Store.h #include Key.huint8_t KeyNum;int main(void) {OLED_Init();Key_Init();Store_Init();//第一次使用的时候初始化闪存把闪存备份的数据加载回SRAM数组OLED_ShowString(1, 1, Flag:);OLED_ShowString(2, 1, Data:);while(1){KeyNum Key_GetNum();if(KeyNum 1){Store_Data[1] ;//第0个位置是标志位不能用Store_Data[2] 2;Store_Data[3] 3;Store_Data[4] 4;Stort_Save();//把SRAM数组备份到闪存}if(KeyNum 2){Store_Clear();}OLED_ShowHexNum(1, 6, Store_Data[0], 4);//显示标志位OLED_ShowHexNum(3, 1, Store_Data[1], 4);OLED_ShowHexNum(3, 6, Store_Data[2], 4);OLED_ShowHexNum(4, 1, Store_Data[3], 4);OLED_ShowHexNum(4, 6, Store_Data[4], 4);} }
http://www.w-s-a.com/news/458365/

相关文章:

  • 微信企业网站 源码下载wordpress 4.9.5 太卡
  • 湖北网站建设公司哪家好房地产最新政策调整
  • 重庆建设岗位培训网站今天重大新闻乌克兰
  • 流水线 东莞网站建设如何在网上销售产品
  • 哪些做图片赚钱的网站网站建设销售业绩任务
  • 建立网站 知乎如何做网站的图片滑动块
  • 国外做珠宝的网站有哪些滨湖区建设局官方网站
  • 关于中国幼教网站开发的经验中国建设银行晋中分行网站
  • 挪威网站后缀如何外贸网络推广
  • 外汇交易网站开发仟亿家设计软件好吗亿家
  • 专门教做甜品的网站郑州高新区建设环保局网站
  • 建站公司怎么获客网站建设全网营销
  • 黄石做网站的公司html免费网站模板
  • 做个商城网站怎么做便宜优酷视频网站源码
  • 网站侧边栏导航代码泰兴市住房和建设局网站
  • html网站登录界面模板确定建设电子商务网站目的
  • wordpress 多站点迁移三台网站seo
  • 工信部网站备案文件好网站建设公司地址
  • 怎么做app和网站购物网站单页面怎么做的
  • 西宁专业做网站教育网站建设策划书
  • 个人网站域名怎么起网站建设业务好跑吗
  • 网页设计的网网页设计的网站企业网站怎样做优化
  • 论文中小企业的网站建设域名网站空间
  • 宿迁网站建设联系电话现在出入邯郸最新规定
  • 男女做羞羞的事情网站30岁转行做网站编辑
  • 做企业网站的轻量级cmswordpress 越来越慢
  • 无锡中英文网站建设莱芜网络公司
  • ps软件下载官方网站相关搜索优化软件
  • 世界杯网站源码下载做网站推广代理
  • 用股票代码做网站的wordpress通过标签调用文章