打印

STM8S103k3 I2C问题

[复制链接]
3966|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kinso|  楼主 | 2010-6-9 16:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM8S103k3 I2C在STVD+cosmic下编译成功,
Debug时使用simulator程序正常,用ST—LINK链接到MCU时,
停在while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT))处;
刚接触ST芯片,很多东西都不了解。不知是何故,望高人指点!
uCHAR I2CWriteByte(uCHAR cDevAddr, uCHAR cReg,uCHAR cData)
{
  //I2cInit();
  I2C_GenerateSTART(ENABLE);
  /*EV5*/
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));
  I2C_Send7bitAddress(cDevAddr,I2C_DIRECTION_TX );
     /* Test on EV6 and clear it */
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
   I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);
   
  I2C_SendData(cReg);
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  
  I2C_SendData(cData);
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  I2C_GenerateSTOP(ENABLE);
}
沙发
kinso|  楼主 | 2010-6-9 16:35 | 只看该作者

STM8S103k3 I2C问题

STM8S103k3 I2C在STVD+cosmic下编译成功,
Debug时使用simulator程序正常,用ST—LINK链接到MCU时,
停在while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT))处;
刚接触ST芯片,很多东西都不了解。不知是何故,望高人指点!
uCHAR I2CWriteByte(uCHAR cDevAddr, uCHAR cReg,uCHAR cData)
{
  //I2cInit();
  I2C_GenerateSTART(ENABLE);
  /*EV5*/
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));
  I2C_Send7bitAddress(cDevAddr,I2C_DIRECTION_TX );
     /* Test on EV6 and clear it */
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
   I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);
   
  I2C_SendData(cReg);
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  
  I2C_SendData(cData);
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  I2C_GenerateSTOP(ENABLE);
}

使用特权

评论回复
板凳
kinso|  楼主 | 2010-6-9 17:55 | 只看该作者

STM8S103k3 I2C问题

STM8S103k3 I2C在STVD+cosmic下编译成功,
Debug时使用simulator程序正常,用ST—LINK链接到MCU时,
停在while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT))处;
刚接触ST芯片,很多东西都不了解。不知是何故,望高人指点!

uCHAR I2CWriteByte(uCHAR cDevAddr, uCHAR cReg,uCHAR cData)
{
  //I2cInit();
  I2C_GenerateSTART(ENABLE);
  /*EV5*/
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_START_SENT));
  I2C_Send7bitAddress(cDevAddr,I2C_DIRECTION_TX );
     /* Test on EV6 and clear it */
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_ADDRESS_ACKED));
   I2C_ClearFlag(I2C_FLAG_ADDRESSSENTMATCHED);
   
  I2C_SendData(cReg);
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  
  I2C_SendData(cData);
   while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  I2C_GenerateSTOP(ENABLE);
}

使用特权

评论回复
地板
香水城| | 2010-6-9 21:46 | 只看该作者
电路图?

使用特权

评论回复
5
kinso|  楼主 | 2010-6-10 09:14 | 只看该作者
因为硬件还没齐,所以只飞了几根线出来,调试I2C 。
两种环境下,flag1和flag2的值不同,在程序I2CWriteByte前;
除了初始化外;没有对I2C->SR1和I2C->SR2的其余操作,应该不会有硬件置位。
不知何故。望不吝赐教!

ErrorStatus I2C_CheckEvent(I2C_Event_TypeDef I2C_Event)
{

  u8 flag1 = 0;
  u8 flag2 = 0;
  ErrorStatus status = ERROR;

  /* Check the parameters */
  assert_param(IS_I2C_EVENT_OK(I2C_Event));

  flag1 = I2C->SR1;
  flag2 = I2C->SR2;

  /* Check which SRx register must be read */
  if (((u16)I2C_Event & (u16)0x0F00) == 0x0700)
  {
    /* Check whether the last event is equal to I2C_EVENT */
    if (flag1 & (u8)I2C_Event)
    {
      /* SUCCESS: last event is equal to I2C_EVENT */
      status = SUCCESS;
    }
    else
    {
      /* ERROR: last event is different from I2C_EVENT */
      status = ERROR;
    }
  }
  else /* Returns whether the status register to check is SR2 */
  {
    if (flag2 & (u8)I2C_Event)
    {
      /* SUCCESS: last event is equal to I2C_EVENT */
      status = SUCCESS;
    }
    else
    {
      /* ERROR: last event is different from I2C_EVENT */
      status = ERROR;
    }
  }

  /* Return status */
  return status;

}

使用特权

评论回复
6
秋天落叶| | 2010-6-10 10:21 | 只看该作者
香主怀疑是你的硬件连接问题,LZ还是把电路图贴出来看看吧

使用特权

评论回复
7
zhengwanjun1314| | 2013-10-16 18:47 | 只看该作者
本帖最后由 zhengwanjun1314 于 2013-10-16 18:49 编辑

朋友,能否把stm8s103k的i2c代码发给我啊?最近在搞这个?都找不到资料?
我的邮箱1052979283@qq.com 感激不尽!

使用特权

评论回复
8
trumpxp| | 2013-10-16 20:48 | 只看该作者
我怀疑是电路硬件的问题   楼主   这一块   最好仔细将电路好好查一查吧

使用特权

评论回复
9
trumpxp| | 2013-10-16 20:54 | 只看该作者
电路  硬件这一块   楼主   仔细查一查   应该是接口电路的问题

使用特权

评论回复
10
sf116| | 2013-10-18 15:17 | 只看该作者
电源不共地会影响到IIC

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

16

帖子

1

粉丝