stm32 flash

STM32 Flash具体说明不在这里累赘,想知道的自己百度吧,我拿stm32f103c8t6来举例吧,stm32f103c8t6是中等容量的芯片,flash大小为64K,每页大小为1K,通常我们代码不是很大的话可以直接将我们要保存的东西放到后面几K就可以,MDK软件编译完成是可以看到程序所占内存的。当然这里需要选择全编译。

例如:Program Size: Code=10332 RO-data=336 RW-data=152 ZI-data=3248  

上面的大小则可以计算出flash的大小。flash=10332/1024+336/1024=10.4K左右。

地址擦除为一页的,一般定义整个页的地址,stm32 flash起始地址为0x08000000

 

#define Page60_addr (0x08000000+60*1024)

#define Page62_addr (0x08000000+62*1024)

#ifndef __DATAFLASH_H
#define __DATAFLASH_H

#include "stm32f10x.h"
#include "stm32f10x_flash.h"

void FLASH_WriteByte(uint32_t addr , uint8_t *p , uint16_t Byte_Num);
void FLASH_ReadByte(uint32_t addr , uint8_t *p , uint16_t Byte_Num) ;


#endif

 

#include "dataflash.h"

/*
功能:向指定地址写入数据
参数说明:addr 写入的FLASH页的首地址
p 被写入变量的地址(数组中的必须是uint8_t类型,元素个数必须是偶数)
Byte_Num 被写入变量的字节数(必须是偶数)
*/
void FLASH_WriteByte(uint32_t addr , uint8_t *p , uint16_t Byte_Num)
{
uint32_t 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);
while(Byte_Num --)
{
HalfWord=*(p++);
HalfWord|=*(p++)<<8;
FLASH_ProgramHalfWord(addr, HalfWord);
addr += 2;
}
FLASH_Lock();
}


/*
功能:从指定地址读取数据
参数说明:addr 从FLASH中读取的地址
p 读取后要存入变量的地址(数组中的必须是uint8_t类型)
Byte_Num 要读出的字节数
*/
void FLASH_ReadByte(uint32_t addr , uint8_t *p , uint16_t Byte_Num)
{
while(Byte_Num--)
{
*(p++)=*((uint8_t*)addr++);
}
}

转载于:https://www.cnblogs.com/helloqi/p/5445072.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值