A22 STM32_HAL库函数 之 I2c通用驱动程序 -- C -- 所有函数的介绍及使用

1 该驱动函数预览

序号函数名描述
1HAL_I2C_Init()初始化I2C总线。
2HAL_I2C_DeInit()反初始化I2C总线。
3HAL_I2C_MspInit()初始化MCU外设相关的I2C引脚或资源。
4HAL_I2C_MspDeInit()反初始化MCU外设相关的I2C引脚或资源。
5HAL_I2C_Master_Transmit()主机发送数据到I2C设备。
6HAL_I2C_Master_Receive()主机从I2C设备接收数据。
7HAL_I2C_Slave_Transmit()从I2C设备发送数据到主机。
8HAL_I2C_Slave_Receive()从I2C设备接收主机发送的数据。
9HAL_I2C_Master_Transmit_IT()使用中断发送数据到I2C设备。
10HAL_I2C_Master_Receive_IT()使用中断从I2C设备接收数据。
11HAL_I2C_Master_Sequential_Transmit_IT()使用中断连续发送数据到I2C设备。
12HAL_I2C_Master_Sequential_Receive_IT()使用中断连续从I2C设备接收数据。
13HAL_I2C_Slave_Transmit_IT()使用中断从I2C设备发送数据到主机。
14HAL_I2C_Slave_Receive_IT()使用中断从I2C设备接收主机发送的数据。
15HAL_I2C_Slave_Sequential_Transmit_IT()使用中断连续从I2C设备发送数据到主机。
16HAL_I2C_Slave_Sequential_Receive_IT()使用中断连续从I2C设备接收主机发送的数据。
17HAL_I2C_EnableListen_IT()启用I2C设备的监听模式,并使用中断处理监听事件。
18HAL_I2C_DisableListen_IT()禁用I2C设备的监听模式。
19HAL_I2C_Master_Transmit_DMA()使用DMA发送数据到I2C设备。
20HAL_I2C_Master_Receive_DMA()使用DMA从I2C设备接收数据。
21HAL_I2C_Master_Abort_IT()使用中断终止I2C主机模式下的传输。
22HAL_I2C_Slave_Transmit_DMA()使用DMA从I2C设备发送数据到主机。
23HAL_I2C_Slave_Receive_DMA()使用DMA从I2C设备接收主机发送的数据。
24HAL_I2C_Mem_Write()写入I2C外设的存储器。
25HAL_I2C_Mem_Read()从I2C外设的存储器读取数据。
26HAL_I2C_Mem_Write_IT()使用中断写入I2C外设的存储器。
27HAL_I2C_Mem_Read_IT()使用中断从I2C外设的存储器读取数据。
28HAL_I2C_Mem_Write_DMA()使用DMA写入I2C外设的存储器。
29HAL_I2C_Mem_Read_DMA()使用DMA从I2C外设的存储器读取数据。
30HAL_I2C_IsDeviceReady()检测I2C设备是否准备好。
31HAL_I2C_EV_IRQHandler()I2C事件中断处理程序。
32HAL_I2C_ER_IRQHandler()I2C错误中断处理程序。
33HAL_I2C_MasterT

xCpltCallback() | I2C主机发送完成回调函数。 |
| 34 | HAL_I2C_MasterRxCpltCallback() | I2C主机接收完成回调函数。 |
| 35 | HAL_I2C_SlaveTxCpltCallback() | I2C从机发送完成回调函数。 |
| 36 | HAL_I2C_SlaveRxCpltCallback() | I2C从机接收完成回调函数。 |
| 37 | HAL_I2C_AddrCallback() | I2C地址匹配回调函数。 |
| 38 | HAL_I2C_ListenCpltCallback() | I2C监听模式完成回调函数。 |
| 39 | HAL_I2C_MemTxCpltCallback() | I2C存储器发送完成回调函数。 |
| 40 | HAL_I2C_MemRxCpltCallback() | I2C存储器接收完成回调函数。 |
| 41 | HAL_I2C_ErrorCallback() | I2C错误回调函数。 |
| 42 | HAL_I2C_AbortCpltCallback() | I2C终止完成回调函数。 |
| 43 | HAL_I2C_GetState() | 获取I2C总线的状态。 |
| 44 | HAL_I2C_GetMode() | 获取I2C总线的模式。 |
| 45 | HAL_I2C_GetError() | 获取I2C总线的错误状态。 |

以下是使用模板:

#include "stm32f4xx_hal.h"

