STM32 HAL I2C使用

    1、使用i2c的引脚要设置成开漏输出,以防止烧坏芯片。
    2、开漏输出可以将驱动器中的P-MOS失能,只有N-MOS工作。防止如果有两个i2c外设,一个要输出高电平,一个要输出低电平而形成短路状态。

1、驱动oled屏幕

1.1、配置

    对照原理图选择对应的i2c使能即可。在这里插入图片描述

1.2、驱动代码

    下载链接:驱动代码

1.3、应用代码

  OLED_Init();
  OLED_Clear();
  OLED_PrintString(0,0,"hello world!");

2、i2c读取mpu 6050寄存器

    我要读取mpu605的0x75寄存器,该值默认是0x68。mpu6050的7位外设地址是0x68。
    方式一:

  uint8_t val;
  uint8_t reg = 0x75;
  HAL_I2C_Master_Transmit(&hi2c1, 0x68<<1, &reg, 1, 100);
  HAL_I2C_Master_Receive(&hi2c1, 0x68<<1, &val, 1, 100);
  OLED_PrintHex(0, 4, val, 1);

    方式二:

  OLED_PrintString(0,0,"hello world");
  uint8_t val;
  HAL_I2C_Mem_Read(&hi2c1, 0x68<<1, 0x75, I2C_MEMADD_SIZE_8BIT, &val, 1,1000)OLED_PrintHex(0, 4, val, 1);

    HAL_I2C_Mem_Read是HAL_I2C_Master_Transmit和HAL_I2C_Master_Receive改进后的函数,本质没太大区别。效果如下:

在这里插入图片描述

3、中断方式

    我们只需要在上面函数后加上_IT后缀即可,比如:HAL_I2C_Mem_Read_IT

    在调用完后,i2c的读写操作就交给cpu执行,该函数会返回OK继续向下执行。需要等待中断读写完成后我们才能对数据进行操作。
读写完成时会调用CpltCallback回调函数。

/* MEM模式发送完成回调函数 */
void HAL_I2C_MemTxCpltCallback(I2C_HandleTypeDef *hi2c)
{
	if (hi2c == &hi2c1)
	{
		g_i2c1_tx_complete = 1;
	}
}

/* MEM模式接收完成回调函数 */
void HAL_I2C_MemRxCpltCallback(I2C_HandleTypeDef *hi2c)
{
	if (hi2c == &hi2c1)
	{
		g_i2c1_rx_complete = 1;
	}
}

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32 HAL I2C库是一种用于STM32微控制器的库集合,用于实现I2C总线通信协议。该库集成了STM32微控制器所有的I2C控制器寄存器,提供了更为简单易用的API接口,方便开发人员进行I2C总线通信开发。 STM32 HAL I2C库的主要特点包括以下几点: 1. 支持多种I2C模式:包括标准模式(100Kbps)、快速模式(400Kbps)和高速模式(1Mbps)等。 2. 支持多个I2C从机设备:可以连接多个从机设备,并分别进行读写操作。 3. 提供了简单易懂的API接口:开发人员可以使用简单的函数调用实现I2C总线设备的初始化、读写操作等。 4. 提供了中断和DMA两种数据传输方式:可以根据实际应用场景选择适合的数据传输方式。 5. 支持主机和从机模式切换:可以在运行过程中切换主机和从机模式。 总之,STM32 HAL I2C库是一种非常实用的工具,可以帮助开发人员快速方便地进行STM32微控制器的I2C总线通信开发。无论是在工业自动化、智能家居、医疗设备等领域,都有着广泛的应用。 ### 回答2: STM32 HAL I2C库是为STM32微控制器设计的一个硬件抽象层库,可以方便地实现I2C总线的读写操作。I2C(Inter-Integrated Circuit)总线是一种串行通信总线,常用于连接微控制器、传感器、模拟转换器等设备。在使用I2C通信时,我们需要设置一些参数,如设备地址、传输模式、传输速率等。STM32 HAL I2C库封装了这些设置,在使用前,只需要初始化相关参数即可。 在STM32 HAL I2C库中,我们可以使用一些常用的函数,如I2C_Init()、I2C_Mem_Write()、I2C_Mem_Read()等。其中,I2C_Init()函数用于初始化I2C总线,设置传输模式、速率等参数;I2C_Mem_Write()和I2C_Mem_Read()函数用于在指定的设备地址下,读写指定的寄存器。 此外,STM32 HAL I2C库还提供了一些高级函数,如I2C_Master_Transmit()、I2C_Master_Receive()、I2C_Slave_Transmit()、I2C_Slave_Receive()等,可以方便地实现主从模式的通信。 总之,STM32 HAL I2C库提供了方便快捷的API接口,简化了I2C总线操作过程,使得开发者可以更加专注于应用程序的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值