在线时间11 小时
UID3416414
注册时间2020-5-15
NXP金币0
TA的每日心情 | 奋斗 2020-5-15 16:14 |
---|
签到天数: 1 天 [LV.1]初来乍到
注册会员
- 积分
- 59
- 最后登录
- 2020-7-17
|
楼主 |
发表于 2020-5-29 14:49:49
|
显示全部楼层
这是我的代码,请大家看下
E_FLASH_STATUS Flash_Write(u16 u16SectorNo, u16 u16Offset, u16 u16Cnt, u8 *pu8Buf)
{
u32 u32Size;
u32 u32Destaddr;
#define PROGRAM_LEN 4
union
{
u32 u32Word;
u8 au8Byte[4];
}U_Dest;
if ((u16Offset % 4) != 0)
{
return E_FLASH_ERASE_ERROR; //参数设定错误,偏移量未对齐(4字节对齐)
}
// 设置写入命令
FTFA->FCCOB0 = Program_Longword;
u32Destaddr = (u32)(u16SectorNo*Sector_Size + u16Offset);//计算地址
U_Dest.u32Word = u32Destaddr;
for (u32Size = 0; u32Size < u16Cnt; u32Size += PROGRAM_LEN, U_Dest.u32Word+=PROGRAM_LEN)
{
// 设置目标地址
FTFA->FCCOB1 = U_Dest.au8Byte[2];
FTFA->FCCOB2 = U_Dest.au8Byte[1];
FTFA->FCCOB3 = U_Dest.au8Byte[0];
// 拷贝数据
FTFA->FCCOB4 = *(pu8Buf+3);
FTFA->FCCOB5 = *(pu8Buf+2);
FTFA->FCCOB6 = *(pu8Buf+1);
FTFA->FCCOB7 = *(pu8Buf+0);
if (!FlashCmdLaunch())
{
HAL_IT_EnableAllInterrupt();
return E_FLASH_WRITE_ERROR; //写入命令错误
}
*(pu8Buf+=PROGRAM_LEN);
}
return E_FLASH_OK; //成功执行
} |
|