6 STM32标准库函数 之 内部集成电路(I2C) 所有函数的介绍及使用

6 STM32标准库函数 之 内部集成电路(I2C)所有函数的介绍及使用

  • 1. 图片有格式
  • 2 文字无格式
    • 六 库函数之内部集成电路(I2C)所有函数的介绍及使用
    • 前言
    • 一、图片预览,无格式(CSDN)
    • 二、 I2C库函数固件库函数预览
      • 2.1 函数I2C_DeInit
      • 2.2 函数I2C_ Init
      • 2.3 函数I2C_ StructInit
      • 2.4 函数I2C_ Cmd
      • 2.5 函数I2C_ DMACmd
      • 2.6 函数I2C_ DMALastTransferCmd
      • 2.7 函数I2C_ GenerateSTART
      • 2.8 函数I2C_ GenerateSTOP
      • 2.9 函数I2C_ AcknowledgeConfig
      • 2.10 函数I2C_ OwnAddress2Config
      • 2.11 函数I2C_ DualAddressCmd
      • 2.12 函数I2C_ GeneralCallCmd
      • 2.13 函数I2C_ ITConfig
      • 2.14 函数I2C_ SendData
      • 2.16 函数I2C_ Send7bitAddress
      • 2.17 函数I2C_ ReadRegister
      • 2.18 函数I2C_ SoftwareResetCmd
      • 2.19 函数I2C_ SMBusAlertConfig
      • 2.20 函数I2C_ TransmitPEC
      • 2.21 函数I2C_ PECPositionConfig
      • 2.22 函数I2C_ CalculatePEC
      • 2.23 函数I2C_ GetPEC
      • 2.24 函数I2C_ ARPCmd
      • 2.25 函数I2C_ StretchClockCmd
      • 2.26 函数I2C_ FastModeDutyCycleConfig
      • 2.27 函数I2C_ GetLastEvent
      • 2.28 函数 I2C_ CheckEvent
      • 2.29 函数I2C_ GetFlagStatus
      • 2.30 函数I2C_ ClearFlag
      • 2.31 函数I2C_ GetITStatus
      • 2.32 函数I2C_ ClearITPendingBit
  • 该文档修改记录:
  • 总结

函数描述格式:

函数名 外设函数的名称
函数原形 原形声明
功能描述 简要解释函数是如何执行的
输入参数{x} 输入参数描述
输出参数{x} 输出参数描述
返回值 函数的返回值
先决条件 调用函数前应满足的要求
被调用函数 其他被该函数调用的库函数

缩写定义

缩写 外设/单元
ADC 模数转换器
BKP 备份寄存器
CAN 控制器局域网模块
DMA 直接内存存取控制器
EXTI 外部中断事件控制器
FLASH 闪存存储器
GPIO 通用输入输出
I2C 内部集成电路
IWDG 独立看门狗
NVIC 嵌套中断向量列表控制器
PWR 电源/功耗控制
RCC 复位与时钟控制器
RTC 实时时钟
SPI 串行外设接口
SysTick 系统嘀嗒定时器
TIM 通用定时器
TIM1 高级控制定时器
USART 通用同步异步接收发射端
WWDG 窗口看门狗

1. 图片有格式

因为从OneNote复制到CSDN上只能是图片,粘贴不了文字,所以就显示图片,在该博客后半部分会补充上相关函数的文字。
如果只是学习了解函数可以看图片,图片有格式,比较友好;需要使用某个函数,可以去博客后半部分copy使用。

2 文字无格式

六 库函数之内部集成电路(I2C)所有函数的介绍及使用

前言

I2C 总线接口连接微控制器和串行 I2C 总线。它提供多主机功能,控制所有 I2C 总线特定的时序、协议、 仲裁和定时。支持标准和快速两种模式,同时与 SMBus 2.0 兼容。 I2C 总线有多种用途,包括 CRC 码的 生成和校验、SMBus(系统管理总线System Management Bus) PMBus(电源管理总线Power Management Bus)。

I2C 驱动可以用来通过 I2C 界面发送和接收数据,还可以返回传输操作的状态。
函数描述格式:
函数名 外设函数的名称
函数原形 原形声明
功能描述 简要解释函数是如何执行的
输入参数{x} 输入参数描述
输出参数{x} 输出参数描述
返回值 函数的返回值
先决条件 调用函数前应满足的要求
被调用函数 其他被该函数调用的库函数

