搜索
bottom↓
回复: 13

发布STM32的I2C_EEPROM读写文件,可读写24C01-24C512

[复制链接]

出0入0汤圆

发表于 2008-9-5 20:03:51 | 显示全部楼层 |阅读模式
看到很多网友说STM32的I2C不好调的,可以参考我这个,经测试可以在EK-STM32F板子上跑24C02

点击此处下载 ourdev_403743.rar(文件大小:4K) (原文件名:STM32_I2C.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

 楼主| 发表于 2008-9-5 20:08:40 | 显示全部楼层
在调试的时候发现当I2C的频率调到100K以上频繁地读写将会使程序死等。。。。


----->程序中在不足的地方,请大家指正

出0入0汤圆

发表于 2008-11-25 10:32:47 | 显示全部楼层
你的程序我下载测试了,程序只能运行一次,我感觉没有正确退出,在主程序中重新调用函数再次写入和读出时就死了, 我仿真时看到大约停在while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));这个函数里了,还有复位后不能再读,必须断电才能再运行一次,好象STM32库也有这个问题,我没解决。我用的是STM32103E-EVAL板子

出0入0汤圆

发表于 2013-1-11 16:39:04 | 显示全部楼层
我也试试

出0入0汤圆

发表于 2013-1-12 11:13:01 | 显示全部楼层
本帖最后由 yuzhi2222 于 2013-1-12 11:15 编辑

用I2C模块不可靠,用模拟的好

/**************************************/
void startPCF(void)                                                //SCL为高时,SDA由高变低
{
PCFSDA_H;
delay_s(10);
PCFSCL_H;
delay_s(10);
PCFSDA_L;
delay_s(10);
PCFSCL_L;
delay_s(10);
}
/**************************************/
void stopPCF(void)                                                //SCL为高时,SDA由低变高
{
PCFSDA_L;
delay_s(10);
PCFSCL_H;
delay_s(10);
PCFSDA_H;
delay_s(10);
}
/**************************************/
void ackPCF(void)
{
        PCFSDA_L;
        delay_s(10);
        PCFSCL_H;
        delay_s(10);
        PCFSCL_L;
        delay_s(10);
}
/**************************************/
void nackPCF(void)
{
        PCFSDA_H;
        delay_s(10);
        PCFSCL_H;
        delay_s(10);
        PCFSCL_L;
        delay_s(10);
}
/**************************************/
uint32 testackPCF(void)
{
uint32 ackbit=0;

PCFSDA_H;
PCFSCL_H;
delay_s(10);
PCFSDA_in;
delay_s(10);
if(GPIOB->IDR&SDA_pin)ackbit=1;
delay_s(10);
PCFSCL_L;
PCFSDA_out;
GPIOB->ODR =((GPIOB->ODR&0xfffe)|key_pin);
delay_s(10);
return(!ackbit);
}
/**************************************/
void sendPCF(uint8 send_byte)
{
        uint32 i;
       
        for(i=0;i<8;i++)
        {
                if((send_byte&0x80)==0x80)PCFSDA_H;
                        else
                                PCFSDA_L;
                delay_s(10);
                PCFSCL_H;
                delay_s(10);
                PCFSCL_L;
                send_byte<<=1;
                delay_s(10);
        }
}
/**************************************/
uint8 receivePCF(void)
{
        uint8  rcv_byte=0;
        uint32 i;
       
        PCFSDA_H;
        delay_s(10);
        PCFSDA_in;
        for(i=0;i<8;i++)
        {
                delay_s(10);
                PCFSCL_H;
                delay_s(10);
                rcv_byte<<=1;
                if(GPIOB->IDR&SDA_pin)rcv_byte|=0x01;
                PCFSCL_L;
        }
        PCFSDA_out;
        GPIOB->ODR =((GPIOB->ODR&0xfffe)|key_pin);
        delay_s(10);
        return(rcv_byte);
}
/**********************连续写******************/
void burstwritePCF(void)
{
        uint32 i;
       
        startPCF();
        sendPCF(0xa2);
        while(testackPCF()==0);
        sendPCF(0x02);
        while(testackPCF()==0);
       
        for(i=0;i<7;i++)
        {
                sendPCF(snd_buff);
                while(testackPCF()==0);
        }
        stopPCF();
}
/**********************连续读******************/
void burst_readPCF(void)
{
        uint32 i;
       
        startPCF();
        sendPCF(0xa2);
        while(testackPCF()==0);
        sendPCF(0x02);
        while(testackPCF()==0);
        startPCF();
        sendPCF(0xa3);
        while(testackPCF()==0);
       
        for(i=0;i<6;i++)
        {
                rtc_buff=receivePCF();
                ackPCF();
        }
        rtc_buff[6]=receivePCF();
        nackPCF();
        stopPCF();
}
STM32F103C8 + PCF8563T ,已运行一年半,稳定

出0入0汤圆

发表于 2013-1-14 10:33:59 | 显示全部楼层
我也试试!很强大

出0入0汤圆

发表于 2013-2-1 08:18:12 | 显示全部楼层
学习,谢谢!!!

出0入0汤圆

发表于 2013-8-12 20:08:26 来自手机 | 显示全部楼层
mark……
顶一个…

出0入0汤圆

发表于 2013-11-17 15:27:49 | 显示全部楼层
硬件的很容易有问题,现在正在调试模拟的当中

出0入0汤圆

发表于 2013-12-27 14:18:18 | 显示全部楼层
晚上试一下

出0入0汤圆

发表于 2014-8-31 10:53:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2014-9-27 10:42:08 | 显示全部楼层
标记一下稍后用iic

出0入0汤圆

发表于 2014-9-27 13:09:21 | 显示全部楼层
很好的程序,试一下。

出0入0汤圆

发表于 2015-12-6 10:24:50 | 显示全部楼层
收藏了,谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 18:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表