extern I2C_HandleTypeDef hi2c1;
时间: 2024-06-05 12:10:32 浏览: 13
这段代码是在C语言中使用了HAL库对I2C总线进行操作时定义的一个I2C_HandleTypeDef类型的变量hi2c1。
通常在使用HAL库对I2C总线进行操作时,我们需要先定义一个I2C_HandleTypeDef类型的结构体变量,然后通过HAL库提供的函数对其进行初始化,最后再通过HAL库提供的函数对I2C总线进行读写操作。
在这段代码中,我们可以看到定义了一个I2C_HandleTypeDef类型的变量hi2c1,这个变量会在后续的代码中被用到。
相关问题
extern I2C_HandleTypeDef hi2c1;
您好!对于您的问题,`extern I2C_HandleTypeDef hi2c1;`是一个外部变量声明。它表明在其他地方已经定义了一个名为`hi2c1`的类型为`I2C_HandleTypeDef`的变量,而在当前文件中只是进行了声明,以便在当前文件中使用该变量而不需要重新定义。这种声明通常用于多个源文件共享同一个变量的情况,以实现全局变量的效果。
完整的STM32F4 I2C HAL驱动PCA9555程序带读写容错功能,出错重新初始化PCA9555;包含I2C1初始化代码
以下是一个基于STM32F4 HAL库的I2C驱动PCA9555的代码示例,包含了读写容错功能,以及出错重新初始化PCA9555的处理。
```c
#include "stm32f4xx_hal.h"
/* PCA9555 I2C地址 */
#define PCA9555_ADDR 0x40
/* PCA9555寄存器地址 */
#define PCA9555_INPUT 0x00 /* 输入寄存器 */
#define PCA9555_OUTPUT 0x01 /* 输出寄存器 */
#define PCA9555_POLAR 0x02 /* 极性反转寄存器 */
#define PCA9555_CONFIG 0x03 /* 配置寄存器 */
/* PCA9555输出状态宏定义 */
#define PCA9555_OUTPUT_HIGH 0xFF
#define PCA9555_OUTPUT_LOW 0x00
/* I2C句柄 */
extern I2C_HandleTypeDef hi2c1;
/* PCA9555初始化函数 */
void PCA9555_Init(void)
{
/* PCA9555配置字节,配置所有IO口为输出模式 */
uint8_t config_byte = 0x00;
HAL_I2C_Mem_Write(&hi2c1, PCA9555_ADDR, PCA9555_CONFIG, 1, &config_byte, 1, 100);
}
/* PCA9555重新初始化函数 */
void PCA9555_ReInit(void)
{
/* 先关闭I2C外设 */
HAL_I2C_DeInit(&hi2c1);
/* 等待一段时间 */
HAL_Delay(100);
/* 重新初始化I2C外设 */
MX_I2C1_Init();
/* 重新初始化PCA9555 */
PCA9555_Init();
}
/* PCA9555读取输入寄存器函数 */
uint8_t PCA9555_ReadInput(void)
{
/* 读取输入寄存器 */
uint8_t input_byte = 0x00;
if (HAL_I2C_Mem_Read(&hi2c1, PCA9555_ADDR, PCA9555_INPUT, 1, &input_byte, 1, 100) != HAL_OK)
{
/* 读取失败,重新初始化PCA9555 */
PCA9555_ReInit();
/* 返回默认值 */
return 0xFF;
}
return input_byte;
}
/* PCA9555写入输出寄存器函数 */
void PCA9555_WriteOutput(uint8_t output_byte)
{
/* 写入输出寄存器 */
if (HAL_I2C_Mem_Write(&hi2c1, PCA9555_ADDR, PCA9555_OUTPUT, 1, &output_byte, 1, 100) != HAL_OK)
{
/* 写入失败,重新初始化PCA9555 */
PCA9555_ReInit();
}
}
/* PCA9555输出高电平函数 */
void PCA9555_OutputHigh(void)
{
PCA9555_WriteOutput(PCA9555_OUTPUT_HIGH);
}
/* PCA9555输出低电平函数 */
void PCA9555_OutputLow(void)
{
PCA9555_WriteOutput(PCA9555_OUTPUT_LOW);
}
```
以上代码中,`PCA9555_Init()`函数用于初始化PCA9555,将所有IO口配置为输出模式;`PCA9555_ReInit()`函数用于重新初始化PCA9555,当I2C通信出现错误时调用该函数;`PCA9555_ReadInput()`函数用于读取PCA9555的输入寄存器,并且在读取失败时重新初始化PCA9555;`PCA9555_WriteOutput()`函数用于写入PCA9555的输出寄存器,并且在写入失败时重新初始化PCA9555;`PCA9555_OutputHigh()`和`PCA9555_OutputLow()`函数用于将PCA9555的输出状态设置为高电平和低电平。需要注意的是,以上代码中的`hi2c1`变量是I2C句柄,需要在主函数中初始化。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![c](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)