STM8的FLASH存储u16类型的数组
往FLASH写数据
void FLASH_WriteNByte(uint16_t* pBuffer, uint32_t WriteAddr, uint8_t nByte)
{
u8 j=0;
u8 i=0;
FLASH_Unlock(FLASH_MEMTYPE_DATA);
while(FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
while(nByte--)
{
FLASH_ProgramByte(WriteAddr, (pBuffer[j++]&0xFF00)>>8);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
WriteAddr++;
FLASH_ProgramByte(WriteAddr, pBuffer[i++]&0x00FF);
FLASH_WaitForLastOperation(FLASH_MEMTYPE_DATA);
WriteAddr++;
}
FLASH_Lock(FLASH_MEMTYPE_DATA); //上锁
}
读取FLASH里面的数据
void FLASH_ReadNByte(uint16_t* pBuffer, uint32_t ReadAddr, uint8_t nByte)
{
u8 j=0;
u16 tBuffer[6];
while(nByte--)
{
tBuffer[j++]= FLASH_ReadByte(ReadAddr);
ReadAddr++;
}
pBuffer[0] = tBuffer[0]*256 +tBuffer[1];
pBuffer[1] = tBuffer[2]*256 +tBuffer[3];
pBuffer[2] = tBuffer[4]*256 +tBuffer[5];
}
注意读取的数据位数是写入数据位数的两倍
主函数测试代码
#include "stm8s.h"
#include "stm8s_clk.h"
u16 WriteBuf[3];
u16 ReadBuf[3];
void FLASH_WriteNByte(uint16_t* pBuffer, uint32_t WriteAddr, uint8_t nByte);
void FLASH_ReadNByte(uint16_t* pBuffer, uint32_t ReadAddr, uint8_t nByte);
void main(void)
{
/* 定义FLASH操作时间*/
FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD);
WriteBuf[0] = 4060;
WriteBuf[1] = 2890;
WriteBuf[2] = 0;
while (1)
{
FLASH_WriteNByte(WriteBuf, 0x40A0, 3);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
FLASH_ReadNByte(ReadBuf, 0x40A0, 6);
}
}
测试的时候用仿真中间打断点然后看数组数据
断电 然后屏蔽掉写函数,再看能不能读到数据