搜索
bottom↓
回复: 7

STM8L051 MPU6050 读取不了数据,注释一个函数就可以

[复制链接]

出0入0汤圆

发表于 2019-3-21 10:19:10 | 显示全部楼层 |阅读模式

问题很奇怪,单独调试时候还正常。

添加了其他函数  LED  KEY   ADC ,有时候就不能读取数据了,注释一个就可以读取数据了。

引脚检查了,确认没有问题。

最不解的是,把其他函数内所有东西注释掉了,也不能运行, 必须在main 里面注释掉函数才可以。

但是还是能读取到  MPU6050  WHO_AM_I   也发送上来0x68  然后就死在 读取函数内了










仿真看了下,是停留在读取MPU6050 函数内,程序如下:


  1. void I2C_EE_BufferRead(u8* pBuffer, u8 ReadAddr, u16 NumByteToRead)
  2. {  
  3.   /*!< While the bus is busy */
  4.   while (I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
  5.   
  6.   /*!< Enable Acknowledgement to be ready for another reception */
  7.   I2C_AcknowledgeConfig(I2C1, ENABLE);//产生应答信号        

  8.   /*!< Send START condition */
  9.   I2C_GenerateSTART(I2C1, ENABLE);//发送起始信号
  10.   /*!< Test on EV5 and clear it */
  11.   while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));//等待起始信号产生
  12.   
  13.   /*!< Send EEPROM address for write *///发送器件地地址,并清除SB标志位
  14.   I2C_Send7bitAddress(I2C1,MPU6050_SLAVE_ADDRESS, I2C_Direction_Transmitter);
  15.   /*!< Test on EV6 and clear it */
  16.   while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待器件地址发送完成

  17.   
  18.   /*!< Send the EEPROM's internal address to read from: LSB of the address */
  19.   I2C_SendData(I2C1, (u8)(ReadAddr));//发送存储地址
  20.   
  21.   /*!< Test on EV8 and clear it */
  22.   while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));//等待移位发送器发送完成

  23.   
  24.   /*!< Send STRAT condition a second time */
  25.   I2C_GenerateSTART(I2C1, ENABLE); //重新发送起始信号
  26.   
  27.   /*!< Test on EV5 and clear it *///等待起始信号产生
  28.   while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
  29.   

  30.    /*!< Send EEPROM address for read *///发送器件地地址,并清除SB标志位
  31.   I2C_Send7bitAddress(I2C1, (u8)MPU6050_SLAVE_ADDRESS, I2C_Direction_Receiver);

  32.   /*!< Test on EV6 and clear it *///等待器件地址发送完成
  33.   while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

  34.   
  35.   /* While there is data to be read */
  36.   while(NumByteToRead)                                                                                                                                                                  //停留在这个死循环了
  37.   {
  38.     if(NumByteToRead == 1)
  39.     {
  40.       /* Disable Acknowledgement */
  41.       I2C_AcknowledgeConfig(I2C1, DISABLE);
  42.       
  43.       /* Send STOP Condition */
  44.       I2C_GenerateSTOP(I2C1, ENABLE);
  45.     }
  46.    
  47.    
  48. //    /*!< Test on EV7 and clear it */ //等待数据接收完成
  49. //    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
  50. //
  51. //    *pBuffer = I2C_ReceiveData(I2C1);
  52. //   
  53. //    pBuffer++;
  54. //   
  55. //    NumByteToRead--;
  56.    

  57.     /* Test on EV7 and clear it */
  58.     if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))  
  59.     {      
  60.       /* Read a byte from the EEPROM */
  61.       *pBuffer = I2C_ReceiveData(I2C1);

  62.       /* Point to the next location where the byte read will be saved */
  63.       pBuffer++;
  64.       
  65.       /* Decrement the read bytes counter */
  66.       NumByteToRead--;     
  67.     }  
  68.    
  69.    

  70.   }//end while(NumByteToRead)

  71.    
  72. //  /* Enable Acknowledgement to be ready for another reception */
  73. //  I2C_AcknowledgeConfig(I2C1, ENABLE);
  74.   
  75. }
复制代码





附件视频。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2019-3-21 10:23:13 | 显示全部楼层
  6 133 bytes of readonly  code memory
    206 bytes of readonly  data memory
    287 bytes of readwrite data memory


程序空间占用

出0入0汤圆

 楼主| 发表于 2019-3-21 10:24:25 | 显示全部楼层
如果有STM8L051  MPU6050 完整的程序,可以发出来参考一下。   愿付费。

出0入0汤圆

发表于 2019-3-21 16:15:18 来自手机 | 显示全部楼层
楼主哪里?

出0入0汤圆

 楼主| 发表于 2019-3-25 16:38:08 | 显示全部楼层
把IAR 优化等级调了一下,测试正常了, 目前还没出现问题。

出0入0汤圆

发表于 2019-3-25 17:04:12 | 显示全部楼层
lyg407 发表于 2019-3-25 16:38
把IAR 优化等级调了一下,测试正常了, 目前还没出现问题。

   一般也只敢开低级优化 , 中级和高级从来不开。   就怕神马时候编译器给你自作主张 (也可能是我写的代码不规范吧)

出0入0汤圆

 楼主| 发表于 2019-3-26 10:32:44 | 显示全部楼层
huangyiting1990 发表于 2019-3-25 17:04
一般也只敢开低级优化 , 中级和高级从来不开。   就怕神马时候编译器给你自作主张  ...

对啊,但是我这也是没办法了,还好只是个小东西,不是航模,不是载人,死机开关一次再来。

出0入0汤圆

发表于 2019-3-26 11:20:22 | 显示全部楼层
lyg407 发表于 2019-3-26 10:32
对啊,但是我这也是没办法了,还好只是个小东西,不是航模,不是载人,死机开关一次再来。  ...

最近在啃  姿态解算 , 发现以前学的 高等数学   真的全还给老师了,现在完全不懂。什么  旋转矩阵 , 什么欧拉角 , 一阶二阶 完全不懂
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 17:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表