深圳万齐创享网站建设,重庆网站关键词排名优化,分析网站的外链,wordpress性能太差在用正点原子STM32F4开发板#xff0c;搭配对应的button历程时#xff0c;发现运行一会#xff0c;button都无法使用了#xff0c;以为是emwin死机了#xff0c;但是看到Led还在闪烁#xff0c;排除系统死机问题。那就是emwin的任务没有运行起来#xff0c;但是打断点后…在用正点原子STM32F4开发板搭配对应的button历程时发现运行一会button都无法使用了以为是emwin死机了但是看到Led还在闪烁排除系统死机问题。那就是emwin的任务没有运行起来但是打断点后仍然可以进入,说明任务也没问题。接着又添加了txt控件不停的更新显示。这才发现button不可以可能是触摸屏有问题。在出现问题时触摸屏那里读取的mode都是0和ff。正常的应该是0x80之类的。 所以基本判定是触摸驱动的问题。然后处理结果如下: 我发现GT9147_RD_Reg(GT_GSTID_REG,mode,1)没有触点时多次能读到0xFF当然还有别的异常值。用示波器跟踪发现STM32F407发送0x28GT9147竟然没有ACK。整个波形全是乱的。在CTIIC.C中优化了三个函数测试OK无触点或者数据没有准备oKGT9147_RD_Reg(GT_GSTID_REG,mode,1); mode0松手可以观察到3次mode0x80我不是太明白为何有3次有一个触点mode0x81多个mode0x8* 应该是从侧先ACK后有主侧SCL变高电平优化之 u8 CT_IIC_Wait_Ack(void) { u8 ucErrTime0; CT_SDA_IN(); //SDA设置为输入 CT_IIC_SCL0; delay_us(2); while(CT_READ_SDA) { ucErrTime; delay_us(2); if(ucErrTime250) { CT_IIC_Stop(); return 1; } } delay_us(2); CT_IIC_SCL1; delay_us(2); CT_IIC_SCL0; delay_us(3); return 0; } 增加SDA到SCL之间的延时解决发地址没有ACK问题 void CT_IIC_Send_Byte(u8 txd) { u8 t; CT_SDA_OUT(); CT_IIC_SCL0;//拉低时钟开始数据传输 CT_Delay(); for(t0;t8;t) { CT_IIC_SDA(txd0x80)7; txd1; delay_us(2);//pnhhit CT_IIC_SCL1; CT_Delay(); CT_IIC_SCL0; CT_Delay(); } } 读数据延时放大100us是我大致放大可以在细化 比如50us u8 CT_IIC_Read_Byte(unsigned char ack) { u8 i,receive0; CT_SDA_IN();//SDA设置为输入 //delay_us(30);//pnhhit 这个相对myiic.c文件是正点原子他们自己加的但是我测试还是不够长 delay_us(100); for(i0;i8;i ) { CT_IIC_SCL0; CT_Delay(); CT_IIC_SCL1; receive1; if(CT_READ_SDA)receive; delay_us(1);//pnhhit } if (!ack)CT_IIC_NAck();//发送nACK else CT_IIC_Ack(); //发送ACK return receive; } GPIO模拟I2C有点问题这里随便说说 1SDASCL最好设置成OD门否则当CPU驱动SDA为高IC应答ACK为低SDA信号上出现半高电平。 2不同的IC存放数据和准备数据的物理时间可能不同比如GT9147和TI流量计芯片QB27520就不同 3GPIO模拟时没有对SDA和SCL的状态裁决不管IC的状态强行控制是很简单粗暴的 哎正点原子的例程不能随意放到项目中用问题太多不稳定。