STM32的IIC存储和读取整形数据
STM32的IIC存储和读取整形数据,
下面的程序代码是使用stm32F03ZET6的I2C1(PB6,PB7)和AT24C02的EEPROM来测试的。希望对于需要的朋友有帮助。
主要代码如下:
#include "delay.h"
#include "stm32f10x.h"
#include "usart.h"
#include "24cxx.h"
void readNInt(u16 addr,int *buf,int len);
void writeOneInt(u16 addr,int data);
int readOneInt(u16 addr);
void writeNInt(u16 addr,int arr[],int len);
int arr[] = {1222,1223,1224,1225,1226};
int buf[5] = {0};
char j = 0;
int main(void)
{
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组
uart_init(115200); //串口初始化为115200
AT24CXX_Init(); //IIC初始化
while(AT24CXX_Check())//检测不到24c02
{
printf("AT24C02 filed\r\n");
}
printf("AT24c02 is ok\r\n");
/*测试向EEPROM中写入和读取一个整形数的程序*/
writeOneInt(2,1024);
delay_ms(1000);
printf("read result is %d\r\n",readOneInt(2));
/*测试写入和读取N个整形数的测试程序*/
writeNInt(100,arr,5);
delay_ms(1000);
readNInt(100,buf,5);
for(j=0;j<5;j++)
{
printf("%d\t",buf[j]);
}
printf("\r\n");
while(1)
{
}
}
//功能:向EEPROM指定的地址写一个整形数
//参数:addr:写入地址
// data:写入的数据
void writeOneInt(u16 addr,int data)
{
char tmp = 0,i = 0;
for(;i<4;i++)
{
tmp = (char)(data & 0xFF);
AT24CXX_WriteOneByte(addr,tmp);
data = data >> 8;
addr++;
}
}
//功能:在EEPROM中的指定地址读取一个整形数
//参数:addr:地址
int readOneInt(u16 addr)
{
int tmp = 0;
char i = 0;
for(;i<4;i++)
{
tmp = tmp | (AT24CXX_ReadOneByte(addr) << (i*8)) ;
addr++;
}
return tmp;
}
//功能:向EEPROM指定的地址写N个整形数
//参数:addr:写入地址
// arr:要写入数据所在的缓冲区
// len:写入的个数
void writeNInt(u16 addr,int *arr,int len)
{
char i = 0;
for(;i<len;i++)
{
writeOneInt(addr,*(arr +i));
addr += 4;
}
}
//功能:向EEPROM指定的地址读N个整形数
//参数:addr:读取地址
// arr:读取数据要保存的缓冲区
// len:读取的个数
void readNInt(u16 addr,int *buf,int len)
{
char i = 0;
for(;i<len;i++)
{
buf[i] = readOneInt(addr);
addr += 4;
}
}
分类:
STM32
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?