int main(void) {
    // HAL初始化
    HAL_Init();
    
    // 初始化MCU外设相关的I2C引脚或资源
    HAL_I2C_MspInit();
    
    // 初始化I2C总线
    HAL_I2C_Init();
    
    // 进行其他操作...
    
    // 主机发送数据到I2C设备
    HAL_I2C_Master_Transmit();
    
    // 主机从I2C设备接收数据
    HAL_I2C_Master_Receive();
    
    // 从I2C设备发送数据到主机
    HAL_I2C_Slave_Transmit();
    
    // 从I2C设备接收主机发送的数据
    HAL_I2C_Slave_Receive();
    
    // 使用中断发送数据到I2C设备
    HAL_I2C_Master_Transmit_IT();
    
    // 使用中断从I2C设备接收数据
    HAL_I2C_Master_Receive_IT();
    
    // 使用DMA发送数据到I2C设备
    HAL_I2C_Master_Transmit_DMA();
    
    // 使用DMA从I2C设备接收数据
    HAL_I2C_Master_Receive_DMA();
    
    // I2C事件中断处理程序
    HAL_I2C_EV_IRQHandler();
    
    // I2C错误中断处理程序
    HAL_I2C_ER_IRQHandler();
    
    // 获取I2C总线的状态
    uint32_t i2cState = HAL_I2C_GetState();
    
    // 获取I2C总线的模式
    uint32_t i2cMode = HAL_I2C_GetMode();
    
    // 获取I2C总线的错误状态
    uint32_t i2cError = HAL_I2C_GetError();
    
    // 反初始化I2C总线
    HAL_I2C_DeInit();
    
    // 反初始化MCU外设相关的I2C引脚或资源
    HAL_I2C_MspDeInit();
    
    return 0;
}

1.23 HAL_I2C_Slave_Receive_DMA

函数名HAL_I2C_Slave_Receive_DMA
函数原形HAL_StatusTypeDef HAL_I2C_Slave_Receive_DMA(I2C_HandleTypeDef *hi2c, uint8_t *pData, uint16_t Size)
功能描述通过 DMA 从 I2C 主机接收数据
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2pData:指向存储接收数据的缓冲区
输入参数 3Size:要接收的数据长度
输出参数
返回值HAL_StatusTypeDef:接收状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.24 HAL_I2C_Mem_Write

函数名HAL_I2C_Mem_Write
函数原形HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout)
功能描述写入数据到 I2C 外设的指定存储器地址
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:从机地址
输入参数 3MemAddress:要写入的存储器地址
输入参数 4MemAddSize:存储器地址的大小
输入参数 5pData:指向要写入的数据缓冲区
输入参数 6Size:要写入的数据长度
输入参数 7Timeout:超时时间
输出参数
返回值HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.25 HAL_I2C_Mem_Read

| 函数名

| HAL_I2C_Mem_Read |
|---------------------------|------------------------------------------------------------|
| 函数原形 | HAL_StatusTypeDef HAL_I2C_Mem_Read(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size, uint32_t Timeout) |
| 功能描述 | 从 I2C 外设的指定存储器地址读取数据 |
| 输入参数 1 | hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体 |
| 输入参数 2 | DevAddress:从机地址 |
| 输入参数 3 | MemAddress:要读取的存储器地址 |
| 输入参数 4 | MemAddSize:存储器地址的大小 |
| 输入参数 5 | pData:指向存储接收数据的缓冲区 |
| 输入参数 6 | Size:要接收的数据长度 |
| 输入参数 7 | Timeout:超时时间 |
| 输出参数 | 无 |
| 返回值 | HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR |
| 先决条件 | 无 |
| 被调用函数 | 无 |


1.26 HAL_I2C_Mem_Write_IT

函数名HAL_I2C_Mem_Write_IT
函数原形HAL_StatusTypeDef HAL_I2C_Mem_Write_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
功能描述通过中断写入数据到 I2C 外设的指定存储器地址
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:从机地址
输入参数 3MemAddress:要写入的存储器地址
输入参数 4MemAddSize:存储器地址的大小
输入参数 5pData:指向要写入的数据缓冲区
输入参数 6Size:要写入的数据长度
输出参数
返回值HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.27 HAL_I2C_Mem_Read_IT

