打印
[活动专区]

【AT-START-F425测评】10、flash读写——使用内部flash存储数据

[复制链接]
909|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1、关于AT32F425的 Flash

本次使用的是AT32F425R8T7-7,flash大小为64k。


2、flash范围以及分区

可以看出总共64k flash,分为64个扇区,1个扇区为1k。

3、flash操作
支持整片擦除、扇区擦除;
支持32位、16位、8位数据编程。

4、代码实现
#define  FLASH_PAGE_SIZE  1024
   

void FlashWrite(uint16_t len,uint8_t  *data,uint32_t addr_start)
{       
        uint16_t i=0;
        uint32_t addr=addr_start;
        flash_status_type status = FLASH_OPERATE_DONE;
       
        flash_unlock();
                       
        for(i=0;i<len;i++)
        {
                status=flash_byte_program(addr,*data);
                if(status!=FLASH_OPERATE_DONE)
                {
                        return;
                }
                addr++;
                data++;
        }
       
        flash_lock();
}


void FlashRead(uint16_t len,uint8_t *outdata,uint32_t addr_start)
{       
        uint32_t addr;
        uint16_t i;
       
        addr = addr_start;
       
        for(i=0;i<len;i++)
        {
                *outdata = *(uint8_t*) addr;
                addr = addr + 1;
                outdata++;
        }
}


void FlashErase(uint32_t start, uint32_t end)
{
        uint32_t erase_counter;
        flash_status_type status = FLASH_OPERATE_DONE;

        flash_unlock();

        /* erase the flash pages */
        while(start < end)
        {
                erase_counter = start/FLASH_PAGE_SIZE;
                status=flash_sector_erase(erase_counter * FLASH_PAGE_SIZE );
                if(status!=FLASH_OPERATE_DONE)
                {
                        return;
                }
                start += FLASH_PAGE_SIZE;
        }
        flash_lock();
}
主要分为3个函数,读、写、擦除。

5、读写测试
#define APP_DATA_SATRT_ADDR                                              0x08000000+FLASH_PAGE_SIZE*63 //4k

#define TEST_DATA_LEN    11
uint8_t WriteData[TEST_DATA_LEN]={1,2,3,4,5,6,7,8,9,10,11};
uint8_t  ReadData[TEST_DATA_LEN]={0,0,0,0,0,0,0,0,0, 0,0};

void FlashTest(void)
{
        FlashErase(APP_DATA_SATRT_ADDR, APP_DATA_SATRT_ADDR+FLASH_PAGE_SIZE);
        FlashWrite(TEST_DATA_LEN,WriteData,APP_DATA_SATRT_ADDR);
        FlashRead(TEST_DATA_LEN,ReadData, APP_DATA_SATRT_ADDR);
       
        printf("Write Data[");
        for(uint8_t i=0;i<TEST_DATA_LEN;i++)
        {
                printf(" %d",WriteData[i]);
        }
        printf("]\r\n");

       
        printf("Read Data[");
        for(uint8_t i=0;i<TEST_DATA_LEN;i++)
        {
                printf(" %d",ReadData[i]);
        }
        printf("]\r\n");
}


6、现象




可以看出,往最后一个扇区写入数据,读出来的和写进去的数据一致,通过debug也可以看出来。












使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:stm32/LoRa物联网:304350312

65

主题

785

帖子

11

粉丝