总的来说,I2C_HandleTypeDef结构体的设计体现了面向对象编程的许多优点,如封装、抽象、灵活性和可扩展性,这些都有助于简化I2C通信的开发过程,并提高代码的质量和可维护性。 三 封装、抽象、灵活性和可扩展性 这个结构体的设计确实体现了面向对象编程(OOP)的多个核心概念,包括封装、抽象、灵活性和可扩展性。下面是对...
结构体I2C_HandleTypeDef的定义如下图所示 接下来我们看该函数是如何实现功能的: 首先定义了一个32位的变量tickstart,将目前时钟计数的值赋给它,HAL_GetTick()函数实现了取当前时钟计数的功能,我们看它的源代码 HAL_GetTick()函数位于stm32f1xx_hal.c文件中,可以看到HAL_GetTick()函数就完成了一个功能返回uwTick,...
结构体I2C_HandleTypeDef的定义如下图所示 接下来我们看该函数是如何实现功能的: 首先定义了一个32位的变量tickstart,将目前时钟计数的值赋给它,HAL_GetTick()函数实现了取当前时钟计数的功能,我们看它的源代码 HAL_GetTick()函数位于stm32f1xx_hal.c文件中,可以看到HAL_GetTick()函数就完成了一个功能返回uwTick,...
如果使用双地址模式,那么还需要配置I2C_OAR2寄存器,OA2 [7:1]位的值就是STM32作为从机时的地址2,即以上结构体中OwnAddress2的值。如果STM32作为主机,以上OwnAddress1和OwnAddress2可以不配置,但要确定其值不能和从设备的地址相同。关于这些注意事项我们前面都有介绍。 2. I2C_HandleTypeDef I2C_HandleTypeDef句柄...
1、初始化填充I2C结构体 2、初始化I2C引脚,配置成内部开漏。 3、使能I2C时钟。 4、初始化I2C的DMA,关联DMA。 5、使能DMA时钟,初始化及使能中断。 看一下HAL库的I2C驱动stm32f4xx_hal_i2c.c,如何教我们使用I2C的。 看到图上的初始化流程: #)声明一个I2C_HandleTypeDef句柄结构,例如: ...
hi2c: 指向I2C_HandleTypeDef结构体的指针,该结构体包含指定I2C的配置信息。 一个使用案例: 如果已经初始化完成hi2c结构,初始化时,直接调用该结构体即可。 2.2 写数据函数 函数原型: HAL_StatusTypeDef HAL_I2C_Mem_Write( I2C_HandleTypeDef *hi2c, uint16_t DevAddress, ...
其中I2C_HandleTypeDef 是ST系列自定义的结构体定义,可参考ST驱动源码。 由于STM32L4的驱动函数和hal层定义的接口并非完全一致,我们需要在STM32L4驱动上封装一层,以对接hal层。 我们需要新建两个文件hal_i2c_stm32l4.c和hal_i2c_stm32l4.h,将封装层代码放到这两个文件中。
1.声明I2C的初始化结构体I2C_HandleTypeDef,并赋值 2.调用HAL_I2C_MspInit函数 3.配置好相就应的通信速度,地址模式等参数 4.如果使中断或者DMA时也在初始化参数中配置好 官方提供的方式 HAL的I2C库,官方提供了很多API,大简化我们使用I2C的功能。事实上对于具体硬件I2C的操作,需要对寄存器有一定的了解,并且操作流程...
形参1:是 UART_HandleTypeDef 结构体类型指针变量 形参2:是指向接收数据缓冲区 形参3:是要接收的数据大小,以字节为单位,此函数执行完后将清除中断,需要再次调用以重新开启中断。 串口中断回调函数: HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数 ...
通过配置I2C_HandleTypeDef结构体中的成员变量来设置I2C的通信参数,然后调用HAL_I2C_Init函数进行初始化。 验证I2C初始化是否成功: 初始化完成后,可以通过发送和接收测试信号来验证I2C通信是否正常。 例如,可以向一个已知的I2C设备发送数据并读取响应,以确认通信链路是否畅通。 请注意,以上代码是基于STM32 HAL库的示例...