美文网首页
Flash的读写(STM 32)

Flash的读写(STM 32)

作者: tomato_20fc | 来源:发表于2019-02-22 20:21 被阅读0次
    <flash.h>*************************
    #ifndef __FLASH_H
    #define __FLASH_H              
    #include "sys.h"
    void FLASH_W(u32 add,u16 dat); //flash写函数
    u16 FLASH_R(u32 add);//flash读函数
    #endif
    <flash.c>*************************
    #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;
    }
    <main.c>*************************
     #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)

          本文链接:https://www.haomeiwen.com/subject/tjfyyqtx.html