历史上的今天
返回首页

历史上的今天

今天是:2025年03月02日(星期日)

2020年03月02日 | 【菜鸟入门】stm32 之 eeprom

2020-03-02 来源:eefocus

/* at24c02.c */

#include

#include "init.h"

#include "iic.h"

 

#define send_slave_addr(a) iic_send_byte(a)

#define send_rom_addr(a) iic_send_byte(a)

#define ROM_SIZE (2*1024) //2K

#define ADDR_SIZE 256

#define PAGE_SIZE 8

#define PAGE 32

 

int at24c02_init(unsigned char slave_addr)

{

iic_init();

iic_start();

send_slave_addr(slave_addr|IIC_WRITE);

if(iic_recv_ack())

return 0;

else

return 1;

}

int set_rom_addr(unsigned addr)

{

send_rom_addr(addr);

if(iic_recv_ack())

return 0;

else

return 1;

}

int at24c02_write_unpage( unsigned char slave_addr,

unsigned char start_addr,

char buff[],

unsigned char size)

{

delay_ms(1);

if(0 == at24c02_init(slave_addr))

return -1;

if(0 == set_rom_addr(start_addr))

return -1;

if(size > iic_send_str(buff,size))

{

iic_stop();

return 0;

}

  else 

{

iic_stop();

return 1;

}

}

int at24c02_write_page(unsigned char slave_addr,

unsigned char start_addr,

char buff[])

{

delay_ms(1);

if(0 == at24c02_init(slave_addr))

return -1;

if(0 == set_rom_addr(start_addr))

return -1;

if(8 > iic_send_str(buff,8))

{

iic_stop();

return 0;

}

  else 

{

iic_stop();

return 1;

}

}

int at24c02_write(unsigned char slave_addr,

unsigned char start_addr,

char buff[],

unsigned char size)

{

unsigned char addr = 0;

unsigned char send_byte;

unsigned char i;

char temp;

addr = 8 + ((unsigned char)(start_addr/8))*8;//Get Next Page Frist Address

send_byte = addr - start_addr;

if(size <= send_byte)

{

if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,size))

return -1;

else

return 0;

}

else

{

if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,send_byte))

return -1;

}

size -= send_byte;

buff += send_byte;

delay_ms(5);

temp = (char)(size/8);

for(i=0; i {

start_addr = addr;

if(-1 == at24c02_write_page(slave_addr,start_addr,buff))

return -1;

addr += 8;

size -= 8;

buff += 8;

delay_ms(5);

}

start_addr = addr;

if(-1 == at24c02_write_unpage(slave_addr,start_addr,buff,size))

return -1;

return 0;

}

int at24c02_read( unsigned char slave_addr,

unsigned char start_addr,

char buff[],

unsigned char size)

{

delay_ms(1);

if(0 == at24c02_init(slave_addr))

return -1;

if(0 == set_rom_addr(start_addr))

return -1;

iic_start();

send_slave_addr(slave_addr|IIC_READ);

if(iic_recv_ack())

return -1;

iic_recv_str(buff,size);

iic_stop();

return size;

}

应用例子:

int main()

{

char str[512];

int length = 0;

sys_init(9);

rs232_init(CPU_72M,9600);

rs232_send_byte('n');

if(-1 == at24c02_write(SLAVE_ADDR,6,__NOTE,strlen(__NOTE)))

rs232_send_str("Write AT24C02 Fail!n",20);

delay_ms(1000);

if(-1 == (length = at24c02_read(SLAVE_ADDR,0,str,64)))

rs232_send_str("Read  AT24C02 Fail!n",20);

rs232_send_str("Read:",strlen("Read:"));

rs232_send_str(str,strlen(str));

return 0;

}

推荐阅读

史海拾趣

昭华(CHA)公司的发展小趣事

随着市场需求的不断变化,昭华公司敏锐地捕捉到了防水型轻触开关的市场潜力。他们投入大量资金进行技术研发,成功开发出了一系列防水性能优异、稳定性强的防水型轻触开关。这些产品一经推出便受到了市场的热烈欢迎,为昭华公司带来了可观的利润。此外,昭华公司还不断探索新的技术路线,成功将LED与开关结合,推出了发光开关系列产品,进一步丰富了公司的产品线。

H&D Wireless公司的发展小趣事

2017年,高创被美的集团全资收购,成为美的工业技术事业群的重要业务板块之一。这一转变标志着高创进入了一个全新的发展阶段。借助美的集团的平台力量,高创在技术研发、生产制造、供应链管理等方面得到了显著提升。同时,与美的集团旗下其他业务板块如库卡机器人等的协同合作,进一步拓宽了高创的市场应用领域。

Comtech AHA Corp公司的发展小趣事