函数名HAL_I2C_Mem_Read_IT
函数原形HAL_StatusTypeDef HAL_I2C_Mem_Read_IT(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
功能描述通过中断从 I2C 外设的指定存储器地址读取数据
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:从机地址
输入参数 3MemAddress:要读取的存储器地址
输入参数 4MemAddSize:存储器地址的大小
输入参数 5pData:指向存储接收数据的缓冲区
输入参数 6Size:要接收的数据长度
输出参数
返回值HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.28 HAL_I2C_Mem_Write_DMA

函数名HAL_I2C_Mem_Write_DMA
函数原形HAL_StatusTypeDef HAL_I2C_Mem_Write_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
功能描述通过 DMA 写入数据到 I2C 外设的指定存储器地址
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:从机地址

|
| 输入参数 3 | MemAddress:要写入的存储器地址 |
| 输入参数 4 | MemAddSize:存储器地址的大小 |
| 输入参数 5 | pData:指向要写入的数据缓冲区 |
| 输入参数 6 | Size:要写入的数据长度 |
| 输出参数 | 无 |
| 返回值 | HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR |
| 先决条件 | 无 |
| 被调用函数 | 无 |


1.29 HAL_I2C_Mem_Read_DMA

函数名HAL_I2C_Mem_Read_DMA
函数原形HAL_StatusTypeDef HAL_I2C_Mem_Read_DMA(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t *pData, uint16_t Size)
功能描述通过 DMA 从 I2C 外设的指定存储器地址读取数据
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:从机地址
输入参数 3MemAddress:要读取的存储器地址
输入参数 4MemAddSize:存储器地址的大小
输入参数 5pData:指向存储接收数据的缓冲区
输入参数 6Size:要接收的数据长度
输出参数
返回值HAL_StatusTypeDef:操作状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.30 HAL_I2C_IsDeviceReady

函数名HAL_I2C_IsDeviceReady
函数原形HAL_StatusTypeDef HAL_I2C_IsDeviceReady(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint32_t Trials, uint32_t Timeout)
功能描述检测 I2C 设备是否就绪
输入参数 1hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输入参数 2DevAddress:设备地址
输入参数 3Trials:尝试次数
输入参数 4Timeout:超时时间
输出参数
返回值HAL_StatusTypeDef:就绪状态,可以是 HAL_OK 或 HAL_ERROR
先决条件
被调用函数

1.31 HAL_I2C_EV_IRQHandler

函数名HAL_I2C_EV_IRQHandler
函数原形void HAL_I2C_EV_IRQHandler(I2C_HandleTypeDef *hi2c)
功能描述I2C 外设事件中断处理函数
输入参数hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输出参数
返回值
先决条件
被调用函数

1.32 HAL_I2C_ER_IRQHandler

函数名HAL_I2C_ER_IRQHandler
函数原形void HAL_I2C_ER_IRQHandler(I2C_HandleTypeDef *hi2c)
功能描述I2C 外设错误中断处理函数
输入参数hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输出参数
返回值
先决条件
被调用函数

1.33 HAL_I2C_MasterTxCpltCallback

函数名HAL_I2C_MasterTxCpltCallback
函数原形void HAL_I2C_MasterTxCpltCallback(I2C_HandleTypeDef *hi2c)
功能描述I2C 主机发送完成回调函数
输入参数hi2c:I2C 句柄,指向一个 I2C_HandleTypeDef 结构体
输出参数
返回值
先决条件
被调用函数

该文档修改记录:

修改时间修改说明
2024年4月30日第一次发布,介绍了该博客驱动所有函数的介绍及使用

总结

以上就是该博客驱动所有函数的介绍及使用的内容。
有不明白的地方欢迎留言;有建议欢迎留言,我后面编写文档好改进。
创作不容,如果文档对您有帮助,记得给个赞。

  • 12
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
根据行列式的性质,行列式的某一行(列)乘以一个数然后加到另一行(列)上,行列式的值不变。因此,我们可以对第二个行列式进行变形,将第一行乘以3然后加到第二行上: \begin{vmatrix} 3a_{21}-a_{11} & 3a_{22}-a_{12} & 3a_{23}-a_{13} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} = \begin{vmatrix} 3a_{21} & 3a_{22} & 3a_{23} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} - \begin{vmatrix} a_{11} & a_{12} & a_{13} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} 由于第二个行列式的第一行和第二行相等,因此它的值为0。因此,我们只需要计算第一个行列式: \begin{vmatrix} 3a_{21} & 3a_{22} & 3a_{23} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} 将第一行除以3,得到: \begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11}/3 & a_{12}/3 & a_{13}/3 \\ a_{31} & a_{32} & a_{33} \end{vmatrix} 将第二行乘以3,得到: \begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11} & a_{12} & a_{13} \\ 3a_{31} & 3a_{32} & 3a_{33} \end{vmatrix} 由于行列式的某一行(列)乘以一个数,行列式的值也会相应地乘以这个数,因此: \begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11}/3 & a_{12}/3 & a_{13}/3 \\ a_{31} & a_{32} & a_{33} \end{vmatrix} = \frac{1}{3}\begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} = \frac{1}{3}(2) = \frac{2}{3} \begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11} & a_{12} & a_{13} \\ 3a_{31} & 3a_{32} & 3a_{33} \end{vmatrix} = 3\begin{vmatrix} a_{21} & a_{22} & a_{23} \\ a_{11} & a_{12} & a_{13} \\ a_{31} & a_{32} & a_{33} \end{vmatrix} = 3(2) = 6 因此,原行列式的值为: \frac{2}{3} - 6 = -\frac{16}{3}

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

常驻客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值