stm32内部flash读写
2018-01-18 11:04
453 查看
在stm32中内部flash一般都比较大,光程序很难存满,那么后面的剩余地址就可以用来存储数据(少量数据)。
读写地址不能在程序存储之前,计算好程序大小计算存放地址。
flash.h
#ifndef _FLASH_H
#define _FLASH_H
#include"sys.h"
#define ADDR 0x8010000
//在指定地址写入数组
void FLASH_WriteByte(u32 addr , u8 *p , u16 Byte_Num);
//在指定地址读出数组
void FLASH_ReadByte(u32 addr , u8 *p , u16 Byte_Num);
#endif
flash.c#include "flash.h"
//在指定地址写入数组
void FLASH_WriteByte(u32 addr , u8 *p , u16 Byte_Num)
{
u16 HalfWord; //待写入的半字
Byte_Num = Byte_Num/2; //半字个数
FLASH_Unlock(); //解锁
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); //清除标志
FLASH_ErasePage(addr); //擦除一页 默认是1K
while(Byte_Num --)
{
HalfWord=*(p++);
HalfWord|=*(p++)<<8;
FLASH_ProgramHalfWord(addr, HalfWord); //写入半字
addr += 2;
}
FLASH_Lock(); //上锁
}
//在指定地址读出数组
void FLASH_ReadByte(u32 addr , u8 *p , u16 Byte_Num)
{
while(Byte_Num--)
{
*(p++)=*((uint8_t*)addr++);
}
}
main.cu8 buf_f[5]={0x05,0x02,0x03,0x04,0x05};
u8 buf_ff[5]={0x00,0x00,0x00,0x00,0x00};
int main(void)
{
delay_init(); //延时函数初始化
serial1_init(115200); //串口初始化
Adc_Init(); //adc初始化
IWDG_Init();
FLASH_ReadByte(ADDR,buf_ff,5);
printf("写入之前:%x\r\n",buf_ff[0]);
FLASH_WriteByte(ADDR,buf_f,2);
FLASH_ReadByte(ADDR,buf_ff,2);
printf("写入之后:%x\r\n",buf_ff[0]);
读写地址不能在程序存储之前,计算好程序大小计算存放地址。
flash.h
#ifndef _FLASH_H
#define _FLASH_H
#include"sys.h"
#define ADDR 0x8010000
//在指定地址写入数组
void FLASH_WriteByte(u32 addr , u8 *p , u16 Byte_Num);
//在指定地址读出数组
void FLASH_ReadByte(u32 addr , u8 *p , u16 Byte_Num);
#endif
flash.c#include "flash.h"
//在指定地址写入数组
void FLASH_WriteByte(u32 addr , u8 *p , u16 Byte_Num)
{
u16 HalfWord; //待写入的半字
Byte_Num = Byte_Num/2; //半字个数
FLASH_Unlock(); //解锁
FLASH_ClearFlag(FLASH_FLAG_BSY | FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR); //清除标志
FLASH_ErasePage(addr); //擦除一页 默认是1K
while(Byte_Num --)
{
HalfWord=*(p++);
HalfWord|=*(p++)<<8;
FLASH_ProgramHalfWord(addr, HalfWord); //写入半字
addr += 2;
}
FLASH_Lock(); //上锁
}
//在指定地址读出数组
void FLASH_ReadByte(u32 addr , u8 *p , u16 Byte_Num)
{
while(Byte_Num--)
{
*(p++)=*((uint8_t*)addr++);
}
}
main.cu8 buf_f[5]={0x05,0x02,0x03,0x04,0x05};
u8 buf_ff[5]={0x00,0x00,0x00,0x00,0x00};
int main(void)
{
delay_init(); //延时函数初始化
serial1_init(115200); //串口初始化
Adc_Init(); //adc初始化
IWDG_Init();
FLASH_ReadByte(ADDR,buf_ff,5);
printf("写入之前:%x\r\n",buf_ff[0]);
FLASH_WriteByte(ADDR,buf_f,2);
FLASH_ReadByte(ADDR,buf_ff,2);
printf("写入之后:%x\r\n",buf_ff[0]);
相关文章推荐
- STM32学习笔记:读写内部Flash。
- STM32 对内部FLASH读写接口函数
- stm32 读写内部Flash
- STM32 对内部FLASH读写接口函数(转)
- STM32 内部flash的读写程序
- STM32 对内部FLASH读写接口函数
- 第50章 读写内部FLASH—零死角玩转STM32-F429系列
- 读写STM32内部flash读写代码
- 第50章 读写内部FLASH—零死角玩转STM32-F429系列
- STM32 对内部FLASH读写接口函数
- 读写STM32内部flash读写代码
- STM32 对内部FLASH读写接口函数
- 读写STM32内部flash读写代码
- STM32 对内部FLASH读写接口函数
- STM32内部FLASH读写-通用
- STM32读写内部Flash
- STM32内部flash读写
- 读写STM32内部flash读写代码
- stm32 Flash读写[库函数]
- STM32 USB 使用芯片内部flash模拟U盘