问题很奇怪,单独调试时候还正常。
添加了其他函数 LED KEY ADC ,有时候就不能读取数据了,注释一个就可以读取数据了。
引脚检查了,确认没有问题。
最不解的是,把其他函数内所有东西注释掉了,也不能运行, 必须在main 里面注释掉函数才可以。
但是还是能读取到 MPU6050 WHO_AM_I 也发送上来0x68 然后就死在 读取函数内了
2.jpg (174.04 KB, 下载次数: 0)
下载附件
内部已经注释掉
2019-3-21 10:13 上传
仿真看了下,是停留在读取MPU6050 函数内,程序如下:
- void I2C_EE_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)
- {
- /*!< While the bus is busy */
- while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
-
- /*!< Enable Acknowledgement to be ready for another reception */
- I2C_AcknowledgeConfig(I2C1, ENABLE);//产生应答信号
-
- /*!< Send START condition */
- I2C_GenerateSTART(I2C1, ENABLE);//发送起始信号
- /*!< Test on EV5 and clear it */
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//等待起始信号产生
-
- /*!< Send EEPROM address for write *///发送器件地地址,并清除SB标志位
- I2C_Send7bitAddress(I2C1,MPU6050_SLAVE_ADDRESS, I2C_Direction_Transmitter);
- /*!< Test on EV6 and clear it */
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待器件地址发送完成
-
- /*!< Send the EEPROM's internal address to read from: LSB of the address */
- I2C_SendData(I2C1, (u8)(ReadAddr));//发送存储地址
-
- /*!< Test on EV8 and clear it */
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待移位发送器发送完成
-
- /*!< Send STRAT condition a second time */
- I2C_GenerateSTART(I2C1, ENABLE); //重新发送起始信号
-
- /*!< Test on EV5 and clear it *///等待起始信号产生
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
-
- /*!< Send EEPROM address for read *///发送器件地地址,并清除SB标志位
- I2C_Send7bitAddress(I2C1, (u8)MPU6050_SLAVE_ADDRESS, I2C_Direction_Receiver);
- /*!< Test on EV6 and clear it *///等待器件地址发送完成
- while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
-
- /* While there is data to be read */
- while(NumByteToRead) //停留在这个死循环了
- {
- if(NumByteToRead == 1)
- {
- /* Disable Acknowledgement */
- I2C_AcknowledgeConfig(I2C1, DISABLE);
-
- /* Send STOP Condition */
- I2C_GenerateSTOP(I2C1, ENABLE);
- }
-
-
- // /*!< Test on EV7 and clear it */ //等待数据接收完成
- // while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
- //
- // *pBuffer = I2C_ReceiveData(I2C1);
- //
- // pBuffer++;
- //
- // NumByteToRead--;
-
- /* Test on EV7 and clear it */
- if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))
- {
- /* Read a byte from the EEPROM */
- *pBuffer = I2C_ReceiveData(I2C1);
- /* Point to the next location where the byte read will be saved */
- pBuffer++;
-
- /* Decrement the read bytes counter */
- NumByteToRead--;
- }
-
-
- }//end while(NumByteToRead)
-
- // /* Enable Acknowledgement to be ready for another reception */
- // I2C_AcknowledgeConfig(I2C1, ENABLE);
-
- }
复制代码
附件视频。
录制_2019_03_21_09_48_10_1.zip
(10.16 MB, 下载次数: 4)
2019-3-21 10:18 上传
点击文件名下载附件
对啊,但是我这也是没办法了,还好只是个小东西,不是航模,不是载人,死机开关一次再来。
一周热门 更多>