历史上的今天
今天是: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; }
史海拾趣
|
Proteus版本7.1,可以在迅雷搜狗里面搜,可以下载。 里面附源程序 [ 本帖最后由 cqzy6666 于 2009-4-10 20:39 编辑 ]… 查看全部问答> |
|
北京三恒星科技公司(www.sanhengxing.com)是一家专门研发DSP/EDA/ARM开发板、仿真器、实验箱,从事单片机硬件和软件应用及教育的企业,承接单片机项目、电子产品设计开发板的开发(包括DSP、ARM、EDA、51单片机编程器,仿真器等系列产品),并整理了 ...… 查看全部问答> |
|
从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播放器的UI.但是在播放视频和图片的时候会有重影,特别是在播放图片的时候,会有上一张的残留,这样一张一张累积起来,效果很难看.视频好点, 但有时也能看出来.我们有在切换到下一张图片的时候屏黑一下屏幕,但是如果图片比较大的话(数码 ...… 查看全部问答> |
|
各种AD例程里面几乎都有一句 while( (HWREG(ADC_BASE + ADC_O_X_SSFSTAT) & 0x00000100) ); /* 等待FIFO 0为非空,即等待转换*/ 这个ADC_O_X_SSFSTAT的宏定义附近是…… #define ADC_O_EMUX & ...… 查看全部问答> |
|
这里介绍的是DIY饮料瓶废物利用手工制作照明灯,也不需要什么电路,就是一个创意 欢迎大家欣赏 我们每天都需要喝饮料,全球经济危机导致废品都卖不上价,丢掉又觉得有些可惜,而大部分的饮料瓶就进了垃圾 ...… 查看全部问答> |




