【AT-START-F403A测评】四、“EEPROM”测试
[复制链接]
怎么十一过迷糊了????翻遍AT32F403的手册根本就找不到EEPROM的字样!!!
EEPROM只有在51单片机上,特别是STC上有,且十分方便,其实质也是在FLASH里边虚拟一个EEPROM。那么这种技术用在STM32,也可以用在AT32F430上。
实际工作中可以省一片宝贵的EEPROM AT89C256。当然不适用于总是改写的程序,改写频的用这个也行,就是麻烦点。
下边分析一下例程:
每一种单片机对FLASH操作都是特别小心的。本例程对522扇区进行了跨两个扇区的操作,从1写到0x7FF。
写要费很多事,包括解锁完后写写完加锁。
读就用一个指针指到地址完后赋给变量就完事了。
以下是程序运行的结果:
为了实用我改了一下代码,只写前两个16位。程序如下:
int main(void)
{
Delay_init();
UART_Print_Init(115200);
AT32_LEDn_Init(LED2);
AT32_LEDn_Init(LED3);
//Fill BufferWrite data to test
// for(Index=0;Index<TEST_BUFEER_SIZE;Index++)
// {
// BufferWrite[Index]=Index;
// }
#if 1
BufferWrite[0] = 0x5555;
BufferWrite[1] = 0x6666;
FLASH_Write(TEST_FLASH_ADDRESS_START,BufferWrite,2); //Write data to flash
FLASH_Read(TEST_FLASH_ADDRESS_START,BufferRead,2); //read data from flash
if(Buffercmp(BufferWrite,BufferRead,2)==PASSED) //Compare the buffer
{
AT32_LEDn_ON(LED2);
AT32_LEDn_OFF(LED3);
printf("%s","PASS");
}
else
{
AT32_LEDn_OFF(LED2);
AT32_LEDn_ON(LED3);
printf("%s","NO PASS");
}
#else
FLASH_Read(TEST_FLASH_ADDRESS_START,BufferRead,2); //read data from flash
#endif
while(1)
{
}
}
就是说写完后我再直接读一下看看是不是我写的0x5555,0x6666
可以看到不用指示灯用仿真可以看到写入的数据。
|