历史上的今天
返回首页

历史上的今天

今天是:2025年07月26日(星期六)

正在发生

2019年07月26日 | STM32 内部FLASH读写操作

2019-07-26 来源:eefocus

关于STM32内部FLASH读写操作


单片机程序flash对应的内部地址。 falsh内部128bytes为一页,32页一个扇区。为了不会破坏到程序一般我们把要存的数据放后面,或者放到最后一页,来读取保存。STM32程序起始地址一般为0x08000000。

 


2.读取数据


//faddr 要读取的地址


uint16_t STMFLASH_ReadHalfWord ( uint32_t faddr )


{


     return *(__IO uint16_t*)faddr;


}



uint16_t STMFLASH_Read (uint32_t  Addr )


{


     uint16_t Date = 0;


     Date = STMFLASH_ReadHalfWord(Addr);


     return Date;


}


3.写入数据


内部FALSH每次使用的时候都要解锁,使用完之后在上锁。


写入数据之前要擦除以前的数据,不然只会覆盖上一次数据会出现数据错误,上一次存数据为0x22,下次直接存储数据0x01,如果不擦除存成功后读出来就是0x21,所以要清除当前位置的数据。


typedef struct


{


      uint32_t TypeErase;     //以页为单位擦除


      uint32_t PageAddress;   //擦除的地址


      uint32_t NbPages;      //擦除页数


} FLASH_EraseInitTypeDef;


 


 


void STMFLASH_Write (  uint8_t  Buffer ,uint32_t  Addr)


{


    uint32_t SECTORError = 0;


    FLASH_EraseInitTypeDef EraseInitStruct;


 


    HAL_FLASH_Unlock();


    EraseInitStruct.TypeErase     = FLASH_TYPEERASE_PAGES;


    EraseInitStruct.PageAddress   = Addr;


    EraseInitStruct.NbPages       = 1;


    HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError);  //擦除函数,这里擦除一整页


                                                                                 SECTORError 擦除失败会返回失败地址


    HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD,Addr,Buffer);  //写数据


                                                      //FLASH_TYPEPROGRAM_WORD  这里定义存储地址的方式  这里是32位的地址 地址为4的                                                        倍数不然会报错(地址方式为0x0800FF80 0x0800FF84 0x0800FF88)选用时根据自己情况                                                         选  择参数,有的是2的倍数


    HAL_FLASH_Lock();


}



推荐阅读

史海拾趣

Alpha Wire公司的发展小趣事

随着公司规模的不断扩大和市场份额的逐步提升,Blaze公司开始注重品牌建设和形象提升。通过加大广告宣传力度、提升客户服务质量、参与社会公益活动等方式,公司成功塑造了专业、可靠、创新的品牌形象。同时,公司还获得了多项行业荣誉和认证,进一步提升了品牌知名度和美誉度。

AK-Nord_GmbH公司的发展小趣事

随着技术的成熟,AK-Nord_GmbH开始积极拓展市场。公司首先在欧洲地区建立了稳固的销售网络,并逐步向亚洲和北美市场扩张。在市场拓展的过程中,AK-Nord_GmbH积极与各大电子厂商建立合作伙伴关系,共同推出了一系列创新产品。这些合作伙伴关系不仅帮助公司打开了新的市场,还提升了其品牌影响力和市场份额。

Digital公司的发展小趣事

随着业务的不断发展和市场的不断扩大,DIALIGHT公司逐渐实现了全球化布局。他们在美国、英国、丹麦、德国、马来西亚、新加坡、澳大利亚、墨西哥和巴西等地设立了分支机构或办事处,为全球客户提供及时、高效的服务。此外,DIALIGHT还积极寻求与其他企业的合作与共赢,通过战略合作协议的签署,为双方带来新的业务机遇和合作空间。这些举措不仅增强了DIALIGHT的市场竞争力,也为其未来的发展奠定了坚实的基础。

请注意,由于篇幅限制,以上三个故事仅为DIALIGHT公司发展历程的简要概述。如需更详细的信息和更多故事,建议查阅相关资料或访问公司官网。

