7467|3

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

采用AD7746+stm32,使用I2C模拟,但一直没有ACK [复制链接]

  1. #define SDA_IN  {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)8<<28;GPIOB->ODR|=(unsigned int)1<<7;}
  2. #define SDA_OUT {RCC->APB2ENR|=(unsigned int)1<<3;GPIOB->CRL&=0X0FFFFFFF;GPIOB->CRL|=(unsigned int)3<<28;GPIOB->ODR|=(unsigned int)1<<7;}


  3. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;                               
  4. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                
  5. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;                 
  6. GPIO_Init(GPIOB, &GPIO_InitStructure);                                         
  7. GPIO_SetBits(GPIOB,GPIO_Pin_6);                                                 
  8.        

  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
  10.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  11.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  12.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  13.         GPIO_SetBits(GPIOB,GPIO_Pin_7);


  14. void IIC_SendByte(char ch)       
  15. {
  16.         char i;
  17.         SDA_OUT;                        //to enable SDATA pin as an output
  18.         AD7746_SCLK = 0;                        //make sure that the clock line is low
  19.         //delay(20);
  20.         for(i=0;i<8;i++)
  21.         {
  22.                 AD7746_SDAout=0;
  23.                 if(ch&0x80)
  24.                         AD7746_SDAout=1;
  25.                 else
  26.                         AD7746_SDAout=0;
  27.                 ch = ch<<1;       
  28.                 delay(5);
  29.                 AD7746_SCLK = 1;                //clock to send bit
  30.                 delay(5);
  31.                 AD7746_SCLK = 0;                //clear clock
  32.                 delay(5);
  33.                         //move ch's bit
  34.         }
  35.         SDA_IN;                        //release data line for acknowledge     
  36.        
  37.         AD7746_SCLK = 1;                //send clock for acknowledge
  38.         delay(2);
  39.         //AD7746_SDAout=1;
  40.         //delay(2);
  41.         if(!AD7746_SDAin)                                //no acknowledge, set flag
  42.         {
  43.                
  44.                         IIC_Flag |= 1<<NOACK;
  45.         }

  46.        
  47.         delay(20);
  48.         AD7746_SCLK = 0;                        //clear clock
  49. }




  50. void CDC_RDCAP(void)
  51. {
  52.         IIC_StartBit();
  53.         IIC_SendByte(SLAVEADD);
  54.         if(!(IIC_Flag&(1<<NOACK)))
  55.                 IIC_SendByte(CDC_CAPDATA_ADDR);
  56.         if(!(IIC_Flag&(1<<NOACK)))
  57.         {
  58.                 IIC_StartBit();                                //re-start
  59.                 IIC_SendByte(SLAVEADD+1);        //read function
  60.         }
  61.         if(!(IIC_Flag&(1<<NOACK)))
  62.                 CapResult_H = IIC_RcvByte(0);        //read cap data reg
  63.         if(!(IIC_Flag&(1<<NOACK)))
  64.                 CapResult_M = IIC_RcvByte(0);
  65.         if(!(IIC_Flag&(1<<NOACK)))
  66.                 CapResult_L = IIC_RcvByte(1);               
  67.         IIC_StopBit();
  68.         if(IIC_Flag&(1<<NOACK))
  69.                 IIC_Flag |= 1<<ERR;
  70. }
复制代码


最新回复

看了看代码,有帮助  详情 回复 发表于 2016-10-15 21:01
点赞 关注
 
 

回复
举报

9812

帖子

24

TA的资源

版主

沙发
 
测量一下SDA和SCL的信号对比一下
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 
 

回复

31

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
看了看代码,有帮助
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
福禄克有奖直播:高精度测温赋能电子制造 报名中!
直播时间:2025年2月28日(周五)上午10:00
直播主题:高精度测温赋能电子制造
小伙伴们儿快来报名直播吧~好礼等你拿!

查看 »

 
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
快速回复 返回顶部 返回列表