一、图片预览,无格式(CSDN)

二、 I2C库函数固件库函数预览

函数名 描述
I2C_DeInit 将外设 I2Cx 寄存器重设为缺省值
I2C_Init 根据 I2C_InitStruct 中指定的参数初始化外设 I2Cx 寄存器
I2C_StructInit 把 I2C_InitStruct 中的每一个参数按缺省值填入
I2C_Cmd 使能或者失能 I2C 外设
I2C_DMACmd 使能或者失能指定 I2C 的 DMA 请求
I2C_DMALastTransferCmd 使下一次 DMA 传输为最后一次传输
I2C_GenerateSTART 产生 I2Cx 传输 START 条件
I2C_GenerateSTOP 产生 I2Cx 传输 STOP 条件
I2C_AcknowledgeConfig 使能或者失能指定 I2C 的应答功能
I2C_OwnAddress2Config 设置指定 I2C 的自身地址 2
I2C_DualAddressCmd 使能或者失能指定 I2C 的双地址模式
I2C_GeneralCallCmd 使能或者失能指定 I2C 的广播呼叫功能
I2C_ITConfig 使能或者失能指定的 I2C 中断
I2C_SendData 通过外设 I2Cx 发送一个数据
I2C_ReceiveData 返回通过 I2Cx 最近接收的数据
I2C_Send7bitAddress 向指定的从 I2C 设备传送地址字
I2C_ReadRegister 读取指定的 I2C 寄存器并返回其值
I2C_SoftwareResetCmd 使能或者失能指定 I2C 的软件复位
I2C_SMBusAlertConfig 驱动指定 I2Cx 的 SMBusAlert 管脚电平为高或低
I2C_TransmitPEC 使能或者失能指定 I2C 的 PEC 传输
I2C_PECPositionConfig 选择指定 I2C 的 PEC 位置
I2C_CalculatePEC 使能或者失能指定 I2C 的传输字 PEC 值计算
I2C_GetPEC 返回指定 I2C 的 PEC 值
I2C_ARPCmd 使能或者失能指定 I2C 的 ARP
I2C_StretchClockCmd 使能或者失能指定 I2C 的时钟延展
I2C_FastModeDutyCycleConfig 选择指定 I2C 的快速模式占空比
I2C_GetLastEvent 返回最近一次 I2C 事件
I2C_CheckEvent 检查最近一次 I2C 事件是否是输入的事件
I2C_GetFlagStatus 检查指定的 I2C 标志位设置与否
I2C_ClearFlag 清除 I2Cx 的待处理标志位
I2C_GetITStatus 检查指定的 I2C 中断发生与否
I2C_ClearITPendingBit 清除 I2Cx 的中断待处理位

2.1 函数I2C_DeInit

__
函数名 I2C_DeInit
函数原形 void I2C_DeInit(I2C_TypeDef* I2Cx)
功能描述 将外设 I2Cx 寄存器重设为缺省值
输入参数 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输出参数 无
返回值 无
先决条件 无
被调用函数 RCC_APB1PeriphClockCmd().
例:
/* Deinitialize I2C2 interface*/
I2C_DeInit(I2C2);

2.2 函数I2C_ Init

函数名 I2C_Init
函数原形 void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct)
功能描述 根据 I2C_InitStruct 中指定的参数初始化外设 I2Cx 寄存器
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_InitStruct:指向结构 I2C_InitTypeDef 的指针,包含了外设 GPIO 的配置信息 参阅 Section:I2C_InitTypeDef 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_InitTypeDef structure
typedef struct
{
u16 I2C_Mode;
u16 I2C_DutyCycle;
u16 I2C_OwnAddress1;
u16 I2C_Ack;
u16 I2C_AcknowledgedAddress;
u32 I2C_ClockSpeed;
} I2C_InitTypeDef;
I2C_Mode
I2C_Mode 用以设置 I2C 的模式。
_

