使用STM8L050读写内部eeprom测试程序。
STM8L050手册上EEPROM内部空间是256B。
一、手册资料
二、程序部分
2.1、eeprom程序
- //eeprom.c
- #include "stm8l15x.h"
- //eeprom初始化
- void eeprom_init(void)
- {
- FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);
- FLASH_Unlock(FLASH_MemType_Data);
- while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET);
- }
- //eeprom写一个字节
- void eeprom_write(uint32_t addr, uint8_t dat)
- {
- FLASH_ProgramByte(addr, dat);
- FLASH_WaitForLastOperation(FLASH_MemType_Data);
- }
- //eeprom读一个字节
- uint8_t eeprom_read(uint32_t addr)
- {
- uint8_t idat = 0;
-
- idat=FLASH_ReadByte(addr);
- FLASH_WaitForLastOperation(FLASH_MemType_Data);
- return idat;
- }
- //eeprom.h
- #ifndef __EEPROM_H
- #define __EEPROM_H
- void eeprom_init(void);
- void eeprom_write(uint32_t addr, uint8_t dat);
- uint8_t eeprom_read(uint32_t addr);
- #endif
复制代码
2.2、主程序
- void main(void)
- {
- uint8_t i=0;
- uint8_t j=0;
- CLK_Config(); //时钟初始化
-
- Delay(0x2fffff); //延时5S
-
- uart_init_halfduplex(); //串口初始化
- eeprom_init(); //EEPROM初始化
- for(i=0;i<255;i++)
- {
- eeprom_write(0x1000+i, i);
- }
- while (1)
- {
- for(i=0;i<255;i++)
- {
- j=eeprom_read(0x1000+i);
- Uart_SendDat(j);
- }
- Delay(0xfffff);
- }
- }
复制代码
三、执行结果
串口输出结果:
|