STM8单片机教程–11 内部EEPROM数据存储
注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。
注意:本文案需要配合无际单片机编程-STM8单片机教程视频学习。
单片机内部EEPROM存储
一 本节课的目标
- 学习了解STM8单片机FLASH 和内部EEPROM相关知识
- 通过实验 验证 单片机内部EEPROM 数据的读写
二 硬件介绍:
基于lora无线门磁 主板(省略)。
三 STM8单片机EEPROM的介绍(理解)
对应的课程视频里面讲解:
1.需要用的资料:
我们编程数据手册。
四 官方提供测试例程
(省略)
五 驱动代码实现(掌握)
1 复制标准工程并命名为 “测试例程-SPI通讯“ 如下图所示:
打开工程,修改测试例程中的编辑main.c 函数:
2 main.c 源代码
#include “stm8l10x.h”
#define BLOCK_OPERATION 127
uint8_t GBuffer[FLASH_BLOCK_SIZE];
uint8_t ReadBuffer[FLASH_BLOCK_SIZE];
void hal_flash_SaveDat(unsigned char *buf) //64字节
{
/* Define flash programming Time*/
FLASH_SetProgrammingTime(FLASH_ProgramTime_Standard);
FLASH_Unlock(FLASH_MemType_Program);
/* Wait until Flash Program area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_PUL) == RESET)
{}
/* Unlock flash data eeprom memory */
FLASH_Unlock(FLASH_MemType_Data);
/* Wait until Data EEPROM area unlocked flag is set*/
while (FLASH_GetFlagStatus(FLASH_FLAG_DUL) == RESET)
{}
/* This function is executed from RAM */
FLASH_ProgramBlock(BLOCK_OPERATION, FLASH_ProgramMode_Standard, buf);
}
void hal_flash_ReadDat(unsigned char *buf,unsigned char len)
{
unsigned char i;
uint32_t startadd;
startadd = FLASH_START_PHYSICAL_ADDRESS + ((uint16_t)BLOCK_OPERATION * (uint16_t)FLASH_BLOCK_SIZE);
for(i=0;i<len;i++)< span=””></len;i++)<>
{
buf[i] = FLASH_ReadByte(startadd++);
}
}
void main(void)
{
uint8_t i = 0;
CLK_MasterPrescalerConfig(CLK_MasterPrescaler_HSIDiv1);
/* Fill the buffer in RAM */
for (i = 0; i < FLASH_BLOCK_SIZE; i++)
{
GBuffer[i] = i;//newval;
}
hal_flash_SaveDat(GBuffer);
hal_flash_ReadDat(ReadBuffer,FLASH_BLOCK_SIZE);
FLASH_EraseBlock(BLOCK_OPERATION);
hal_flash_ReadDat(ReadBuffer,FLASH_BLOCK_SIZE);
while (1);
}
六 实验需要的器材和硬件连接方式
和上节课一样,这里不在描述:
七 功能测试
我们通过仿真的方式测试验证一下 FLASH 中数据存储,测试如下:
功能测试正常。
本小节结束