之前用模拟的i2c1口控制一个音频dac芯片,觉得效率低,突然想改成硬件i2c口的;找了个参考程序很快移植过来。本来以为很简单的东西,半天都没跑起来;在网上找了下,也有很多人遇到类似问题就直接改模拟控制了。还是不太甘心,很想了些办法测试,总是没反应;后来找了个简单的i2c程序单独跑,发现是可以的;逐项对比测试,最后发现只要启动fsmc时钟,i2c1就不动作了。
之后仔细看了下资料,ST勘误表里面原来已经列出来这个问题了;还给出了解决方案是可以remap到PB8、PB9口。我必须用fsmc口,那这个板子估计就只能模拟i2c了。还是画板的时候研究的不够细致呀。
耽误了半天时间按搞这个问题;在论坛也看到有人遇到i2c口发start没有反应的问题;如果启动了fsmc时钟,估计就是这个冲突了。
如果是没有意识到,这个问题就很难找,很多时候别人贴出来的程序只是i2c这一块的,所以如果只是比对i2c驱动本身是没办法发现的。
希望,能帮遇到类似问题的朋友节省点时间。 |