码迷,mamicode.com
首页 > 其他好文 > 详细

stm32 flash

时间:2016-04-29 09:24:16      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

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++);
}
}

stm32 flash

标签:

原文地址:http://www.cnblogs.com/helloqi/p/5445072.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!