OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5128|回复: 8

求一个ZLG7290和STM32应用的代码程序参考,参考,模拟I2C,我自己模拟的有问题,好久读出的数都是FF

[复制链接]

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
发表于 2015-4-5 19:11:55 | 显示全部楼层 |阅读模式
5金钱
我用的PB6.7,PB4是INT信号,7290读出的数据都是FF。这个总线上挂了一个PCF8563,读出的数据也是乱的,不知道是我代码问题还是什么,,求之低昂

#define SCL_H         GPIOB->BSRR = GPIO_Pin_6
#define SCL_L         GPIOB->BRR  = GPIO_Pin_6
   
#define SDA_H         GPIOB->BSRR = GPIO_Pin_7
#define SDA_L         GPIOB->BRR  = GPIO_Pin_7

#define SCL_read      GPIOB->IDR  & GPIO_Pin_6
#define SDA_read      GPIOB->IDR  & GPIO_Pin_7


u8 IRcvStr_7290(u8 suba)
{
   u8  s;

   I2C_Start();
   I2C_SendByte(0x70);
   I2C_WaitAck();       
   I2C_SendByte(suba); /*发送器件子地址*/
   I2C_WaitAck();
   I2C_Start(); 
   I2C_SendByte(0x71);
   I2C_WaitAck();
   s=I2C_ReceiveByte(); 
   I2C_NoAck();                  /*发送非应位*/
   I2C_Stop();                   /*结束总线 */ 
  return(s);
}
求大神指点
void I2C_GPIO_Config(void)

GPIO_InitTypeDef  GPIO_InitStructure; //GPIO结构体定义 
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//使能I2C的IO口       
/* PB6-I2C1_SCL、PB7-I2C1_SDA*/  
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7;  
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;      
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;        // 开漏输出  
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化结构体配置 

}


void I2C_delay(void)
{
   u8 i=150; //这里可以优化速度 ,经测试最低到5还能写入
   while(i) 
   { 
     i--; 
   } 
}

bool I2C_Start(void)
{
SDA_H;
SCL_H;
I2C_delay();
if(!SDA_read)return FALSE; //SDA线为低电平则总线忙,退出
SDA_L;
I2C_delay();
if(SDA_read) return FALSE; //SDA线为高电平则总线出错,退出
SDA_L;
I2C_delay();
return TRUE;
}

void I2C_Stop(void)
{
SCL_L;
I2C_delay();
SDA_L;
I2C_delay();
SCL_H;
I2C_delay();
SDA_H;
I2C_delay();
}

void I2C_Ack(void)
{
SCL_L;
I2C_delay();
SDA_L;
I2C_delay();
SCL_H;
I2C_delay();
SCL_L;
I2C_delay();
}

void I2C_NoAck(void)
{
SCL_L;
I2C_delay();
SDA_H;
I2C_delay();
SCL_H;
I2C_delay();
SCL_L;
I2C_delay();
}

bool I2C_WaitAck(void) //返回为:=1有ACK,=0无ACK
{
SCL_L;
I2C_delay();
SDA_H;
I2C_delay();
SCL_H;
I2C_delay();
if(SDA_read)
{
      SCL_L;
      return FALSE;
}
SCL_L;
return TRUE;
}

void I2C_SendByte(u8 SendByte) //数据从高位到低位//
{
    u8 i=8;
    while(i--)
    {
        SCL_L;
        I2C_delay();
      if(SendByte&0x80)
        SDA_H;  
      else 
        SDA_L;   
        SendByte<<=1;
        I2C_delay();
SCL_H;
        I2C_delay();
    }
    SCL_L;
}

u8 I2C_ReceiveByte(void)  //数据从高位到低位//

    u8 i=8;
    u8 ReceiveByte=0;

    SDA_H;
    while(i--)
    {
      ReceiveByte<<=1;      
      SCL_L;
      I2C_delay();
 SCL_H;
      I2C_delay();
      if(SDA_read)
      {
        ReceiveByte|=0x01;
      }
    }
    SCL_L;
    return ReceiveByte;
}

最佳答案

查看完整内容[请看2#楼]

周立功的芯片在兼容性方面本来就很差,你要把IIC的频率调到最小,还有就是确定硬件没问题,我开始我是上升沿还是下降沿读取的问题,我就是把上升沿和下降沿换了下就对了
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
 楼主| 发表于 2015-4-5 19:11:56 | 显示全部楼层
周立功的芯片在兼容性方面本来就很差,你要把IIC的频率调到最小,还有就是确定硬件没问题,我开始我是上升沿还是下降沿读取的问题,我就是把上升沿和下降沿换了下就对了
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
 楼主| 发表于 2015-4-5 19:13:19 | 显示全部楼层
void EXTI4_IRQHandler(void)
{
   u8  keymu;

   
   
  if(EXTI_GetITStatus(EXTI_Line4) != RESET)
  {
    
    keymu=IRcvStr_7290(0x01);
     
    Delay_Ms(100);
    USART1_Send(keymu);       
  }
   
    EXTI_ClearITPendingBit(EXTI_Line4); /*清除中断标志*/
  


}
串口出来的数字是FF,弄了3天了
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-4-5 22:56:40 | 显示全部楼层
帮顶....
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2016-7-9
在线时间
2 小时
发表于 2016-9-29 09:21:10 | 显示全部楼层
兄弟,你问题解决了么?
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
 楼主| 发表于 2016-10-8 10:36:59 | 显示全部楼层
爱上白米饭 发表于 2016-9-29 09:21
兄弟,你问题解决了么?

早解决了啊
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
 楼主| 发表于 2016-10-8 10:37:26 | 显示全部楼层
爱上白米饭 发表于 2016-9-29 09:21
兄弟,你问题解决了么?

你是啥子问题?直接说
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

43

主题

137

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1299
金钱
1299
注册时间
2016-4-21
在线时间
262 小时
发表于 2016-12-16 10:34:02 | 显示全部楼层
1206447373 发表于 2015-4-5 19:11
周立功的芯片在兼容性方面本来就很差,你要把IIC的频率调到最小,还有就是确定硬件没问题,我开始我是上升 ...

i2c的频率怎么调小,就是调GPIO口的速率么
回复

使用道具 举报

48

主题

208

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1371
金钱
1371
注册时间
2015-3-24
在线时间
190 小时
 楼主| 发表于 2016-12-19 09:03:25 | 显示全部楼层
肯定不是撒。如果你是模拟的IIC你就把模拟操作之间的延时加大一点,如是硬件的有个地方是初始化IIC设置频率的,把他调大
小时在工地上玩,捡了一个根木棒回家,麻麻问我捡这破玩意回来有什么用?我脑子一热,就说“你可以用它来打我啊!!”
于是,一根木棒伴随了我很多年。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 08:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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