关于STM32的HAL库硬件I2C简单调试

STM32的硬件I2C在大家眼里一直都是做的非常不好的。因此,很多人都会说这个东西做的有问题,在STM32单片机上面,大家一般只会使用软件i2c进行调试不过hal库的提出,不仅方便了大家对于STM32单片机的使用,而且让大家可以在相同的时间里面开发更多的东西。

出于项目的需要以及自己的兴趣。我还是简单调试了一下STM32的硬件I2C功能。因为网上的帖子也不一定能够快速解决我的问题。于是我采取的是从STM32官方的CubeMX的文件着手。我下载的有F1、F0、F7的CubeMX库文件,库文件里面不仅是hal库函数,还有关于STM32的评估板的例程介绍。评估板的例程是肯定不会错的。

评估板的程序实现是采用轮训(Polling)、DMA、中断三种方式,配合按键和串口进行的简单的两块评估板的I2C通信过程。将数据从一块板子传递到另外一块板子,并且将数据通过串口“打印”出来。使用CubeMX生成的硬件i2c代码并不能直接进行使用,是因为时钟配置错误。需要在hal_i2c_msp_init()函数中进行修改程序。

**正确的代码顺序评估板的代码中已经给出,是先初始化GPIO端口的时钟、再初始化i2c的时钟,再初始化DMA时钟(如果需要使用DMA功能的话),然后再是引脚的初始化过程等**

我结合自己使用的SHT20温湿度传感器和SSD1306屏幕进行的调试。

SSD1306的操作过程比较简单,只需要单片机通过i2c总线,不断的向SSD1306屏幕发送指令即可,SSD1306屏幕只会给出应答信号。

SHT20温湿度传感器操作稍微复杂,需要先发读命令+寄存器,再发送地址写命令,并且SHT20返回相应寄存器的数据,用于接下来的换算工作。

对于简单的器件而言,只需要把数据周期设置成相应周期,便可以正常工作,关于STM32的I2C的其他结构体变量,由于时间关系,暂时没做深入研究。


**所以,官方评估板的代码其实是最好的参考。**





你可能感兴趣的:(关于STM32的HAL库硬件I2C简单调试)