Crydom公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

Cooper Tools(Eaton)公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

西博臣(CYBERSEN)公司的发展小趣事

作为一家有社会责任感的企业,西博臣积极履行社会责任,关注环境保护和可持续发展。公司采用环保材料和生产工艺,减少生产过程中的能源消耗和废弃物排放。同时,公司还积极参与社会公益活动,为社会做出积极贡献。这些举措不仅体现了公司的社会责任感,也为其赢得了更多客户和合作伙伴的信任和支持。

问答坊 | AI 解惑

关于FPGA编译后结果能否转换为源代码的思考?

1. FPGA 编译后的. POF 和. SOF 文件  能否转换为 VHDL 或VERILOG ?  或者 XILINX 编译后的.JED 文件能否能否转换为 VHDL 或VERILOG ? 我想这个问题 如果能反推, 理论上应该可行的. 比如 单片机的. HEX 文件通过反汇编能够等到源文件, F ...…

查看全部问答>

ispLEVER的时钟约束项hold是否与xilinx的同样处理

ispLEVER的教程中,都没有指出电子表格中的时钟约束 hold应该怎么处理,都是空白.问:1/ispLEVER的时钟约束项hold是否与xilinx的同样处理,或者不需要添加hold约束值,2/既然ispLEVER的时钟约束有hold项,那必然在某各场合有使用它的必要,请教什么时候用h ...…

查看全部问答>

请问探路者:是否有采购贴片LED的经验分享

我现在做的LED驱动 包括3*1W的 5-7W的E27结构;还有日光灯管的贴片LED; 目前我用的都是3.3V的LED做实验;有一点担心批量的时候,客户是否会采购 别的电压的LED情况; 是否真像我之前说的:为了方便采购,客户经常采购不同档次的:例如3V-3.2V, ...…

查看全部问答>

怎么通过OPEN AT用C语言编写GPRS拨号连接到服务器的程序?

怎么通过OPEN AT用C语言编写GPRS拨号连接到服务器的程序?如题 我是个新手,很多问题都不知道,比如GPRS的通信机制。 是不是首先初始化GPRS,然后怎么办 用什么WIP函数呢? 请高人指点 ,谢谢诶…

查看全部问答>

帮忙解决vhdl:quartus7.2 在运行if..genarate遇到的问题

本人在quartus7.2运行如下vhdl代码: library ieee; use ieee.std_logic_1164.all; entity shift is         generic (len:integer);   port(a,clk:in std_logic;          &n ...…

查看全部问答>

error C2061: syntax error : identifier 'IAuthenticate'(数据库)

C:\\Program Files\\Windows CE Tools\\wce500\\xg2410sdk\\include\\ARMV4I\\oledb.h(13773) : error C2061: syntax error : identifier \'IAuthenticate\' 如何解决这个错误呀,…

查看全部问答>

问一个驱动LED的问题

用单片机PWM输出来交替驱动两个LED,因为不想用DA。其中一个led要求点亮的电压为2.4V,另一个为1.5V,怎样获得这两个稳定的电压呢?只用三极管行不行?刚入门,不知道怎么做,请大家指导一下,谢谢…

查看全部问答>

怎么用VS2005开发在winCE5.0上运行的应用程序

怎么用VS2005开发在winCE5.0上运行的应用程序…

查看全部问答>

textbox获得焦点时打开输入法出现的问题

我想在textbox获得焦点时,自动打开输入法 我在textbox的getfocus事件中时这样写的: inputMethod.setIME(true); inputPanel1.Enabled = true; inputMethod 是callInputMethod的一个实例 public class callInputMethod       ...…

查看全部问答>

STM32F103C8T6的SPI2问题,求救

在STM32F103C8T6,系统时钟72M,SPI时钟18M void SetupSPI(void) { GPIO_InitTypeDef  GPIO_InitStructure; SPI_InitTypeDef   SPI_InitStructure; SPI_I2S_DeInit(SPI2);//Reset SPI2 RCC_APB2PeriphClockCmd(RCC_ ...…

查看全部问答>