STM32F2系列驱动开发系列驱动开发——模拟模拟I2C通信通信
一、概述 通过STM32的PC14和PC15管脚来模拟I2C通信,读写I2C接口的器件内部寄存器......
一、概述
通过STM32的PC14和PC15管脚来模拟I2C通信,读写I2C接口的器件内部寄存器,具体定义如下:
#define PIN_SCL GPIO_Pin_14
#define PIN_SDA GPIO_Pin_15
延时函数为μs延时,例如Delay(4)表示延时4μs。
二、Static型函数定义
static __inline void TWI_SCL_0(void) { GPIOC->BSRRH = PIN_SCL; }
static __inline void TWI_SCL_1(void) { GPIOC->BSRRL = PIN_SCL; }
static __inline void TWI_SDA_0(void) { GPIOC->BSRRH = PIN_SDA; }
static __inline void TWI_SDA_1(void) { GPIOC->BSRRL = PIN_SDA; }
static __inline u8 TWI_SDA_STATE(void) { return (GPIOC->IDR & PIN_SDA) != 0; }
三、功能函数定义
void TWI_Init(void);
u8 TWI_Start(void);
u8 TWI_Start_SHT(void);
void TWI_Stop(void);
void TWI_SendByte(u8 Data);
u8 TWI_ReceiveByte(void);
void TWI_SendACK(void);
void TWI_SendNACK(void);
u8 TWI_WaitACK(void);
u8 TWI_WriteOneByte(u8 DAddr,u8 Addr,u8 Dat);
u8 TWI_ReadOneByte(u8 Daddr,u8 Addr);
四、功能函数详解
4.1 I2C端口初始化
说明:(1)SDA设置为开漏输出,这是双向数据线常规I/O方式。
(2)SCL设置为推挽输出
void TWI_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC->AHB1ENR |= 1<<2;
RCC->APB1ENR |= 1<<28;
PWR->CR |= 1<<8;
RCC->BDCR &= ~(1<<0);
GPIO_InitStructure.GPIO_Pin = PIN_SDA;