I2C_Mode 描述
I2C_Mode_I2C 设置 I2C 为 I2C 模式
I2C_Mode_SMBusDevice 设置 I2C 为 SMBus 设备模式
I2C_Mode_SMBusHost 设置 I2C 为 SMBus 主控模式
I2C_DutyCycle
I2C_DutyCycle 用以设置 I2C 的占空比。

I2C_DutyCycle 描述
I2C_DutyCycle_ 16_9 I2C 快速模式 Tlow / Thigh = 16/9
I2C_DutyCycle_2 I2C 快速模式 Tlow / Thigh = 2
注意:该参数只有在 I2C 工作在快速模式(时钟工作频率高于 100KHz)下才有意义。

I2C_OwnAddress1
该参数用来设置第一个设备自身地址,它可以是一个 7 位地址或者一个 10 位地址。
I2C_AcknowledgedAddres 描述
I2C_AcknowledgeAddress_7bit 应答 7 位地址
I2C_AcknowledgeAddress_ 10bit 应答 10 位地址

I2C_Ack
I2C_Ack 使能或者失能应答(ACK),
I2C_Ack 描述
I2C_Ack_Enable 使能应答(ACK)
I2C_Ack_Disable 失能应答(ACK)
I2C_AcknowledgedAddress
I2C_AcknowledgedAddres 定义了应答 7 位地址还是 10 位地址。

I2C_ClockSpeed
该参数用来设置时钟频率,这个值不能高于 400KHz。
例:
/* Initialize the I2C1 according to the I2C_InitStructure members */
I2C_InitTypeDef I2C_InitStructure;
I2C_InitStructure.I2C_Mode = I2C_Mode_SMBusHost;
I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
I2C_InitStructure.I2C_OwnAddress1 = 0x03A2;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_AcknowledgedAddress =
I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_ClockSpeed = 200000;
I2C_Init(I2C1, &I2C_InitStructure);

2.3 函数I2C_ StructInit

__
函数名 I2C_StructInit
函数原形 void I2C_StructInit(I2C_InitTypeDef* I2C_InitStruct)
功能描述 把 I2C_InitStruct 中的每一个参数按缺省值填入
输入参数 I2C_InitStruct:指向结构 I2C_InitTypeDef 的指针,待初始化
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C InitStruct 默认值
_

成员 缺省值
I2C_Mode I2C_Mode_I2C
I2C_DutyCycle I2C_DutyCycle_2
I2C_OwnAddress1 0
I2C_Ack I2C_Ack_Disable
I2C_AcknowledgedAddres I2C_AcknowledgedAddress_7bit
I2C_ ClockSpeed 5000
例:
/* Initialize an I2C_InitTypeDef structure */
I2C_InitTypeDef I2C_InitStructure;
I2C_StructInit(&I2C_InitStructure);

2.4 函数I2C_ Cmd

函数名 I2C_ Cmd
函数原形 void I2C_Cmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能 I2C 外设
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: 外设 I2Cx 的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable I2C1 peripheral */
I2C_Cmd(I2C1, ENABLE);

2.5 函数I2C_ DMACmd

__
函数名 I2C_ DMACmd
函数原形 I2C_DMACmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的 DMA 请求
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx DMA 传输的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable I2C2 DMA transfer */
I2C_DMACmd(I2C2, ENABLE);

2.6 函数I2C_ DMALastTransferCmd

函数名 I2C_ DMALastTransferCmd
函数原形 I2C_DMALastTransferCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使下一次 DMA 传输为最后一次传输
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx DMA 最后一次传输的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Specify that the next I2C2 DMA transfer is the last one */
I2C_DMALastTransferCmd(I2C2, ENABLE);

2.7 函数I2C_ GenerateSTART

_

