历史上的今天
今天是:2024年08月31日(星期六)
2021年08月31日 | 【STM8S】 FLASH与EEPROM读写操作
2021-08-31 来源:eefocus
以下为FLASH操作:
#include "flash.h"
#include "stm8s_flash.h"
void Flash_Write_bytes(uint32_t Address , uint8_t * DataBuff,uint16_t length)
{
uint16_t Count=0;
for( Count=0 ; Count FLASH_ProgramByte_User(Address+Count,DataBuff[Count]); } } void FLASH_ProgramByte_User(uint32_t Address, uint8_t Data) //将库函数中u16改为u32,否则当地址超过10000H时出错 { /* Check parameters */ assert_param(IS_FLASH_ADDRESS_OK(Address)); *(PointerAttr uint8_t*) (uint32_t)Address = Data; } 注:写FLASH前需要解锁 FLASH_Unlock(FLASH_MEMTYPE_PROG); //FLASH解锁 以下为EEPROM操作: #include "EEPROM.h" #include "stm8s_flash.h" /******************************************************************************* * ==EEPROM初始化函数== * FLASH_DeInit(); --> 复位EEPROM的寄存器值 * FLASH_Unlock(FLASH_MEMTYPE_DATA); --> 解锁 对 Data EEPROM memory 进行操作 * FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); --> 标准编程时间 *******************************************************************************/ void EEPROM_INIT(void) { FLASH_DeInit(); FLASH_Unlock(FLASH_MEMTYPE_DATA); FLASH_SetProgrammingTime(FLASH_PROGRAMTIME_STANDARD); } /**************************************************************************************** * Function: Derive_EPWrite * Object: 写EEPROM * 输入: 头地址(0~2048) 数据指针 数据长 * 输出: 无 * 备注: 2K EEPROM 不能超过 ****************************************************************************************/ void Derive_EPWrite(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //写数据 for( ; Len > 0; Len--) { Refresh_WWDG_Window(); //喂狗 *p++ = *pData++; //等待写完成 while(!(FLASH_GetFlagStatus(FLASH_FLAG_EOP))); } //加锁 FLASH_Lock(FLASH_MEMTYPE_DATA); } /**************************************************************************************** * Function: Derive_EPRead * Object: 读EEPROM * 输入: 头地址(0~2048) 数据存放指针 数据长 * 输出: 无 * 备注: 2K EEPROM ****************************************************************************************/ void Derive_EPRead(u16 Adr, u8 *pData, u16 Len) { u8 *p; //p指针指向EEPROM 对应的单元 p = (u8*)0x4000 + Adr; //解锁 FLASH_Unlock(FLASH_MEMTYPE_DATA); //读数据 for( ; Len > 0; Len--) { *pData++ = *p++; Refresh_WWDG_Window(); //喂狗 } //加锁EEPROM FLASH_Lock(FLASH_MEMTYPE_DATA); }
下一篇:【STM8S】 窗口看门狗
史海拾趣
|
本公司专业于工业自动化,承接自动化工程,销售自动化产品,各种最新自动化软件。为了让大家更深入地学习和维护好工业设备,本公司特设本店,为同行提供各种编程软件、解密软件。如有需要的,联系QQ;850935077。超宇工控特价供应:西门子s7-200全系列 ...… 查看全部问答> |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 移动电视接收前端必须具有在远离发射器条件下工作所需的灵敏度,而且在有强信号时还能容忍过载。可被整集成到车载娱乐(ICE)系统,以及手机、便携式数字助理(PDA)、笔记本电脑等多种便携式电子 ...… 查看全部问答> |
|
协议中有一个地方说: 数据 定义 传送格式 1100 1000B 浮点读 43H 38H 1100 1001B 浮点写 43H 39H 我怎么也没看明白, 1 ...… 查看全部问答> |
|
在中国搞技术是非常苦难的煎熬,时代很浮躁,没有人精心搞技术,除了生存,你会觉得无可奈何。国家只管GDP提高,才不会去考虑什么技术创新之类的东西,只要能把东西卖出去,哪怕是偷别人专利也在所不辞。以为支持房价快涨,铁路多修,经济就好了, ...… 查看全部问答> |
|
行为级描述目的是加快仿真速度,做法是尽量减少一个always块中要执行的语句数量,其结果不是为了综合RTL级描述是为了综合工具能够正确的识别而编写的代码,verilog中有一个可综合的子集,不同的综合工具支持的也有所不同… 查看全部问答> |
|
想了解一下各位买了万利的EK-STM32F的开发板,板子上面附带的那个内嵌ST-LINK II仿真器性能如何?是否会出现 ...… 查看全部问答> |




