STM32F411CE调试I2C遇到的问题
2016-03-16 22:20
337 查看
初次调试I2C驱动,先整理一下思路:
本次调试是调试STM32F411CE与BMP280通信,首先根据ST提供的参考例程对I2C进行配置,然后给BMP280发数据,没想到这一调就是两天。。。
对此,总结思路:
1.当通信失败,而且不知道问题在哪,首先确认I2C能通信。
(1)确认I2C总线是否有波形输出,方法:用一个循环不断的对外发送数据,注意因为只发送一次可能导致抓不到波形。
(2)如果没有波形输出,查看GPIO的配置是否正确,比如GPIO的时钟有没使能,I2C时钟有没使能,还有特别要注意I2C的GPIO选择的alternate function的配置。
(3)如果GPIO脚的配置都没有问题,那么看一下GPIO的硬件功能是否有问题。
查看GPIO脚的硬件功能方法:把GPIO使能,对其进行拉高拉低,给个延时让其输出方波,并用示波器查看,如果有波形输出,说明GPIO的硬件功能基本上没什么问题了。
(4)GPIO脚的功能也没问题,那就只能看代码了,再检查一遍GPIO脚的配置吧,请上天保佑你看到你配错了,如果没配错那就跟一下代码看下I2C controler的寄存器根据datasheet确认一下是否正确配置了,加些打印判断一下代码卡在哪了是什么问题。。。上天保佑I2C总线能出波形吧。
(5)如果I2C总线用示波器看到有波形了,如果还是不能和slave通信,那检查一下slave的地址是否正确。
(6)如果slave地址也没问题,那看一下slave有没RESET脚,需要复位使能吗。。。如果根据datasheet复位使能还不行,那就是你的slave可能是坏的。
给所有的小白们,希望孩子们都好好学习,出来混总是要还的,我还是得快点还。。。白读了四年大学,连个I2C都不会整。
本次调试是调试STM32F411CE与BMP280通信,首先根据ST提供的参考例程对I2C进行配置,然后给BMP280发数据,没想到这一调就是两天。。。
对此,总结思路:
1.当通信失败,而且不知道问题在哪,首先确认I2C能通信。
(1)确认I2C总线是否有波形输出,方法:用一个循环不断的对外发送数据,注意因为只发送一次可能导致抓不到波形。
(2)如果没有波形输出,查看GPIO的配置是否正确,比如GPIO的时钟有没使能,I2C时钟有没使能,还有特别要注意I2C的GPIO选择的alternate function的配置。
(3)如果GPIO脚的配置都没有问题,那么看一下GPIO的硬件功能是否有问题。
查看GPIO脚的硬件功能方法:把GPIO使能,对其进行拉高拉低,给个延时让其输出方波,并用示波器查看,如果有波形输出,说明GPIO的硬件功能基本上没什么问题了。
(4)GPIO脚的功能也没问题,那就只能看代码了,再检查一遍GPIO脚的配置吧,请上天保佑你看到你配错了,如果没配错那就跟一下代码看下I2C controler的寄存器根据datasheet确认一下是否正确配置了,加些打印判断一下代码卡在哪了是什么问题。。。上天保佑I2C总线能出波形吧。
(5)如果I2C总线用示波器看到有波形了,如果还是不能和slave通信,那检查一下slave的地址是否正确。
(6)如果slave地址也没问题,那看一下slave有没RESET脚,需要复位使能吗。。。如果根据datasheet复位使能还不行,那就是你的slave可能是坏的。
给所有的小白们,希望孩子们都好好学习,出来混总是要还的,我还是得快点还。。。白读了四年大学,连个I2C都不会整。
相关文章推荐
- Ajax及传统Ajax详解
- shell中字符串操作函数
- 【运动控制】运动控制技术与机器视觉应用的感受
- 模式分类之贝叶斯决策入门
- 不可重复读和幻读
- spring笔记--事务管理之声明式事务
- Memcache引入Repcached组件做HA高可用方案
- Win10删除内置应用
- 我的Linux书架
- Hadoop 实例二 Join讲解1: 获取员工所在部门信息
- 毕业设计第二十九天
- Java 多线程(六)——进程间通信与线程间通信
- matlab conv2、filter2、imfilter的区别
- jQuery对表单表格的操作
- c++ assert() 使用方法
- TrueType TTC格式详解
- 目前流行的源程序版本管理和项目管理软件
- 根据文件名生成与日期相关的三天的文件
- Struts1的实现原理
- 浅谈如何管理测试团队