函数名 I2C_ GenerateSTART
函数原形 void I2C_GenerateSTART(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 产生 I2Cx 传输 START 条件
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx START 条件的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Generate a START condition on I2C1 */
I2C_GenerateSTART(I2C1, ENABLE);

2.8 函数I2C_ GenerateSTOP

函数名 I2C_ GenerateSTOP
函数原形 void I2C_GenerateSTOP(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 产生 I2Cx 传输 STOP 条件
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx STOP 条件的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Generate a STOP condition on I2C2 */
I2C_GenerateSTOP(I2C2, ENABLE);

2.9 函数I2C_ AcknowledgeConfig


函数名 I2C_ AcknowledgeConfig
函数原形 void I2C_AcknowledgeConfig(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的应答功能
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx 应答的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C1 Acknowledgement */
I2C_AcknowledgeConfig(I2C1, ENABLE);

2.10 函数I2C_ OwnAddress2Config

函数名 I2C_ OwnAddress2Config
函数原形 void I2C_OwnAddress2Config(I2C_TypeDef* I2Cx, u8 Address)
功能描述 设置指定 I2C 的自身地址 2
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 Address: 指定的 7 位 I2C 自身地址 2
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Set the I2C1 own address2 to 0x38 */
I2C_OwnAddress2Config(I2C1, 0x38);

2.11 函数I2C_ DualAddressCmd

函数名 I2C_ DualAddressCmd
函数原形 void I2C_DualAddressCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的双地址模式
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx 双地址模式的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C2 dual addressing mode*/
I2C_DualAdressCmd(I2C2, ENABLE);

2.12 函数I2C_ GeneralCallCmd

函数名 I2C_ GeneralCallCmd
函数原形 void I2C_GeneralCallCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的广播呼叫功能
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState: I2Cx 广播呼叫的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C1 general call feature */
I2C_GeneralCallCmd(I2C1, ENABLE);

2.13 函数I2C_ ITConfig


函数名 I2C_ITConfig
函数原形 void I2C_ITConfig(I2C_TypeDef* I2Cx, u16 I2C_IT, FunctionalState NewState)
功能描述 使能或者失能指定的 I2C 中断
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_IT:待使能或者失能的 I2C 中断源
参阅 Section:I2C_IT 查阅更多该参数允许取值范围
输入参数 3 NewState:I2Cx 中断的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_IT
输入参数 I2C_IT 使能或者失能 I2C 的中断。可以取下表的一个或者多个取值的组合作为该参数的值。
_

I2C_IT 描述
I2C_IT_BUF 缓存中断屏蔽
I2C_IT_EVT 事件中断屏蔽
I2C_IT_ERR 错误中断屏蔽
例:
/* Enable I2C2 event and buffer interrupts */
I2C_ITConfig(I2C2, I2C_IT_BUF | I2C_IT_EVT, ENABLE);

2.14 函数I2C_ SendData

函数名 I2C_ SendData
函数原形 void I2C_SendData(I2C_TypeDef* I2Cx, u8 Data)
功能描述 通过外设 I2Cx 发送一个数据
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 Data: 待发送的数据
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Transmit 0x5D byte on I2C2 /
I2C_SendData(I2C2, 0x5D);
2.15 函数I2C_ ReceiveData
函数名 I2C_ ReceiveData
函数原形 u8 I2C_ReceiveData(I2C_TypeDef
I2Cx)
功能描述 返回通过 I2Cx 最近接收的数据
输入参数 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输出参数 无
返回值 接收到的字
先决条件 无
被调用函数 无
例:
/* Read the received byte on I2C1 */
u8 ReceivedData;
ReceivedData = I2C_ReceiveData(I2C1);

2.16 函数I2C_ Send7bitAddress

函数名 I2C_ Send7bitAddress
函数原形 void I2C_Send7bitAddress(I2C_TypeDef* I2Cx, u8 Address, u8
I2C_Direction)
功能描述 向指定的从 I2C 设备传送地址字
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 Address: 待传输的从 I2C 地址
输入参数 3 I2C_Direction:设置指定的 I2C 设备工作为发射端还是接收端 参阅 Section:I2C_Direction 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_Direction
该参数设置 I2C 界面为发送端模式或者接收端模式
_

I2C_Direction 描述
I2C_Direction_Transmitter 选择发送方向
I2C_Direction_Receiver 选择接收方向
例:
/* Send, as transmitter, the Slave device address 0xA8 in 7-bit
addressing mode in I2C1 */
I2C_Send7bitAddress(I2C1, 0xA8, I2C_Direction_Transmitter);

2.17 函数I2C_ ReadRegister


函数名 I2C_ ReadRegister
函数原形 u16 I2C_ReadRegister(I2C_TypeDef* I2Cx, u8 I2C_Register)
功能描述 读取指定的 I2C 寄存器并返回其值
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_Register:待读取的 I2C 寄存器
参阅 Section:I2C_Register 查阅更多该参数允许取值范围
输出参数 无
返回值 被读取的寄存器值 1.
先决条件 无
被调用函数 无

  1. 读取寄存器可能会清除某些标志位
    I2C_Register
    给出了所有可以被函数 I2C_ ReadRegister 读取的寄存器列表

I2C_Register 描述
I2C_Register_CR1 选择读取寄存器 I2C_CR1
I2C_Register_CR2 选择读取寄存器 I2C_CR2
I2C_Register_OAR1 选择读取寄存器 I2C_OAR1
I2C_Register_OAR2 选择读取寄存器 I2C_OAR2
I2C_Register_DR 选择读取寄存器 I2C_DR
I2C_Register_SR1 选择读取寄存器 I2C_SR1
I2C_Register_SR2 选择读取寄存器 I2C_SR2
I2C_Register_CCR 选择读取寄存器 I2C_ CCR
I2C_Register_TRISE 选择读取寄存器 I2C_TRISE
例:
/* Return the I2C_CR1 register value of I2C2 peripheral */
u16 RegisterValue;
RegisterValue = I2C_ReadRegister(I2C2, I2C_Register_CR1);

2.18 函数I2C_ SoftwareResetCmd

函数名 I2C_ SoftwareResetCmd
函数原形 I2C_SoftwareResetCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的软件复位
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState:I2Cx 软件复位的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Put under reset the I2C1 peripheral */
I2C_SoftwareResetCmd(I2C1, ENABLE);

2.19 函数I2C_ SMBusAlertConfig

函数名 I2C_ SMBusAlertConfig
函数原形 void I2C_SMBusAlertConfig(I2C_TypeDef* I2Cx, u16 I2C_SMBusAlert)
功能描述 驱动指定 I2Cx 的 SMBusAlert 管脚电平为高或低
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_ SMBusAlert:SMBusAlert 管脚电平
参阅 Section:I2C_ SMBusAlert 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_SMBusAlert
I2C_ SMBusAlert 用以设置 SMBusAlert 管脚的有效电平。
__
I2C_ SMBusAlert 描述
I2C_SMBusAlert_Low 驱动 SMBusAlert 管脚电平为高
I2C_SMBusAlert_High 驱动 SMBusAlert 管脚电平为低
例:
/* Let the I2C2 SMBusAlert pin High */
I2C_SMBusAlertConfig(I2C2, I2C_SMBusAlert_High);

2.20 函数I2C_ TransmitPEC

__
函数名 I2C_ TransmitPEC
函数原形 I2C_TransmitPEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的 PEC 传输
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState:I2CxPEC 传输的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C1 PEC transfer */
I2C_TransmitPEC(I2C1, ENABLE);

2.21 函数I2C_ PECPositionConfig

函数名 I2C_ PECPositionConfig
函数原形 void I2C_PECPositionConfig(I2C_TypeDef* I2Cx, u16 I2C_PECPosition)
功能描述 选择指定 I2C 的 PEC 位置
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_ PECPosition:PEC 位置
参阅 Section:I2C_ PECPositiont 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_PECPosition
I2C_ PECPosition 用以设置 PEC 位置。
__
I2C_ PECPosition 描述
I2C_PECPosition_Next PEC 位提示下一字为 PEC
I2C_PECPosition_Current PEC 位提示当前字为 PEC
例:
/* Configure the PEC bit to indicvates that the next byte in shift
register is PEC for I2C2 */
I2C_PECPositionConfig(I2C2, I2C_PECPosition_Next);

2.22 函数I2C_ CalculatePEC

__
函数名 I2C_ CalculatePEC
函数原形 void I2C_CalculatePEC(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的传输字 PEC 值计算
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState:I2Cx 传输字 PEC 值计算的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the PEC calculation for the transfered bytes from I2C2 */
I2C_CalculatePEC(I2C2, ENABLE);

2.23 函数I2C_ GetPEC

函数名 I2C_ GetPEC
函数原形 u8 I2C_GetPEC(I2C_TypeDef* I2Cx)
功能描述 返回指定 I2C 的 PEC 值
输入参数 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输出参数 无
返回值 PEC 值
先决条件 无
被调用函数 无
例:
/* Returns the I2C2 PEC value */
u8 PECValue;
PECValue = I2C_GetPEC(I2C2);

2.24 函数I2C_ ARPCmd

函数名 I2C_ ARPCmd
函数原形 void I2C_ARPCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的 ARP
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState:I2Cx ARP 的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C1 ARP feature */
I2C_ARPCmd(I2C1, ENABLE);

2.25 函数I2C_ StretchClockCmd

函数名 I2C_ StretchClockCmd
函数原形 void I2C_StretchClockCmd(I2C_TypeDef* I2Cx, FunctionalState NewState)
功能描述 使能或者失能指定 I2C 的时钟延展
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 NewState:I2Cx 时钟延展的新状态
这个参数可以取: ENABLE 或者 DISABLE
输出参数 无
返回值 无
先决条件 无
被调用函数 无
例:
/* Enable the I2C2 clock stretching */
I2C_StretchClockCmd(I2C2, ENABLE);

2.26 函数I2C_ FastModeDutyCycleConfig


函数名 I2C_ FastModeDutyCycleConfig
函数原形 void I2C_FastModeDutyCycleConfig(I2C_TypeDef* I2Cx, u16 I2C_DutyCycle)
功能描述 选择指定 I2C 的快速模式占空比
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_DutyCycle:快速模式占空比
参阅 Section:I2C_DutyCycle 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_DutyCycle
I2C_DutyCycle 用以设置 I2C 快速模式的占空比。

I2C_DutyCycle 描述
I2C_DutyCycle_ 16_9 I2C 快速模式 Tlow / Thigh = 16/9
I2C_DutyCycle_2 I2C 快速模式 Tlow / Thigh = 2
例:
/* Set the fast mode duty cyle to 16/9 for I2C2 */
I2C_FastModeDutyCycleConfig(I2C2, I2C_DutyCycle_16_9);

2.27 函数I2C_ GetLastEvent

函数名 I2C_ GetLastEvent
函数原形 u32 I2C_GetLastEvent(I2C_TypeDef* I2Cx)
功能描述 返回最近一次 I2C 事件
输入参数 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输出参数 无
返回值 最近一次 I2C 事件
先决条件 无
被调用函数 无
例:
/* Get last I2C1 event */
u32 Event;
Event = I2C_GetLastEvent(I2C1);

2.28 函数 I2C_ CheckEvent

函数名 I2C_ CheckEvent
函数原形 ErrorStatus I2C_CheckEvent(I2C_TypeDef* I2Cx, u32 I2C_EVENT)
功能描述 检查最近一次 I2C 事件是否是输入的事件
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 3 I2C_Event:待检查的事件
参阅 Section:I2C_Event 查阅更多该参数允许取值范围
输出参数 无
返回值 ErrorStatus 枚举值:
SUCCESS:最近一次 I2C 事件是 I2C_Event
ERROR:最近一次 I2C 事件不是 I2C_Event
先决条件 无
被调用函数 无
I2C_Event
列举了所有可以被函数 I2C_ CheckEvent 检查的事件。
_

I2C_Event 描述
I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED EV1
I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED EV1
I2C_EVENT_SLAVE_RECEIVER_SECONDADDRESS_MATCHED EV1
I2C_EVENT_SLAVE_TRANSMITTER_SECONDADDRESS_MATCHED EV1
I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED EV1
I2C_EVENT_SLAVE_BYTE_RECEIVED EV2
I2C_EVENT_SLAVE_BYTE_TRANSMITTED EV3
I2C_EVENT_SLAVE_ACK_FAILURE EV3-1
I2C_EVENT_SLAVE_STOP_DETECTED EV4
I2C_EVENT_MASTER_MODE_SELECT EV5
I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED EV6
I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED EV6
I2C_EVENT_MASTER_BYTE_RECEIVED EV7
I2C_EVENT_MASTER_BYTE_TRANSMITTED EV8
I2C_EVENT_MASTER_MODE_ADDRESS10 EV9
例:
/* Check if the event happen on I2C1 is equal to
I2C_EVENT_MASTER_BYTE_RECEIVED */
ErrorStatus Status;
Status = I2C_CheckEvent(I2C1, I2C_EVENT_MSTER_BYTE_RECEIVED);

2.29 函数I2C_ GetFlagStatus


函数名 I2C_ GetFlagStatus
函数原形 FlagStatus I2C_GetFlagStatus(I2C_TypeDef* I2Cx, u32 I2C_FLAG)
功能描述 检查指定的 I2C 标志位设置与否
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_FLAG:待检查的 I2C 标志位
参阅 Section:I2C_FLAG 查阅更多该参数允许取值范围
输出参数 无
返回值 I2C_FLAG 的新状态 1.
先决条件 无
被调用函数 无

  1. 读取寄存器可能会清除某些标志位
    I2C_FLAG
    给出了所有可以被函数 I2C_ GetFlagStatus 检查的标志位列表
    _

I2C_FLAG 描述
I2C_FLAG_DUALF 双标志位(从模式)
I2C_FLAG_SMBHOST SMBus 主报头(从模式)
I2C_FLAG_SMBDEFAULT SMBus 缺省报头(从模式)
I2C_FLAG_GENCALL 广播报头标志位(从模式)
I2C_FLAG_TRA 发送/接收标志位
I2C_FLAG_BUSY 总线忙标志位
I2C_FLAG_MSL 主/从标志位
I2C_FLAG_SMBALERT SMBus 报警标志位
I2C_FLAG_TIMEOUT 超时或者 Tlow 错误标志位
I2C_FLAG_PECERR 接收 PEC 错误标志位
I2C_FLAG_OVR 溢出/不足标志位(从模式)
I2C_FLAG_AF 应答错误标志位
I2C_FLAG_ARLO 仲裁丢失标志位(主模式)
I2C_FLAG_BERR 总线错误标志位
I2C_FLAG_TXE 数据寄存器空标志位(发送端)
I2C_FLAG_RXNE 数据寄存器非空标志位(接收端)
I2C_FLAG_STOPF 停止探测标志位(从模式)
I2C_FLAG_ADD10 10 位报头发送(主模式)
I2C_FLAG_BTF 字传输完成标志位
I2C_FLAG_ADDR 地址发送标志位(主模式) “ADSL”
地址匹配标志位(从模式) “ENDAD”
I2C_FLAG_SB 起始位标志位(主模式)
注意:只有位[27:0]被函数 I2C_ GetFlagStatus 用来返回指定的标志位状态。值对应经计算的寄存器中的
标志位位置,该寄存器包含 2 个 I2C 状态寄存器 I2C_SR1 和 I2C_SR2。
例:
/* Return the I2C_FLAG_AF flag state of I2C2 peripheral */
Flagstatus Status;
Status = I2C_GetFlagStatus(I2C2, I2C_FLAG_AF);

2.30 函数I2C_ ClearFlag


函数名 I2C_ ClearFlag
函数原形 void I2C_ClearFlag(I2C_TypeDef* I2Cx, u32 I2C_FLAG)
功能描述 清除 I2Cx 的待处理标志位
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_FLAG:待清除的 I2C 标志位
参阅 Section:I2C_FLAG 查阅更多该参数允许取值范围
注意:标志位 DUALF, SMBHOST, SMBDEFAULT, GENCALL, TRA, BUSY,MSL, TXE 和 RXNE 不能被本函数清除
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_FLAG
给出了所有可以被函数 I2C_ ClearFlag 清除的标志位列表。
_

I2C_FLAG 描述
I2C_FLAG_SMBALERT SMBus 报警标志位
I2C_FLAG_TIMEOUT 超时或者 Tlow 错误标志位
I2C_FLAG_PECERR 接收 PEC 错误标志位
I2C_FLAG_OVR 溢出/不足标志位(从模式)
I2C_FLAG_AF 应答错误标志位
I2C_FLAG_ARLO 仲裁丢失标志位(主模式)
I2C_FLAG_BERR 总线错误标志位
I2C_FLAG_STOPF 停止探测标志位(从模式)
I2C_FLAG_ADD10 10 位报头发送(主模式)
I2C_FLAG_BTF 字传输完成标志位
I2C_FLAG_ADDR 地址发送标志位(主模式) “ADSL”
地址匹配标志位(从模式) “ENDAD”
I2C_FLAG_SB 起始位标志位(主模式)
例:
/* Clear the Stop detection flag on I2C2 */
I2C_ClearFlag(I2C2, I2C_FLAG_STOPF);

2.31 函数I2C_ GetITStatus

函数名 I2C_ GetITStatus
函数原形 ITStatus I2C_GetITStatus(I2C_TypeDef* I2Cx, u32 I2C_IT)
功能描述 检查指定的 I2C 中断发生与否
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_IT:待检查的 I2C 中断源
参阅 Section:I2C_IT 查阅更多该参数允许取值范围
输出参数 无
返回值 I2C_IT 的新状态(SET 或者 RESET)1.
先决条件 无
被调用函数 无

  1. 读取寄存器可能会清除某些标志位
    I2C_IT
    给出了所有可以被函数 I2C_ GetITStatus 检查的中断标志位列表
    _

I2C_IT 描述
I2C_IT_SMBALERT SMBus 报警标志位
I2C_IT_TIMEOUT 超时或者 Tlow 错误标志位
I2C_IT_PECERR 接收 PEC 错误标志位
I2C_IT_OVR 溢出/不足标志位(从模式)
I2C_IT_AF 应答错误标志位
I2C_IT_ARLO 仲裁丢失标志位(主模式)
I2C_IT_BERR 总线错误标志位
I2C_IT_STOPF 停止探测标志位(从模式)
I2C_IT_ADD10 10 位报头发送(主模式)
I2C_IT_BTF 字传输完成标志位
I2C_IT_ADDR 地址发送标志位(主模式) “ADSL”
地址匹配标志位(从模式) “ENDAD”
I2C_IT_SB 起始位标志位(主模式)
例:
/* Return the I2C_IT_OVR flag state of I2C1 peripheral */
ITstatus Status;
Status = I2C_GetITStatus(I2C1, I2C_IT_OVR);

2.32 函数I2C_ ClearITPendingBit

函数名 I2C_ ClearITPendingBit
函数原形 void I2C_ClearITPendingBit(I2C_TypeDef* I2Cx, u32 I2C_IT)
功能描述 清除 I2Cx 的中断待处理位
输入参数 1 I2Cx:x 可以是 1 或者 2,来选择 I2C 外设
输入参数 2 I2C_IT:待检查的 I2C 中断源
参阅 Section:I2C_IT 查阅更多该参数允许取值范围
输出参数 无
返回值 无
先决条件 无
被调用函数 无
I2C_IT
给出了所有可以被函数 I2C_ ClearITPendingBit 清除的中断待处理位列表
_

I2C_IT 描述
I2C_IT_SMBALERT SMBus 报警标志位
I2C_IT_TIMEOUT 超时或者 Tlow 错误标志位
I2C_IT_PECERR 接收 PEC 错误标志位
I2C_IT_OVR 溢出/不足标志位(从模式)
I2C_IT_AF 应答错误标志位
I2C_IT_ARLO 仲裁丢失标志位(主模式)
I2C_IT_BERR 总线错误标志位
I2C_IT_STOPF 停止探测标志位(从模式)
I2C_IT_ADD10 10 位报头发送(主模式)
I2C_IT_BTF 字传输完成标志位
I2C_IT_ADDR 地址发送标志位(主模式) “ADSL”
地址匹配标志位(从模式) “ENDAD”
I2C_IT_SB 起始位标志位(主模式)
例:
/* Clear the Timeout interrupt opending bit on I2C2 */
I2C_ClearITPendingBit(I2C2, I2C_IT_TIMEOUT);

该文档修改记录:

修改时间 修改说明
2023年8月20日 第一次发布,介绍了STM32内部集成电路(I2C)所有函数的介绍及使用

总结

以上就是3 STM32标准库函数 之 内部集成电路(I2C)所有函数的介绍及使用的内容,本文介绍了 内部集成电路(I2C)所有函数的介绍及使用所有函数的简单使用。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

你可能感兴趣的:(介绍STM32标准库函数,stm32,单片机,嵌入式硬件)