新手上路
- 积分
- 30
- 金钱
- 30
- 注册时间
- 2021-5-10
- 在线时间
- 7 小时
|
void STMFLASH_Unlock(void)
{
FLASH->KEYR=0x45670123;
FLASH->KEYR=0xCDEF89AB;
}
void STMFLASH_Lock(void)
{
FLASH->CR|=1<<7;//该函数就是将LOCK位置1
}
u8 STMFLASH_GetStatus(void)
{
u32 res;
res=FLASH->SR;
if(res&(1<<0))
return 1; //忙碌则返回1
else if(res&(1<<2))
return 2; //编程错误返回2
else if(res&(1<<4))
return 3; //写保护错误返回3
return 0; //非忙碌状态且无任何错误时,返回0,或者说可以读写操作的话返回0
}
u8 STMFLASH_WaitDone(u16 time)
{
u8 res;
do
{
res=STMFLASH_GetStatus();//读取FLASH状态是否处于忙碌状态
if(res!=1)break;//非忙碌状态则break
delay_us(1);
time--;
}while(time);
if(time==0)
res=0xff;//TIMEOUT超时了,res等于0xff
return res;//操作完成返回0
}
u8 STMFLASH_WriteHalfWord(u32 faddr, u16 dat)
{
u8 res;
res=STMFLASH_WaitDone(0xFF);
if(res==0)//OK,非忙碌状态下进入
{
FLASH->CR|=1<<0;//设置写操作
// *(vu16*)faddr=dat;//向地址中写入数据
(*(volatile uint32_t *)(uint32_t)(faddr))=dat;//向地址中写入数据
res=STMFLASH_WaitDone(0xFF);//等待操作完成
if(res!=1)//
{
FLASH->CR&=~(1<<0);//清零写操作位
}
}
return res;
}
自己写了一个写FLASH的函数也不行,但是在GD32F103VE的板子上可以写入数据
|
|