我在网上找了好多关于STM32硬件I2C的资料,都没有得到满意的答案,所以我把我使用STM32硬件I2C的经验写出来,希望能帮到正困于其中的朋友。
STM32的硬件I2C,我前前后后折腾了不下半个月,弄过F1的也弄过F4的,好在今天终于用32的硬件I2C将小屏幕用起来了。中途好几次想要放弃,也想过使用模拟I2C算了,之前就是使用的模拟I2C。但是32有这么好的硬件资源不用好浪费,而且模拟I2C要占用CPU的资源,心有不甘啊,还因为在网上看到有人说32的硬件I2C有缺陷,但是都没说具体缺陷是什么,我想整明白,不然前面花的时间那才都浪费了。
开始我是从杜洋工作室关于32视频教学中学习配置STM32的硬件I2C,因为他直接就是用硬件I2C驱动0.96OLED屏,但是,第一次看那视频内容有好多,我也没有他的开发板,没学透,自然也没弄出来。到了现在放暑假,有时间,就再来弄一下。这次我看的是野火的关于I2C的教学。(正点原子的I2C教学是用的模拟I2C)
现在我总结一下32硬件I2C的配置,I2C的初始化就两步(两个初始化函数,当然也可以合成一个,看自己的习惯)。
1、I2C的两个引脚配置。这里要注意引脚配置为开漏、复用,如果是F4还要使用GPIO_PinAFConfig函数来配置引脚复用。
说一个我再这里犯的一个错误,这个错误和后面的另一个错误让我浪费了太多的时间,说出来也希望遇到同样问题的朋友在配置一些基本的东西细心一些。错误如图,复用功能的引脚没有选对,给起始信号都发不出去(就一直卡在EV5)。
2、配置I2C。这里没有什么特别要注意的。
我在这里犯了第二个错误,这个错误是开启I2C时钟的函数用错了。应该是要用RCC_APB1PeriphClockCmd这个函数。所以我还一直在找硬件的问题,,,,。吸取教训。
硬件I2C的配置有这两步就够了。
3、编写I2C发送和接收数据函数,这个不难,最好看下视频,需要根据自己的I2C器件来写函数,图中发送一个字节给OLED的函数。
4、初始化OLED屏,这个OLED屏都带有这个初始化的步骤。如图。然后显示那些按照自带的程序资料里面写就行。
这些图片都是部分程序,相关文件我用附件上传。
最后是硬件I2C实现的图
注意,我用的是STM32F401CCU6,主频是84M(不过好像没好大关系)
oled.c
(5.94 KB, 下载次数: 424)
oledfont.h
(13.51 KB, 下载次数: 297)
oled.h
(1.15 KB, 下载次数: 325)
i2c.c
(1.38 KB, 下载次数: 378)
i2c.h
(1.67 KB, 下载次数: 366)
如果需要怎么工程,可以留下邮箱。
此内容由EEWORLD论坛网友七月秋原创,如需转载或用于商业用途需征得作者同意并注明出处