时间记录:2024/2/19
一、STM32F103C8T6FLASH介绍
(1)flash大小64K,地址0x08000000-0x08010000
(2)此芯片内存大小属于中容量产品,根据数据手册可知中容量产品一个扇区的大小为1K
(3)我们在这里需要知道的点就是,可以将数据保存在flash中实现掉电保存
二、读写FLASH操作步骤
(1)写数据操作(一种方法)
1.解除写保护,向KEYR寄存器写入KEY1->0x45670123和KEY2->0xCDEF89AB进行解锁,按照顺序写入,否则会锁定FLASH_CR寄存器,直到下一次复位
2.清除状态位(可选),确认未在执行任何FLASH操作
3.清除扇区
4.写入半字16位数据
5.清除状态位(可选)
6.锁定写保护
RDP_Key->0x000000A5
(2)读数据操作(一种方法)
直接读取地址数据即可
三、代码示例(基于标准库实现)
(1)头文件
#ifndef __MYFLASH_H__
#define __MYFLASH_H__
#include
#define SECTORSIZE 1024 //一个扇区大小定义
#define MAXADDR 0x08010000 //最大地址
#define LASTSECTORADDR 0x0800FC00 //最后一个扇区的地址
void vFlashWriteData(u32 addr,u8 *data,int data_len);//写数据,按照半字写入,一个扇区最多写入512个数据
void vFlashReadData(u32 addr,u8 *data,int data_len);//读数据
#endif
(2)源文件
#include "my_flash.h"
void vFlashWriteData(u32 addr,u8 *data,int data_len)
{
if(addr 0x08000000 || addr >= MAXADDR) return; //地址校验
u32 sectorBaseAddr = addr/1024*1024;
FLASH_Unlock();//解锁
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位,可不要
FLASH_ErasePage(sectorBaseAddr);//擦除页数据,页的首地址,最后一页
for(int i=0;idata_len;i++){
FLASH_ProgramHalfWord(addr+2*i,data[i]);
}
FLASH_ClearFlag(FLASH_FLAG_BSY|FLASH_FLAG_EOP|FLASH_FLAG_PGERR|FLASH_FLAG_WRPRTERR|FLASH_FLAG_OPTERR);//清除标志位,可不要
FLASH_Lock();//上锁
}
void vFlashReadData(u32 addr,u8 *data,int data_len)
{
if(addr 0x080000服务器托管网00 || addr >= MAXADDR) return; //地址校验
for(int i=0;idata_len;i++){
data[i]=(u8)(*服务器托管网(vu16*)(addr+i*2));
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
一、上周工作 了解注意力机制,开始论文的初步阅读 二、本周计划 简单了解transform架构,继续研读论文U-MixFormer: UNet-like Transformer with Mix-Attention for Efficient Semantic…