历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2018年09月10日 | STM32--读写内部Flash

2018-09-10 来源:eefocus

Flash模块组织

存储器被组织为程序存储器模块,数据EEPROM模块和信息块。

程序存储器块分为4 KB的扇区,每个扇区都是进一步分成16页,每页256字节。

 

程序存储器页面擦除

该操作用于擦除程序存储器中的页面(64个字)。要做到这一点:

●解锁FLASH_PECR寄存器

   1.将PEKEY1 = 0x89ABCDEF写入编程/擦除密钥寄存器(FLASH_PEKEYR)

   2.将PEKEY2 = 0x02030405写入编程/擦除密钥寄存器(FLASH_PEKEYR)

●解锁程序存储器

●解锁FLASH_PECR寄存器

          1. 将PRGKEY1 = 0x8C9DAEBF写入程序存储器密钥寄存器

(FLASH_PRGKEYR)

           2.将PRGKEY2 = 0x13141516写入程序存储器密钥寄存器

(FLASH_PRGKEYR)

●将FLASH_PECR寄存器中的ERASE位置1

●设置FLASH_PECR寄存器中的PROG位选择程序页面

●等待BSY位清零

●将0x0000 0000写入程序页的第一个字以擦除

注意:该功能可以从两个存储体,RAM或外部存储器执行。

程序存储器快速字写入

这个操作用来写一个字到程序存储器,假设它是

先前被删除。要做到这一点:

●解锁FLASH_PECR寄存器

●解锁程序存储器

●将一个字写入程序存储器中的有效地址。

 

代码:(注释删了,上传后全是乱码大笑,实测可行)

 

flash.c:


#include "flash.h"

#include "main.h"

#define u32 uint32_t

#define u16 uint16_t

#define u8 uint8_t

 

#define PEKEY1        0x89ABCDEF               

#define PEKEY2        0x02030405     

#define PRGKEY1       0x8C9DAEBF

#define PRGKEY2        0x13141516

extern char teemp[];   

 

void writeFlashTest(u32 dataxaddr,u8 write_data[],u32 size)

