4765|9

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请问硬件I2C如何设计的?我总是调不通啊 [复制链接]

                                 请问硬件I2C如何设计的?我总是调不通啊
此帖出自stm32/stm8论坛

最新回复

                                 我没有用库,直接操件寄存器的,读写24C02,调了一天才调好。。  详情 回复 发表于 2010-11-25 11:21
点赞 关注
 

回复
举报

76

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

4
 
jgphu发表于 2010-10-18 14:57 | 只看该作者 回复 引用 编辑 评分 返回版面 TOP  得分:0
6楼: 还有下面的
#include "iic.h"

void IIC_Init(void)
{
        UCHAR temp;
        
        CLK_PCKENR1 |= 0x01;

        I2C_FREQR |= 0x10;                  //输入外设时钟频率为1MHz
        I2C_CR1    = 0x00;                  //禁止I2C外设
        I2C_CCRH  &= ~0xcf;
        I2C_CCRL  &= ~0xff;  
  I2C_TRISER = 0x11;
        I2C_CCRL   = 0x10;
        I2C_CCRH   = 0x00;
        I2C_CR1   |= 0x01;                  //开启I2C外设
        I2C_CR2   |= 0x04;                  //当前接收字节返回应答
        I2C_CR2   &= 0x08;
        I2C_OARL   = 0x86;                  //自身地址
        I2C_OARH   = 0x40;
}

void Read_8816(UCHAR *pBuffer, UCHAR index, UCHAR NumByteToRead)
{
        UCHAR temp;

        while(I2C_SR3 & 0x02);             //等待总线空闲
        I2C_CR2 |= 0x01;                                //产生起始位
        while(!(I2C_SR1 & 0x01));          //等待START发送完
        I2C_DR = 0x8a;                     //发送8816器件地址
        while(!(I2C_SR1 & 0x02));          //等特7位器件地址发送完
        temp = I2C_SR1;
        temp = I2C_SR3;
        I2C_DR = (UCHAR)(index);
        while(!(I2C_SR1 & 0x84));
        
        I2C_CR2 |= 0x01;                                      //产生重复起始位
        while(!(I2C_SR1 & 0x01));          //等待START发送完
        I2C_DR = 0x8b;                     //读
        while(!(I2C_SR1 & 0x02));          //等特7位器件地址发送完
        temp = I2C_SR1;
        temp = I2C_SR3;
        while(NumByteToRead)                      //要读几个字节
        {
                if(NumByteToRead == 1)
                {
                        I2C_CR2 &= ~0x04;              //不返回应答
                        I2C_CR2 |= 0x02;               //产生停止位
                }
                if(I2C_SR1 & 0x40)
                {
                        temp = I2C_SR1;
                        *pBuffer = I2C_DR;
                        pBuffer++;
                        NumByteToRead--;
                }
        }
        I2C_CR2 |= 0x04;
        I2C_CR2 &= ~0x08;                  //为下一次接收使能应答
}
此帖出自stm32/stm8论坛
 
 
 

回复

101

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 哦,我真粗心,I2C的协议。。地址搞错了,谢谢你。
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 呵呵,以后细心点
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 楼主调多了,就会逐渐有经验了
此帖出自stm32/stm8论坛
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 有没有人库来做的呢,我弄了几天,就是不进中断,气死人!
此帖出自stm32/stm8论坛
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
我没有用中断,不过是用库的,读写24c02的
可以联系我
xyz160405@163.com
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 我没有用库,直接操件寄存器的,读写24C02,调了一天才调好。。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表