STM32内部EEPROM的使用方法

发布者:innovator8最新更新时间:2024-07-24 来源: elecfans关键字:STM32  内部EEPROM  使用方法 手机看文章 扫描二维码
随时随地手机看文章

STM32内部的EEPROM其实是Flash模拟的,也就是会占用程序的存储空间,下载的程序也放在这个地方,不过L系列单独给eeprom分配的有位置,理论上所有的STM32都可以使用这个方法,但是要注意程序越大占用的空间越多,不要和程序覆盖在一起。


大家可能使用的型号都不同,我们首先在官网下载对应型号的参考手册


网址:意法半导体STM | STM32/STM8微控制器 | MCU单片机

图片

STEP.2

打开pdf文档找到'Flash program memory and data EEPROM (FLASH)'

图片

这里有详细的说明

找到对应的内存的设备

示意:

图片

L071是196KB的所以是这个表格

图片

STEP.3

开始编程(基于HAL库)

定义一个函数,像这样:

图片

再由参考手册宏定义一下这两个eeprom的地址:

PS:如果是没有eeprom的stm32,只要程序不是足够大,可以把地址改成Flash的最后几页(避免和程序冲突导致错误),解锁上锁函数也要分别改为

HAL_FLASH_Unlock(void);

HAL_FLASH_Lock(void);

每次对其写数据要先解锁,用完再上锁。

图片

读写函数:

图片

这里读写的是8bit的数据,如果要用16,32bit的数据类型

直接改数据类型就可以啦!

使用方法:

图片

代码:


#ifndef __EEPROM_H

#define __EEPROM_H



#include 'main.h'

//MAX_3KB

#define MCU_Start_Address_Bank1 0x08080000

//MAX_3KB

#define MCU_Start_Address_Bank2 0x08080C00



void Flash_Write(uint32_t Address,uint8_t *Data,uint8_t Length);

void Flash_Read(uint32_t Address,uint8_t *Data,uint8_t Length);





#endif



#include 'eeprom.h'

//max 3KB//               地址              数据         长度*/

void Flash_Write(uint32_t Address,uint8_t *Data,uint8_t Length)

{

  HAL_FLASHEx_DATAEEPROM_Unlock();//解锁Flash


  for(uint8_t i=0;i< Length;i++)

  {  

    /*      数据类型             数据类型       */

    *(__IO uint8_t *)Address = (uint8_t) Data[i];

    Address+=1;

  }


  HAL_FLASHEx_DATAEEPROM_Lock();//上锁Flash

}//羊羊课代表



//max 3KB//               地址              数据         长度*/

void Flash_Read(uint32_t Address,uint8_t *Data,uint8_t Length)

{

  for(uint8_t i=0;i< Length;i++)

  {  

    /*              数据类型                */    

    Data[i]=*(__IO uint8_t *)Address;

    Address+=1;

  }

}//羊羊课代表


关键字:STM32  内部EEPROM  使用方法 引用地址:STM32内部EEPROM的使用方法

上一篇:基于STM32设计的简易手机
下一篇:什么是FMSC_STM32_FMSC使用理解

推荐阅读最新更新时间:2024-11-09 15:29

