I2c通讯stm32f3怎么解决?

时间:2018-05-03 08:08:46

标签: stm32 i2c

我想从触摸屏上阅读触摸活动。如果我触摸,我想引导眨眼。我在下面的代码中定义了一些但通常我想用i2c

获取我的活动

一些定义:

api.showUncaughtError()

这是我的设置

api.onUnhandledError()

这是我的中断

    uint8_t deviceaddr;
static uint32_t touch_i2c_read(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t *pBuffer, uint16_t len);
static const int I2C_TIMEOUT = 65536;
unsigned char i2c_buffer[256];
uint32_t res;

This is my i2c read code:

    static uint32_t touch_i2c_read(uint8_t DeviceAddr, uint8_t RegAddr, uint8_t *pBuffer, uint16_t len)
{ //uint8_t deviceaddr ,0x00,(uint8_t *)&buf, sizeof(buf)

  uint32_t timeout = I2C_TIMEOUT;
  while (I2C_GetFlagStatus(I2C1, I2C_ISR_BUSY) != RESET)
  {
    if ((timeout--) == 0)
      return 0;
  }
  I2C_TransferHandling(I2C1, DeviceAddr << 1, 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);

  /* !!! Wait until TXIS flag is set !!! */
  timeout = I2C_TIMEOUT;
  while (I2C_GetFlagStatus(I2C1, I2C_ISR_TXIS) == RESET)
  {
    if ((timeout--) == 0)
      return 0;
  }
}

但我的代码无效。 Stm32不了解触摸活动我该如何解决这个问题。

编辑我在每次外部中断时更改第1行但我有res值0如何解决这个问题它必须是不同的0

2 个答案:

答案 0 :(得分:0)

在中断中使用while()循环会导致问题,因为控制器永远不会退出循环。尝试在main()中使用你的i2c读取函数(换句话说,一个非中断上下文)并查看它是否在那里工作。

答案 1 :(得分:0)

我解决了这个错误。 我没有任何信号pb7和pb6所以我改变了代码如下:

    // enable APB1 peripheral clock for I2C1
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
  // enable clock for SCL and SDA pins
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

然后,

FT6236的设备地址正在消失。它不包括在数据表中所以我用过调试。我发现设备地址是(0x32)。而且我的代码成功运作。