IIC_Start()//准备进行IIC通信
IIC_Send_Byte(WriteGYAddress)//发送IIC的写数据的地址
IIC_Wait_Ack()//等待与STM32通信的从设备的应答
IIC_Send_Byte(0x00)//发送00到上面的地址WriteGYAddress
IIC_Wait_Ack()//等待与STM32通信的从设备的应答
IIC_Send_Byte(0x31)
IIC_Wait_Ack()
IIC_Stop()//启哗结束IIC通信
delay_us(30)//延时,准备下一次 *** 作
加油!
我觉得还好吧,加点针对性的的代码就可以了1.比如为了防止错过Ack信号的读取,可以加入循环弯此发送并读Ack的步骤,也可以直接关中断,如果有资源用DMA最好了,收发数据以及标志位的相关处理和判断都自动处理。
2.还有就是调埋陵迅试过程中,如果断点设在等待Ack前,会清除Ack信号
ADDR: Address sent (master mode)/matched (slave mode)
This bit is cleared by software reading SR1 register followed reading SR2
Ack信号会在读SR1和SR2后被清除。调试器会读取SR1和SR2,所以设断点在等待Ack前会导致程序检测不到Ack信汪枝号
不用搞这个行皮了STM32的IIC通讯有个bug。因为ack信号时间很短暂橡段,一旦错过了这个短暂的ACK信号,档如差STM32就挂了。
想用IIC的话,就用软件模拟吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)