在电子行业快速发展的背景下,Comtech AHA Corp敏锐地洞察到了物联网、5G等新兴领域的市场潜力。公司及时调整战略方向,加大在这些领域的研发投入,推出了一系列符合市场需求的新产品。凭借精准的市场定位和优质的产品质量,Comtech AHA Corp成功抓住了市场机遇,实现了业务的快速增长。

科达嘉CODACA公司的发展小趣事

随着电子行业的快速发展,科达嘉意识到技术革新是企业持续发展的关键。因此,公司不断增加自动化生产设备,购置先进的质量测试仪器,并筹建了电感元器件分析实验室和标准的AEC-Q200可靠性实验室。这些举措大大增强了公司的研发分析能力,提升了产品质量和生产效率。科达嘉逐渐形成了以材料研发、产品研发、生产、质量及物控为基础的完整产业链。

Helicomm公司的发展小趣事

科达嘉电子高度重视质量管理,先后通过了ISO9001质量管理体系、ISO14001环境管理体系认证。公司不仅建立了完善的质量检测流程,还成立了专门的检测中心,对产品进行严格的质量把控。这些措施确保了科达嘉电子产品的稳定性和可靠性,进一步提升了公司在市场上的竞争力。

EBG RESISTORS LLC公司的发展小趣事

EBG RESISTORS LLC公司成立于XXXX年,由几位电子工程师共同创立。初创时期,公司面临着资金短缺、市场竞争激烈等多重挑战。然而,创始人们凭借对电阻器技术的深厚理解和热情,坚持研发高质量、高性能的电阻器产品。他们夜以继日地工作,不断优化产品设计和生产工艺,终于在市场上赢得了客户的认可。

问答坊 | AI 解惑

基于51单片机的低频信号发生器设计

Proteus版本7.1,可以在迅雷搜狗里面搜,可以下载。 里面附源程序 [ 本帖最后由 cqzy6666 于 2009-4-10 20:39 编辑 ]…

查看全部问答>

初学者找单片机开发板,仿真器资料这里来

北京三恒星科技公司(www.sanhengxing.com)是一家专门研发DSP/EDA/ARM开发板、仿真器、实验箱,从事单片机硬件和软件应用及教育的企业,承接单片机项目、电子产品设计开发板的开发(包括DSP、ARM、EDA、51单片机编程器,仿真器等系列产品),并整理了 ...…

查看全部问答>

s3c2440的片外norflash

从Nandflash启动的Bootload已经可以运行了,现在我想在做一个Norflash上的Bootload。从s3c2440的datasheet里面看,boot internal sram(4kb)的地址是0x40000000,所以我在用ADS调试Bootload的时候,ro地址只能设置为这个才能运行。我的疑问是,为 ...…

查看全部问答>

S3C2450在wince5.0下用mediaplayer播放MP4的疑问?

硬件:S3C2450 主频400/533M,RAM:256M DDR2,LCD:7寸,分辨率800×480 OS:WINCE5.0 这样的环境下,用WINCE自带的MediaPlayer,能否流畅播放MP4? 7寸屏是固定的,播放视频时可适当下调整显示分辨率,不知道最大能流畅播放多少分辨率的视频! 考 ...…

查看全部问答>

TCPMP播放视频图片重影

我们做了个TCPMP播放器的UI.但是在播放视频和图片的时候会有重影,特别是在播放图片的时候,会有上一张的残留,这样一张一张累积起来,效果很难看.视频好点, 但有时也能看出来.我们有在切换到下一张图片的时候屏黑一下屏幕,但是如果图片比较大的话(数码 ...…

查看全部问答>

在c语言中const能这样用吗?

const   main_item_dealer_arr[] = {         menu_set_time,                                  ...…

查看全部问答>

《2011应届理工学生求职宝典》免费赠送

应届工科生求职宝典           ——凌阳教育教你五步顺利就业         曾经有一份珍贵的“宝典”摆在我面前,我没有好好珍惜,今天凌阳教育出了新“宝典 ...…

查看全部问答>

ST菜菜请教:IARforSTM8和ST-LINK联机要怎样设置

                                 ST菜菜请教:IAR for STM8 和 ST-LINK联机要怎样设置?…

查看全部问答>

LM3S AD寄存器貌似有BUG

各种AD例程里面几乎都有一句 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) );      /*  等待FIFO 0为非空,即等待转换*/ 这个ADC_O_X_SSFSTAT的宏定义附近是…… #define ADC_O_EMUX   & ...…

查看全部问答>

DIY饮料瓶废物利用手工制作照明灯

这里介绍的是DIY饮料瓶废物利用手工制作照明灯,也不需要什么电路,就是一个创意 欢迎大家欣赏         我们每天都需要喝饮料,全球经济危机导致废品都卖不上价,丢掉又觉得有些可惜,而大部分的饮料瓶就进了垃圾 ...…

查看全部问答>