发新帖我要提问
123
返回列表
打印

STM32 I2C 问题

[复制链接]
楼主: shizaigaole
手机看帖
扫描二维码
随时随地手机跟帖
41
shizaigaole|  楼主 | 2010-7-15 17:01 | 只看该作者 回帖奖励 |倒序浏览
if (TxLength >0)
              {
                  I2C_SendData(I2C1, *pTxBuffer1++);      
                  TxLength--;
              }
              /* Disable the I2C_IT_BUF interrupt after sending the last buffer data
              (last EV8) to no allow a new interrupt with TxE and only BTF could generate it */
              else if(TxLength == 0)
              {
                I2C_ITConfig(I2C1,  I2C_IT_BUF, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);              }

和前面28楼处理差不多,只是你先关闭了中断,再stop
我试试看

使用特权

评论回复
42
shizaigaole|  楼主 | 2010-7-15 17:10 | 只看该作者
lut1lut 的程序:
      
  if (TxLength >0)
              {
                  I2C_SendData(I2C1, *pTxBuffer1++);      
                  TxLength--;
              }
              /* Disable the I2C_IT_BUF interrupt after sending the last buffer data
              (last EV8) to no allow a new interrupt with TxE and only BTF could generate it */
              else if(TxLength == 0)
              {
                I2C_ITConfig(I2C1,  I2C_IT_BUF, DISABLE);
                I2C_GenerateSTOP(I2C1, ENABLE);              }
              break;

本人的程序:
  case I2C_EVENT_MASTER_BYTE_TRANSMITTING:  /* Without BTF, EV8 */     
      if(i2cSendCount < i2cSendLen)
      {
        I2C_SendData(I2C1, i2cSendBuf[i2cSendCount++]);
      }
      else
      {      
        I2C_ITConfig(I2C1, I2C_IT_BUF, DISABLE);
        I2C_GenerateSTOP(I2C1, ENABLE);
      }
        
      break;

两者一样吧?
但是照样会产生多个0x70084,

但是吧I2C_GenerateSTOP(I2C1, ENABLE); 移动到0x70080中断事件中处理,
尽管有多个0x70084,
但是不需要等待
while(I2C_GetLastEvent(I2C1) == I2C_EVENT_MASTER_BYTE_TRANSMITTED);

程序也能正常工作。


只是不知其所以然

使用特权

评论回复
43
shizaigaole|  楼主 | 2010-7-15 17:14 | 只看该作者
既然有时候会有影响,为保险起见,
还是在I2C_EVENT_MASTER_BYTE_TRANSMITTED里面加:
while(I2C_GetLastEvent(I2C1) == I2C_EVENT_MASTER_BYTE_TRANSMITTED);

比较好

使用特权

评论回复
44
liulangmao| | 2013-4-16 22:51 | 只看该作者
楼主,能否把你初始化代码贴出,我在初始化的时候总是出现总线忙(busy位在开启I2C时钟时自己置位),而无法操作总线,分析可能是初始化的问题,。求楼主指教。

使用特权

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

本版积分规则