Flash的读写(STM 32)

*************************
#ifndef __FLASH_H
#define __FLASH_H              
#include "sys.h"
void FLASH_W(u32 add,u16 dat); //flash写函数
u16 FLASH_R(u32 add);//flash读函数
#endif
*************************
#include "flash.h"
void FLASH_W(u32 add,u16 dat){ //写入flash数据
 FLASH_Unlock();  //解锁FLASH编程擦除控制器
 FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
 FLASH_ErasePage(add);     //擦除指定地址页     FLASH_ProgramHalfWord(add,dat); //从指定页的addr地址开始写
 FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR);//清除标志位
 FLASH_Lock();    //锁定FLASH编程擦除控制器
}
u16 FLASH_R(u32 add){ //读flash中的数据
u16 a;
a = *(u16*)(add);//指针
return a;
}
*************************
 #include "stm32f10x.h" //STM32????
 #include "sys.h"
 #include "delay.h"
 #include "led.h"
 #include "key.h" 
 #include "flash.h" 
#define FLASH_START_ADDR  0x0801f000      //写入地址
 int main (void){
u16 a;
RCC_Configuration(); 
LED_Init();
KEY_Init();
a = FLASH_R(FLASH_START_ADDR);//从指定页的地址读取flash
GPIO_Write(LEDPORT,a); 

while(1){
    if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ //
        delay_ms(20); //延时 消抖
        if(!GPIO_ReadInputDataBit(KEYPORT,KEY1)){ 
            a++; 
            if(a>3){ 
                a=0; 
            }
            GPIO_Write(LEDPORT,a); 
            FLASH_W(FLASH_START_ADDR,a); //往指定flash地址写入数据
            while(!GPIO_ReadInputDataBit(KEYPORT,KEY1)); //等待按键松开
        }
    }
   }
   }

你可能感兴趣的:(Flash的读写(STM 32))