历史上的今天
今天是:2025年04月04日(星期五)
2020年04月04日 | stm32 l0相关的eeprom
2020-04-04 来源:eefocus
内部FLASH和EEPROM这种掉电后还能保存内容的内存统称为non-volatile memory(NVM),STM32L053内部有2K的EEPROM.
内部EEPROM的页大小为一个Word为单位,擦除是必须以页为单位,所以库函数里的擦除函数也是每次擦除4个字节:
view plaincopy to clipboardprint?
/**
* @brief Erase a word in data memory.
* @param Address: specifies the address to be erased.
* @note To correctly run this function, the HAL_FLASHEx_DATAEEPROM_Unlock() function
* must be called before.
* Call the HAL_FLASHEx_DATAEEPROM_Lock() to the data EEPROM access
* and Flash program erase control register access(recommended to protect
* the DATA_EEPROM against possible unwanted operation).
* @retval HAL status
*/
HAL_StatusTypeDef HAL_FLASHEx_DATAEEPROM_Erase(uint32_t Address)
{
HAL_StatusTypeDef status = HAL_OK;
/* Check the parameters */
assert_param(IS_FLASH_DATA_ADDRESS(Address));
/* Wait for last operation to be completed */
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
if(status == HAL_OK)
{
/* Clean the error context */
ProcFlash.ErrorCode = HAL_FLASH_ERROR_NONE;
/* Write "00000000h" to valid address in the data memory" */
*(__IO uint32_t *) Address = 0x00000000;
status = FLASH_WaitForLastOperation(FLASH_TIMEOUT_VALUE);
}
return status;
}
写EEPROM的顺序和使用flash类似,要先解锁(UNLOCK) 才能写,写的时候可以字节、半字、字为单位都可以。
写的时候可以不擦除,内部会自动擦除。需要注意的是写EEPROM会消耗固定的时间,所以需要在程序对时间要求严格时
正确安排写EEPROM的时机。
写EEPROM的函数如下:
void EEPROM_Write(uint16_t WriteAddr,uint8_t *pBuffer,uint16_t NumToWrite)
{
uint16_t t;
HAL_FLASHEx_DATAEEPROM_Unlock();
for(t = 0;t < NumToWrite;t++)
{
HAL_FLASHEx_DATAEEPROM_Program(FLASH_TYPEPROGRAMDATA_BYTE,DATA_EEPROM_BASE + WriteAddr + t,*(pBuffer + t));
}
HAL_FLASHEx_DATAEEPROM_Lock();
}
main函数里面先写EEPROM,然后再读出来验证是否和写一样,一样的话点亮LED:
#include "main.h"
uint8_t Test[25] = "http://www.eepw.com.cn/";
uint8_t Buff[25];
int main(void)
{
uint8_t res;
HAL_Init();
SystemClock_Config();
LED_Init();
EEPROM_Write(0,Test,25);
EEPROM_Read(0,Buff,25);
res = strcmp((const char*)Buff,(const char*)Test);
if(0 == res)
{
while(1)
{
HAL_Delay(500);
LED_TOG;
}
}
}
上一篇:STM32——EEPROM
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 在面试结束前,大多数的主考官都会丢问题给求职者,最常见的就是:你有没有什么问题或疑问,想要提出来的?无论求职者是否有提出问题,其实,这个问题背后的真正含意,通常是主考官用来测试你对这份 ...… 查看全部问答> |
|
选择比努力更重要 一个人一生当中最大的幸福在于选择对两件事,一是找对单位、找对老板、找对上司;第二件事就是找对妻子或丈夫。为什么这么说呢?当太阳升起时我们与上司共事,当日落西下,我们与自己的爱人相拥。你永远可以更主动地去影响你的上 ...… 查看全部问答> |
|
收音部分采用CXA1238M集成电路,灵敏度高,性能稳定,立体收音,功放采用TDA2822M集成电路。 电子制作是综合能力的体现,从中可学到不少技术和经验,欢迎选购制作。一板两用,既可当FM收音机用,又可以当立体声功放用。本板体积小巧玲珑,给用户 ...… 查看全部问答> |
|
如题,因为8155只需要低八位地址,P2想留做他用,故想采用普通IO模拟地址总线、ALE、WR等端口方式实现。按照时序图写出程序,但实验失败,在此求助,先谢过啦。代码如下: #include #include sbit AL = P2^0; //ALE sbit W = P2^2 ...… 查看全部问答> |
|
直接用如下代码获取,返回值为TRUE,得不到数据: memset(&m_nicdata, 0, sizeof(m_nicdata)); m_nicdata.Size = sizeof(NIC_STATISTICS); m_nicdata.ptc ...… 查看全部问答> |
|
求购在WINCE6.0下,A4平台上运行的TCPMP源码,价钱面议 在下求购能在WINCE6.0下,A4平台上运行的TCPMP源码. 本人在深圳 南山,西丽. QQ 50580776 EMAIL: gmb_669@163.com… 查看全部问答> |
|
是这样的,我最近在ARM上移植了UCOSII,下载了TCP/IP包,目的是利用以太网口实现两个目标板的通信。应用层上用SOCKET编程实现,基于TCP协议。但是问题是server和client怎么也建立不起链接。client方connect函数一直调用失败。server方listen调用成 ...… 查看全部问答> |




