I2C代码软件模拟与Delay代码寄存器延迟函数

环境

芯片: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
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值