打印
[STM8]

求助 :关于STM8S103 从机I2C通信的问题

[复制链接]
2604|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
skywhiteeagle|  楼主 | 2012-7-31 11:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位大侠,我用STM8S103做从机,用的硬件I2C,根据官网的I2C进行修改
里面 有些地方不理解,希望得到帮助
#define MAX_BUFFER  32
u8 u8_My_Buffer[MAX_BUFFER];
u8 *u8_MyBuffp;
u8 MessageBegin;
void I2C_byte_received(u8 u8_RxData)                                                     //接收数据的子函数
{
  if (MessageBegin == TRUE  &&  u8_RxData < MAX_BUFFER)
{        //从机地址匹配加上   u8_RxData <32,这里的 u8_RxData是从I2C->DR得到的数据
   u8_MyBuffp= &u8_My_Buffer[u8_RxData];       //u8_RxData地址放到 u8_u8_MyBuffp中
   MessageBegin = FALSE;
  }
    else if(u8_MyBuffp < &u8_My_Buffer[MAX_BUFFER])                    // 这里的else if 是怎么回事?有点不懂啊
      *(u8_MyBuffp++) = u8_RxData;
}
u8 I2C_byte_write(void)
{
  if (u8_MyBuffp < &u8_My_Buffer[MAX_BUFFER])                               //写的数据都放到u8_MyBuffp中?然后地址依次后移??
   return *(u8_MyBuffp++);
  else
   return 0x00;


/* More bytes received ? */
  if ((sr1 & (I2C_SR1_RXNE | I2C_SR1_BTF)) == (I2C_SR1_RXNE | I2C_SR1_BTF))
  {
    I2C_byte_received(I2C->DR);
  }

/* Byte received ? */                                          
  if (sr1 & I2C_SR1_RXNE)
  {
    I2C_byte_received(I2C->DR);
  }
/* More bytes to transmit ? */
  if ((sr1 & (I2C_SR1_TXE | I2C_SR1_BTF)) == (I2C_SR1_TXE | I2C_SR1_BTF))
  {
  I2C->DR = I2C_byte_write();
  }

/* Byte to transmit ? */
  if (sr1 & I2C_SR1_TXE)
  {
  I2C->DR = I2C_byte_write();
  }

GPIOD->ODR^=1;
}
还有上面的 接收/发送数据   ,那个更多的数据/接收 是怎么回事呢?不理解??本人菜鸟,刚接触,望各位大神多多指点,不吝赐教

}
沙发
234918154| | 2012-7-31 18:18 | 只看该作者
帮顶吧,STM8的资料太少了

使用特权

评论回复
板凳
skywhiteeagle|  楼主 | 2012-7-31 21:27 | 只看该作者
帮忙看看啊,大侠们

使用特权

评论回复
地板
nienianhong| | 2013-12-5 09:39 | 只看该作者

使用特权

评论回复
5
zeluo| | 2013-12-5 12:39 | 只看该作者
帮你顶一个   话说    这一块   确实资料比较少   需要费时间去寻找啊

使用特权

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

本版积分规则

0

主题

19

帖子

1

粉丝