STM32单片机学习笔记(6):PWM波形产生
项目简介 利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第六部分针对STM32单片机内置TIM模块的PWM波形产生的学习和理解。 硬件模块 STM32F103R4 示波器 软件工具 CubMX Proteus KEIL 电路连接图 工作流程 首先,在CubMX种设置号一些参数,选择TIM1定时器,按下图设置好工作模式。输出PWM的引脚是PB15引脚。 然后再按下图设置好预分频和计数值 最好设置好占空比,占空比=Pulse/Per,比如想要设置占空比为20%,而上面设置了计数值为1000,那
[单片机]
<font color='red'>STM32</font>单片机学习笔记(6):PWM波形产生
基于STM32的多种printf用法
在调试代码的时候,最常用的就是使用printf函数来输出一些打印信息,提示自己代码的执行情况。 如果你的UART串口不够用,还要用printf,此时该怎么办? 解决方法:使用SWO/SWV。 SWO:Serial Wire Output,串行线输出 SWD:Serial Wire Viewer,串行线查看器 一、常见printf输出 1.UART打印 2.Keil MDK-ARM Viewer输出 3.IAR EWARM终端输出 4.ST-LINK Utility SWV输出 二、UART映射printf 使用硬件UART串口映射,实现printf打印输出。 #include stdio.h int fp
[单片机]
STM32定时器中TIM_RepetitionCounter作用详解
在STM32中 有一个这个TIM_RepetitionCounter参数。如下,定时了0.001s,然后在中断中计数1000次,点亮熄灭LED,正常情况来说,led会亮1s,然后灭1s,不断重复。 当 TIM_RepetitionCounter 参数设置为0 时,确实是1s。 当 TIM_RepetitionCounter 参数设置为1 时,明显感觉到亮灭的时间被延长了一倍。 所以 TIM_RepetitionCounter 应该是在本次定时结束后,再重装载定时 1次,进入中断,所以 当TIM_RepetitionCounter =1时,相当于定时0.001s 2次进入中断,那么led的亮灭时间就变成了2s。 当TIM_R
[单片机]
<font color='red'>STM32</font>定时器中TIM_RepetitionCounter作用详解
stm32定时器时钟源时钟选择,重点是外部时钟源1模式的理解
有意义的参考 TI与ITRX的区别参考:https://blog.csdn.net/gtkknd/article/details/39292517 解析参考:https://blog.csdn.net/qq_33559992/article/details/103728903?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2 基础了解 时钟选择计数器时钟可由下列时钟源提供:
[单片机]
<font color='red'>stm32</font>定时器时钟源时钟选择,重点是外部时钟源1模式的理解
LCD1602引脚介绍及STM32单片机驱动LCD1602程序
  LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。   LCD1602特性:   3.3V或5V工作电压,对比度可调   内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能   有80字节显示数据存储器DDRAM   内建有192个5X7点阵的字型的字符发生器CGROM   8个可由用户自定义的5X7的字符发生器CGRAM   LCD1602引脚功能:   字符型LCD1602通常有14条引脚线或16条引脚线的LCD,多出来的2条线
[单片机]
LCD1602引脚介绍及<font color='red'>STM32</font>单片机驱动LCD1602程序
使用STM32调试FMSDR模块及解调FM电台(4)
5. 更换频点使用MSI001解调电台 更换MSI001频点为已知电台的频点 本实验是在配置MSI001的频点为101.7Mhz已知交通广播电台,观察喇叭是否能听到交通广播声音,再调整MSI001的输出幅度。 添加101.7M频点程序 在前面经过FIR滤波后的程序基础上,修改msi001.c文件,增加一个Msi001_FM101_7M_Init函数,初始化msi001的寄存器为接收101.7MHz: 在main.c文件的while循环前,初始化频点到101.7M频点。添加代码如下: 收听广播声音 将编译好的程序下载到开发板,连接喇叭,能听到交通广播声音。 用示波器测量开发板PA5管脚波形, 1ms档位波形 200
[单片机]
使用<font color='red'>STM32</font>调试FMSDR模块及解调FM电台(4)
三种串口接收不定长数据方法详解
方法1:串口接受数据,定时器来判断超时是否接受数据完成。 方法2:DMA接受+IDLE中断 实现思路:采用STM32F103的串口1,并配置成空闲中断IDLE模式且使能DMA接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成之后,当外部给单片机发送数据的时候,假设这帧数据长度是200个字节,那么在单片机接收到一个字节的时候并不会产生串口中断,而是DMA在后台把数据默默地搬运到你指定的缓冲区里面。当整帧数据发送完毕之后串口才会产生一次中断,此时可以利用DMA_GetCurrDataCounter();函数计算出本次的数据接受长度,从而进行数据处理。 应用对象:适用于各种串口相关的通信协议,如:MODBUS,PPI ;还有
[单片机]
STM32中断里的那些事,你都知道吗?
1.抢占优先级和响应优先级 STM32 的中断向量具有两个属性,一个为抢占属性,另一个为响应属性,其属性编号越小,表明它的优先级别越高。 抢占 是指打断其他中断的属性,即因为具有这个属性会出现嵌套中断(在执行中断服务函数A 的过程中被中断B 打断,执行完中断服务函数B 再继续执行中断服务函数A) 三.例如: 谁能打断谁? 若内核正在执行C 的中断服务函数,则它能被抢占优先级更高的中断A 打断,由于B和C 的抢占优先级相同,所以C 不能被B 打断。 但如果B 和C中断是同时到达的,内核就会首先响应响应优先级别更高的B 中断。 2.EXTI15_10_IRQn与EXTI9_5_IRQn的区别 EXTI0_IRQC
[单片机]
<font color='red'>STM32</font>中断里的那些事,你都知道吗?
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved