历史上的今天
今天是: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();
}
上一篇:KEIL常见问题及解决办法
史海拾趣
|
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驱动 包括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\' 如何解决这个错误呀,… 查看全部问答> |
|
用单片机PWM输出来交替驱动两个LED,因为不想用DA。其中一个led要求点亮的电压为2.4V,另一个为1.5V,怎样获得这两个稳定的电压呢?只用三极管行不行?刚入门,不知道怎么做,请大家指导一下,谢谢… 查看全部问答> |
|
我想在textbox获得焦点时,自动打开输入法 我在textbox的getfocus事件中时这样写的: inputMethod.setIME(true); inputPanel1.Enabled = true; inputMethod 是callInputMethod的一个实例 public class callInputMethod ...… 查看全部问答> |
|
在STM32F103C8T6,系统时钟72M,SPI时钟18M void SetupSPI(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; SPI_I2S_DeInit(SPI2);//Reset SPI2 RCC_APB2PeriphClockCmd(RCC_ ...… 查看全部问答> |




