44 lines
1.6 KiB
C
44 lines
1.6 KiB
C
#ifndef __DRIVER_I2C_H__
|
||
#define __DRIVER_I2C_H__
|
||
|
||
#include <stdint.h>
|
||
#include "stm32f407xx.h"
|
||
#include "stm32f4xx.h"
|
||
#include "main.h"
|
||
#include "Com_debug.h"
|
||
#include "DWT.h"
|
||
|
||
// PA8是SDA,PA9是SCL
|
||
// 板子改进意见:PE9和PE11用作定时器1的CH1和CH2,然后PA8和PA9留出来用作I2C的通信引脚
|
||
#define I2C_SCL_PIN GPIO_PIN_9
|
||
#define I2C_SDA_PIN GPIO_PIN_8
|
||
#define I2C_GPIO_PORT GPIOA
|
||
|
||
// 宏定义 SDA拉高或拉低
|
||
#define SDA_HIGH I2C_GPIO_PORT->BSRR = I2C_SDA_PIN
|
||
#define SDA_LOW I2C_GPIO_PORT->BSRR = (uint32_t)I2C_SDA_PIN << 16U
|
||
|
||
// 宏定义 SCL拉高或拉低
|
||
#define SCL_HIGH I2C_GPIO_PORT->BSRR = I2C_SCL_PIN
|
||
#define SCL_LOW I2C_GPIO_PORT->BSRR = (uint32_t)I2C_SCL_PIN << 16U
|
||
|
||
// 宏定义 读SDA
|
||
#define SDA_READ (I2C_GPIO_PORT->IDR & I2C_SDA_PIN)
|
||
|
||
// 宏定义 延时5us
|
||
#define SCL_DELAY DWT_delay_us(5)
|
||
|
||
void Dri_I2C_Init(void); // 初始化函数
|
||
void Dri_I2C_Start(void); // 发送起始信号
|
||
void Dri_I2C_Stop(void); // 发送停止信号
|
||
void Dri_I2C_TransmitByte(uint8_t byte); // 发送一个字节的数据
|
||
uint8_t Dri_I2C_ReceiveByte(void); // 接收一个字节的数据
|
||
void Dri_I2C_TransmitACK(uint8_t ack); // 发送一个ACK信号, 参数是0(ACK)或1(NACK)
|
||
uint8_t Dri_I2C_ReceiveACK(void); // 接收一个ACK信号并返回
|
||
|
||
void Dri_I2C_WriteAddr(uint8_t slave_addr); // 写从机地址
|
||
void Dri_I2C_WriteReg(uint8_t reg, uint8_t data); // 写一个寄存器
|
||
uint8_t Dri_I2C_ReadReg(uint8_t slave_addr_read, uint8_t reg); // 读一个寄存器
|
||
|
||
#endif /* __DRIVER_I2C_H__ */
|