打印
[MCU]

学习MSP430FR5969代码运行中遇到的问题已解决,先分享一下!

[复制链接]
362|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2020-10-23 16:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码运行中遇到了一点问题,调了两天才算大体解决,在这里和大家分享一下。
1月份开始学习I2C,手边的板子是MSP430FR5969lachpad。TI提供的是中断方式的I2C,不过一向觉得查询方式的用起来更容易理解一些,所以就开始参考各方资料。不知道为什么大家都喜欢用软件模拟的方式,不过我还是喜欢用硬件提供的I2C,感觉这样正式一点。找到的比较准确的代码就是楼主分享的代码(>> [TI首届低功耗设计大赛]+FR5969硬件IIC驱动MPL3115气压传感器),就此借鉴了一下。可惜的是还是遇到了一些问题,曾经一度想要放弃,不过幸好**了下来,终于找到了问题所在。为了感谢楼主的分享,也把自己的问题写出来,希望提供借鉴。
问题出在这段代码:
while(!(UCB0IFG & UCTXIFG))  // 等待UCTXIFG=1 与UCTXSTT=0 同时变化 等待一个标志位即可
  {
    if( UCB0IFG & UCNACKIFG )  // 若无应答 UCNACKIFG=1
    {
      return 1;                //发送失败
    }
  }   

我在写代码的时候觉得有无应答的判断并不重要,MSP430应该会自动进行有无ACK的判断,如果没有应答软件应该无法运行下去。所以将这一段省略为:
while(!(UCB0IFG & UCTXIFG)); //而且IAR 提供的库函数中也是这样写的,所以就没有多想。
当然结果肯定是不正常的,虽然软件能够正常运行,但是读出的数据总是0xFF。实际上数据既没有写进去,也没有读出来。
最后的分析是:在发送一个字节后一定要做一下判断if(UCB0IFG & UCNACKIFG),这样才能保证代码的正确运行。

使用特权

评论回复

相关帖子

沙发
dirtwillfly| | 2020-10-23 22:21 | 只看该作者
恭喜楼主跳出一个坑

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2035

主题

7339

帖子

10

粉丝