环境
芯片:STM32F103ZET6
库:来自HAL的STM32F1XX.H
原理图
有图可知SCL和SDA两条线接到了PB10和PB11
-
Driver_I2C.h
-
#ifndef __DRIVER_I2C #define __DRIVER_I2C #include "stm32f1xx.h" #include "Com_Delay.h" // 定义拉高SCL引脚的宏操作 #define SCL_HIGH (GPIOB->ODR |= GPIO_ODR_ODR10) // 定义拉低SCL引脚的宏操作 #define SCL_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR10) // 定义拉高SDA引脚的宏操作 #define SDA_HIGH (GPIOB->ODR |= GPIO_ODR_ODR11) // 定义拉低SDA引脚的宏操作 #define SDA_LOW (GPIOB->ODR &= ~GPIO_ODR_ODR11) // 定义读取SDA引脚状态的宏操作 #define READ_SDA (GPIOB->IDR & GPIO_IDR_IDR11) // 定义I2C通信中的短暂延时宏 #define I2C_DELAY Delay_us(5) // 定义ACK和NACK信号的常量 #define ACK 0 #define NACK 1 // 初始化I2C驱动的函数声明 void Driver_I2C_Init(void); // I2C的启动信号函数声明,发送启动信号 void Driver_I2C_Start(void); // I2C的停止信号函数声明,发送停止信号 void Driver_I2C_Stop(void); // 发送ACK信号的函数声明 void Driver_I2C_ACK(void); // 发送NACK信号的函数声明 void Driver_I2C_NACK(void); // 等待并返回ACK信号的函数声明,返回值为接收到的ACK/NACK信号 uint8_t Driver_I2C_WaitACK(void); // 发送一个字节数据的函数声明 void Driver_I2C_SendChar(uint8_t ch); // 读取一个字节数据的函数声明,返回值为读取到的数据字节 uint8_t Driver_I2C_ReceiveChar(void); #endif
-