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

news2024/9/27 19:16:11

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)所有函数的介绍及使用所有函数的简单使用。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133347.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(链表) 25. K 个一组翻转链表 ——【Leetcode每日一题】

❓ 25. K 个一组翻转链表 难度:困难 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保…

Python-股票市场用于算法交易的人类反馈强化学习 (RLHF)

ChatGPT 的成功使人类反馈强化学习 (RLHF) 技术成为人们关注的焦点。RLHF 是一种机器学习方法,它结合了强化学习 (RL) 和人类反馈 (HF) 来改进学习过程。这篇文章将使您对 RLHF 有一个全面的了解。它描述了 RLHF 在算法交易(algo transactions)中的应用,并提供了可执行的 P…

TLSF内存管理算法原理详解

TLSF算法原理概述 TLSF算法的核心优势在于其通过位运算执行内存块匹配算法,并兼顾了内存管理的额外内存消耗,无论是从内存池申请内存块还是释放内存块回内存池其操作都是O(1)。TLSF组织了一张一二级索引表映射其所有管理内存块的闲忙状态,并通…

简单聊下Redis的主从复制和哨兵机制以及集群(面试题)

ChatGPT的简答: Redis的主从复制(Master-Slave Replication)是指将一个Redis服务器的数据复制到其他Redis服务器的过程,其中一个服务器作为主节点(Master),而其他服务器作为从节点(S…

基于SSM的居家养老系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

快速学习如何注册域名企业邮箱,只需5分钟

网站最重要的一个东西,就是你要有一个域名邮箱,显得你的邮箱更加专业,怎么样去申请一个域名邮箱,之前也出过一些内容给过大家,很多方法已经过时了,今天给大家更新一个最新版的,怎么样去申请一个…

【C++代码】安排行程,N皇后,解数独--代码随想录

题目:重新安排行程 给你一份航线列表 tickets ,其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从 JFK(肯尼迪国际机场)出发的先生,所以该行程必…

6、实现多段运动【51单片机控制步进电机-TB6600系列】

摘要:本节介绍用控制步进电机三个主要参数角度、速度、方向,实现简单的步进电机多段控制 一、目标功能 输入多个目标角度,以及每个角度对应的速度,实现步进电机的多段多速度转动 二、计算过程 2.1 简化C与n函数关系 根据上一节内…

Go基础——基础语法

1、简介 Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。语法类似于C,专为高性能和并发程序而设计。通常用于网络编程、云服务器、游戏服务器、DevOps、Web应用、分布式系统、容器虚…

[AutoSAR系列] 1.3 AutoSar 架构

依AutoSAR及经验辛苦整理,原创保护,禁止转载。 专栏 《深入浅出AutoSAR》 1. 整体架构 ​ 图片来源: AutoSar 官网 从官往图中可以看出autosar作为汽车ECU软件架构,是通过分层来实现软硬件隔离。就像大多数操作系统一样&#xff…

Linux系统编程_线程:线程、互斥量、条件变量

1. 线程概述(与进程的区别及线程的优势)(437.1) Linux多线程编程初探 https://www.cnblogs.com/xiehongfeng100/p/4620852.html 进程与线程 典型的 UNIX/Linux 进程可以看成只有一个控制线程:一个进程在同一时刻只做…

低概率Bug,研发敷衍说复现不到

测试工作中,经常会遇到一些低概率出现的问题,如果再是个严重问题,那测试人员的压力无疑是很大的,一方面是因为低概率难以复现,另一面则是来自项目组的压力。 如何在测试时减少此类问题的重复投入,我的思考如…

I/O设备的概念和分类,I/O控制器

文章目录 1.什么是I/O设备2.按使用特性分类1.人机交互类外部设备2.存储设备3.网络通信设备 3.按传输速率分类1.低速设备:2.中速设备:3.高速设备: 4.按信息交换的单位分类1.块设备:2.字符设备: 5.I/O设备的机械部件6.I/O设备的电子部件(I/O控制器)1.接收和…

Python实现双目标定、畸变矫正、立体矫正

一,双目标定、畸变矫正、立体矫正的作用 双目目标定: 3D重建和测距:通过双目目标定,您可以确定两个摄像头之间的相对位置和朝向,从而能够根据视差信息计算物体的深度,进行三维重建和测距。姿态估计&#xf…

【ROS入门】机器人系统仿真——相关组件以及URDF集成Rviz

文章结构 相关组件URDF(Unified Robot Description Format)——创建机器人模型Gazebo——搭建仿真环境Rviz(ROS Visualization Tool)——显示机器人各种传感器感知到的环境信息 URDF集成RvizURDF相关语法robotlinkjoint URDF优化——xacro相关语法属性与算数运算宏文件包含 实操…

GD32_定时器输入捕获波形频率

GD32_定时器输入捕获波形频率(多通道轮询) 之前项目上用到一个使用定时器捕获输入采集风扇波形频率得到风扇转速的模块,作为笔记简单记录以下当时的逻辑结构和遇到的问题,有需要参考源码、有疑问或需要提供帮助的可以留言告知 。…

怎么防止公司终端电脑文件资料、设计图纸外泄?

PC营销页: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 天锐绿盾防泄密软件主要通过以下几种方式来防止公司设计图纸泄露: 透明加密:天锐绿盾采用透明加密技术,对设计图纸进行加密。这种加密方…

护眼灯台灯哪个牌子好?五款公认最专业护眼台灯推荐

今天跟大家聊聊现在热门的灯具,护眼台灯。目前的护眼台灯市场水很深,有很多不符标准、不适宜学习用光的护眼台灯,以低价吸引大家,在市面上热销,甚至销量非常高。其实这类产品在照度、光衰弱等多项核心参数上根本没有进…

p11 第63题 请设计一个判断字母序列是否对称的算法 桂林电子科技大学015年 数据结构(c语言代码实现)

本题代码如下 int symmetry(linklist* L)//判断循环双链表是否对称 {lnode* p (*L)->next, * q (*L)->prior;while (p ! q && q->next ! p){if (p->data ! q->data)return 0;else{p p->next;q q->prior;}}return 1; } 完整测试代码 #inclu…

快速排序(c语言代码实现)

交换排序:快速排序(不稳定的排序) 快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整…