【STM32】EEPROM读写浮点数、负整数

发布者:TranquilSoul最新更新时间:2025-01-20 来源: jianshu关键字:STM32  EEPROM 手机看文章 扫描二维码
随时随地手机看文章

浮点数、负整数拆分与还原

问题:EEPROM需要按照字节存储,浮点数、负整数占用多个字节,当需要读写浮点数和负整数至EEPROM时,需要对浮点数、负整数拆分与还原。
方法:获取存储浮点数、负整数的变量的指针,将该指针强制转换为uint8*的指针,然后利用该指针将浮点数、负数拆分成单个字节;将拆分后的字节写入uint8型的数组中,然后将数组的指针强制转换为拆分前变量的指针类型,即可重新还原浮点数、负整数。代码如下:

#include


#define uint8 unsigned char

#define uint16 unsigned short

#define uint32 unsigned int

#define ARRAY_LENGTH 3

#define ARRAY_LENGTH_DOUBLE (ARRAY_LENGTH*sizeof(ARRAY_TYPE))

#define ARRAY_TYPE int


ARRAY_TYPE array[ARRAY_LENGTH];

uint8 u8_array[ARRAY_LENGTH_DOUBLE];


int main(void)

{

    int i;       

    while(1)

    {

        for(i=0;i        {

            array[i]=-1-i;

        }

        

        for(i=0;i        {

            u8_array[i] = ((uint8 *)array)[i];//将数进行拆分

        }

        

        for(i=0;i        {

            array[i]=0;

        }

        

        for(i=0;i        {

            array[i]=((ARRAY_TYPE *)u8_array)[i];//将数进行还原

        }

    }

}


测试验证

测试条件:
①cortex-M3内核的stm32单片机
②keil软件
③jlink仿真调试器

测试结果:
①将负数进行拆分,存储在uchar类型的数组中


图1 负数拆分

②将负数进行还原


图2 复数还原


关键字:STM32  EEPROM 引用地址:【STM32】EEPROM读写浮点数、负整数

上一篇:【STM32 LL库编程】GPIO实现独立按键
下一篇:stm32修改外部晶振频率的方法

推荐阅读最新更新时间:2026-03-25 12:43

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 开
[单片机]
<font color='red'>STM32</font>内部<font color='red'>EEPROM</font>的使用方法
STM32速成笔记(11)—EEPROM(AT24C02)
一、AT24C02简介 AT24C01/02/04/08/16...是一个1K/2K/4K/8K/16K位电可擦除PROM,内部含有128/256/512/1024/2048个8位字节,AT24C01有一个8字节页写缓冲器,AT24C02/04/08/16有一个16字节页写缓冲器。 电压可允许低至1.8V,待机电流和工作电流分别为1uA和1mA。该器件通过I2C总线接口进行操作,这里就不再对IIC做详细介绍了,具体可见外设系列OLED篇。 二、AT24C02引脚 AT24C02引脚定义 三、AT24C02寻址 使能芯片读写操作后,EEPROM都要求有8位的器件地址信息。 AT24C02地址信息 器件地址信息由 1 、
[单片机]
<font color='red'>STM32</font>速成笔记(11)—<font color='red'>EEPROM</font>(AT24C02)
stm32专题十七:EEPROM存储小数
在计算机中,数据类型是取决于解码的方式,而在内存中保存的数据,并不会因为解码方式发生改变。 eg:1111 1111 8位数据。当用 uint8_t 来解析时,值为255,而当用 int8_t 来解析时,值为-128。 浮点数:在目前绝大多数机器中,float 类型占据4字节。 我们在利用EEPROM保存浮点数时,实际上就是直接把数据存进去,然后再以 float 类型解析出来。这几种的一个关键的地方,就是在利用I2C发送数据时,利用void *进行强制类型转换,把原来long double和int类型的数据转换成不确定类型的指针。然后一个一个字节的发送就可以。最后,浮点数以%f读出,整数以%d读出。 本博客参考野火
[单片机]
STM32:I2C接口读写EEPROM(AT24C02)试验例程
硬件平台:stm32f10xZET6 开发环境:keil MDK uVisionv4.10 开发语言:C、ST_lib_3.5固件库 EEPROM:电可擦可编程只读存储器。 【stm32f10xZET6开发板的I2C外设物理层特点】 (1)两条串行总线:一条双向数据线(SDA),一条时钟线(SCL); (2)从设备地址唯一; (3)支持总线仲裁; (4)三种速率传输模式: 标准模式100kbit/s 快速模式400kbit/s 高速模式3.4Mbit/s (目前大多I2C设备尚不支持高速模式) (5)片上的滤波器可以滤去总线数据线上的毛刺波保证数据完整; (6)连接到相同总线的IC数量受到总线的最大电容400p
[单片机]
初学24CXX系列EEPROM使用详解&STM32库函数I2C总线
24CXX系列芯片属于EEPROM(Electrically Erasable Programmable read only memory)即电可擦可编程只读存储器,是一种掉电后数据不丢失(不挥发)存储芯片。 24CXX系列芯片数据说明:见下表(只做参考,只表明常用24CXX器件的常用数据,具体使用请查阅器件数据手册): 如24C02BN容量=2KB,但写缓冲区(页容量)=8K 1、“型号”:24Cxx系列型号的标称C后面的参数代表其存储容量大小,单位为KB,这里的1KB=1024bit; 2、“存储容量”:24Cxx系列存储数据为8位(bit)格式,根据其容量可以计算出各型号具体存储数据的字节(Byte)数; 3
[单片机]
STM32学习笔记一一FLASH 模拟 EEPROM
1. 简述 STM32 本身没有自带 EEPROM,但是 STM32 具有在应用编程(IAP:In Application Programming)功能,可以把它的 FLASH 当成 EEPROM 来使用。 不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了1024K 字节。MiniSTM32 开发板选择的 STM32F103RCT6 的 FLASH 容量为 256K 字节,属于大容量产品,闪存模块组织如下图: 1.1 主存储器: 该部分用来存放代码和数据常数(如 const 类型的数据)。对于大容量产品,其被划分为 256 页,每页 2K 字节。**注意:**小容量和中
[单片机]
<font color='red'>STM32</font>学习笔记一一FLASH 模拟 <font color='red'>EEPROM</font>
stm32之TFT触摸屏(ILI9320)(2):由触摸屏写入EEPROM
程序来源是电阻触摸屏的触摸显示实验。TFT触摸屏呢,不仅仅是ILI9320这一个芯片,还涉及到两个,一个是ADS7846,一个是AT24CXX。这两个都分别是什么东西呢,ADS7846是TFT控制器,它的主要作用就是在按压之后,把这个值通过ADC进行模数转换,这个控制器是TFT屏幕必备的,当然可以有很多型号,这个ADS7846只是其中一种;这个AT24CXX则是EEPROM,XX不是真的字母X,而是省略了数字,比如AT24C02,这个是个2K的EEPROM,我们这里用的也是这款,它能干什么呢,存储数据,通过ADC得到的值需要变换为屏幕坐标什么的,这个EEPROM就可以存储这个基准值。 ADS7846的操作是通过SPI进行的
[单片机]
<font color='red'>stm32</font>之TFT触摸屏(ILI9320)(2):由触摸屏写入<font color='red'>EEPROM</font>
STM32作为主机I2C,读写24C02 EEPROM
1、 时钟和数据的传输:开始和停止条件,数据在SCL的高电平期间有效,在SCL的低电平期间改变。 2、 开始条件:在SCL高电平期间,SDA产生一个下降沿 3、 停止条件:在SCL高电平期间,SDA产生一个上升沿 4、 应答:成功接收到数据(地址和数据),产生一个应答位(在第9个时钟周期,将SDA拉低) 下面是源程序:原理上说,下面程序再移植时,只要将数据类型变化,可以应用到任何处理器 AT24c02.h #ifndef __24CXX_H #define __24CXX_H #include i2c.h /*************************************************************
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

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