TWI(Two-wire Serial Interface)接口是对 I2C 总线接口的继承和发展,完全兼容 I2C 总线。
TWI 由一根时钟线和一根数据线组成,以字节为单位进行传输,可兼容 SMBus 总线规范,自动对字节传
输进行处理,并对串行通信进行跟踪。
SCL/SDA 是 TWI 总线的信号线。 SDA 是双向数据线,SCL 是时钟线。在 TWI 总线上传送数据,首先
送最高位(MSB),由主机发出起始信号,然后由主机发送一个或多个字节的数据,数据传送完毕,由主机发
出停止信号,完成一次最简单的 TWI 传输。
TWI 总线配置
1、I/O 口配置
TWI 总线要求配置为开漏输出,注意开漏输出时外部上拉限制为 VDD 或略超 VDD。
GPIOA_CFG->AFRH.BIT.AFR15 = 9; // PA15 = AF9 ~ SDA
GPIOA_CFG->AFRH.BIT.AFR14 = 9; // PA14 = AF9 ~ SCL
GPIOA_CFG->OTYPER = 0xC000; // PA14/15: Open-Drain output
GPIOA_CFG->PUPDR.BIT.PHDR14 =1 ; // PA14: pull high,此处用内部上拉示例
GPIOA_CFG->PUPDR.BIT.PHDR15 =1 ; // PA15: pull high,此处用内部上拉示例
2. 波特率配置
// 预分频,0:64 分频, 1:16 分频, 2:4 分频, 3:1 分频
TWI1->CR.BIT.CR = 3; // TWI 时钟 1 分频
// 波特率公式:Ftwi/(16+2*CR*BRT), 设置波特率 100KBps 时,Ftwi=30MHz, 要求 CR*BRT=142,
取 CR=1,BRT=142
TWI1->BRT = 142;
3. 通信地址配置
// AMR=0,不开启屏蔽。ADDR[6:0]=0111011b,本机地址。GC=0b,禁止响应通用地址。
TWI1->ADDR.V32 = 0x0076;
|