一点心得,与诸位分享。
STM8S的EEPROM可以一次编程4字节,查看库函数FLASH_ProgramWord,我以为没什么古怪,随便什么地址开始都可以,只要连续四个字节即可,结果一试,不是这么一回事,必须是对齐了边界的地址才可以,也就是地址必须是4的整数倍,否则写进去的数据不对,乱写到旁边的单元去了。
void FLASH_ProgramWord(u32 Address, u32 Data)
{
/* Check parameters */
assert_param(IS_FLASH_ADDRESS_OK(Address));
/* Enable Word Write Once */
FLASH->CR2 |= FLASH_CR2_WPRG;
FLASH->NCR2 &= (u8)(~FLASH_NCR2_NWPRG);
#ifdef _COSMIC_
*((@far u8*)Address) = BYTE_0(Data); /* Write one byte */
*(((@far u8*)Address) + 1) = BYTE_1(Data); /* Write one byte */
*(((@far u8*)Address) + 2) = BYTE_2(Data); /* Write one byte */
*(((@far u8*)Address) + 3) = BYTE_3(Data); /* Write one byte */
#else
*((far u8*)Address) = BYTE_0(Data); /* Write one byte */
*(((far u8*)Address) + 1) = BYTE_1(Data); /* Write one byte */
*(((far u8*)Address) + 2) = BYTE_2(Data); /* Write one byte */
*(((far u8*)Address) + 3) = BYTE_3(Data); /* Write one byte */
#endif
} |