{

   u32 i;

   u32 temp;

   u16 t=0;

   u32 fwaddr=dataxaddr;

   u8 *dfu=write_data;

   HAL_FLASH_Unlock();

    FLASH_EraseInitTypeDef f;

    f.TypeErase = FLASH_TYPEERASE_PAGES;

    f.PageAddress = dataxaddr;

    f.NbPages = 1;

    uint32_t PageError = 0;

    HAL_FLASHEx_Erase(&f, &PageError);

    HAL_FLASH_Lock();

  HAL_FLASH_Unlock();

for(t=0;t

{

temp=(u16)dfu[3]<<24;

temp+=(u16)dfu[2]<<16;

temp+=(u16)dfu[1]<<8;

temp+=(u16)dfu[0];

dfu+=4;

HAL_FLASH_Program(FLASH_TYPEERASEDATA_WORD, fwaddr, temp);

fwaddr+=4;

}

HAL_FLASH_Lock();

}

 

u8 Flash_read_data(u32 dataxaddr)

{

uint8_t temp = *(__IO uint8_t*)(dataxaddr);

return temp;

}

flash.h:


#include "main.h"

#include "stm32l1xx_hal_flash_ramfunc.h"

#define u32 uint32_t

#define u16 uint16_t

#define u8 uint8_t

 

void Flash_erase_pages(u32 erase_address);

void writeFlashTest(u32 dataxaddr,u8 write_data[],u32 size);

u8 Flash_read_data(u32 dataxaddr);

unsigned char Flash_write_data(u32 dataxaddr,u32 write_data);

 


推荐阅读

史海拾趣

Anatech Electronics Inc公司的发展小趣事

Anatech Electronics Inc是一家专注于射频(RF)和微波滤波器的设计、制造和销售的公司。以下是关于该公司发展的相关故事:

  1. 公司成立与初期阶段:Anatech Electronics Inc成立于1990年,总部位于美国新泽西州Garfield市。公司成立之初,专注于为通信、航空航天、国防等领域提供射频和微波滤波器解决方案。公司的创始人兼首席执行官Jiangsu Wang博士在微波滤波器领域拥有丰富的经验和专业知识。

  2. 技术创新与产品开发:Anatech Electronics Inc在其成立初期即开始致力于技术创新和产品开发。公司拥有一支技术精湛的研发团队,不断推出高性能、高可靠性的射频和微波滤波器产品。这些产品涵盖了各种类型的滤波器,包括带通滤波器、带阻滤波器、高通滤波器和低通滤波器等,广泛应用于无线通信、雷达系统、卫星通信等领域。

  3. 市场拓展与全球业务:随着公司业务的不断发展壮大,Anatech Electronics Inc开始加大对全球市场的拓展力度。公司与国际知名的电信运营商、设备制造商和系统集成商建立了稳固的合作关系,产品销售遍布北美、欧洲、亚洲等地区。公司在全球设立了销售办事处和代理商网络,为客户提供定制化的滤波器解决方案和技术支持服务。

  4. 质量管理与认证:Anatech Electronics Inc致力于确保产品质量和性能的稳定和可靠。公司采用先进的生产工艺和严格的质量管理体系,保证产品符合国际标准和客户要求。公司取得了ISO 9001质量管理体系认证,并不断进行产品认证和性能测试,确保产品在市场上的竞争优势和声誉。

  5. 持续发展与未来展望:作为一家在射频和微波滤波器领域具有影响力的公司,Anatech Electronics Inc将继续致力于技术创新和市场拓展。公司将继续加大研发投入,推出更多性能优越、功能丰富的滤波器产品,满足客户不断增长的需求。在未来,Anatech Electronics Inc将继续秉承“质量第一、客户至上”的经营理念,与客户共同发展,实现双赢。

启攀微(CHIPHOM)公司的发展小趣事

随着LED背光驱动芯片的成功推出,启攀微电子(CHIPHOM)逐渐在市场上崭露头角。然而,公司并没有满足于现状,而是继续加大研发投入,拓展产品线。在一次国际电子展上,公司展示了音频功率放大芯片和电阻式触摸屏控制芯片,引起了众多客户的关注。通过不懈的市场推广和技术支持,启攀微电子(CHIPHOM)成功打开了国内外市场的大门,实现了销售收入的快速增长。

General Instrument Corp公司的发展小趣事
设计时考虑了低功耗特性,适合便携式设备和电池供电应用。
格科微电子(GALAXYCORE)公司的发展小趣事
验证输入信号是否在变换器的允许范围内,避免超出其最大或最小输入电压。
ABECO公司的发展小趣事

随着全球化进程的加速推进,ABECO开始实施全球化战略。公司积极开拓国际市场,参加各类国际展会和论坛,与全球客户建立联系。同时,公司还加强与国际同行的交流与合作,引进先进的技术和管理经验。通过不断的努力,ABECO逐渐在全球电子行业中树立起了自己的品牌形象,成为了一家具有影响力的跨国公司。


请注意,上述故事是基于已知信息进行的虚构创作,并不代表ABECO公司的真实发展历程。如果您需要更详细和准确的信息,建议直接联系ABECO公司或查阅相关文献资料。

Endicott Research Group Inc (ERG)公司的发展小趣事

随着医疗、工业和军事市场对电源设备的需求不断增长,ERG凭借其深厚的技术积累和创新能力,逐渐在这些领域获得了广泛的认可。他们的产品以其高性能和稳定性赢得了众多客户的信赖。特别是在医疗设备领域,ERG的电源产品为诊断和治疗设备提供了可靠的动力支持,为医疗行业的发展做出了重要贡献。

问答坊 | AI 解惑

请大家推荐符合要求的单片机

要求如下: 有两个串口 有大的flash (类似于P89C669有96k的flash)。…

查看全部问答>

Wince 应用程序不能截获VK_MENU按键

C/C++ code //Send.exe     keybd_event(VK_MENU, 0x0, KEYEVENTF_SILENT, 0);     keybd_event(VK_MENU, 0x0, KEYEVENTF_SILENT | KEYEVENTF_KEYUP, 0); //Rev.exe BOOL CRev::PreTranslateMessage(MSG* pMsg) {   &n ...…

查看全部问答>

SHNotificationAdd在WINCE 5.0 .net下不弹出气泡通知

如下代码在windows mobile手机上是可以弹出气泡的,但是在wince 5.0开发板上弹不出来.根据MSDN似乎应该是可以的。 SHNP_INFORM Notification bubble displays for the set duration, then disappears. Note For Windows Mobile, this enum ...…

查看全部问答>

懂VB的近来帮下忙

本人用VS2005 编译了一个串口通讯的小软件  用VB写的  为什么当串口一收到数据的时候就弹出以下错误 错误 Temper11.exe NotSupportedException Control.Invoke 必须用于与在独立线程上创建的控件交互。 位于 Microsoft.A ...…

查看全部问答>

SM501不能工作!

CPU:S3C2440 调试环境:H-JTAG+ADS1.2 问题:读出501ID号不对 详述:501作为2440的图像显示模块,与2440连接方式为非 UMA方式,MMIO_BASE=0x2000_0000+0x03E0_0000,501上电 后MMIO_BASE+0x000060寄存器中初始化为0x0501xxa0,但 目前读出的数据 ...…

查看全部问答>

半导体公司招聘(北京) S/W Engineer

1. S/W Engineer (Codec) 1) 4+ years working experience of video, audio codec development 2) Candidates should have strong knowledge and hands-on experience on MPEG-2/4, H.264, AAC/AAC+ algorithm 3) C/C++ and Verilog HDL program ...…

查看全部问答>

ISE初学问题求助?

ERROR: The Top module has not been specified. This can happen if no sources have been added to the project, 是什么意思?…

查看全部问答>

有人用过MSP4250吗?

这芯片怎么回事,我使用了SD16A的第一、二、三通道(AIN0、AIN1、AIN2),每五通道(AIN4)与TIMERA的PWM(TA1、TA2)是同一个引脚。我使用了PWM输出。在使用中发现,只要我打开SD16A的第三通道,TA1引脚输出就一直为低电平,不受PWM控制,当我关掉 ...…

查看全部问答>

这是真正的LaunchPad 材料。

有安装软件、有例子、有GRCC使用等等!…

查看全部问答>

求教VxWorks 的DOSFS 在SD卡上的构建

我在SD卡上构建dosfs文件系统是总是出错: 代码如下 #include \"copyright_wrs.h\"#include \"vxWorks.h\"#include \"taskLib.h\"#include \"blkIo.h\"#include \"stdlib.h\"#include \"stdio.h\"#include \"string.h\"#include \"dosFsLib.h\"#i ...…

查看全部问答>