我想从触摸屏上阅读触摸活动。如果我触摸,我想引导眨眼。我在下面的代码中定义了一些但通常我想用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
答案 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)。而且我的代码成功运作。