首页 » 科学 » 兆易立异GD系列硬件I2C实例_模式_快速

兆易立异GD系列硬件I2C实例_模式_快速

南宫静远 2024-11-12 00:15:33 0

扫一扫用手机浏览

文章目录 [+]

GD32的I2C资源

引脚配置

通过查询GD32的选型手册可以看到GD32是只有一个I2C资源的,大家在选型的时候要把稳下。
并且默认脚是PB6和PB7,可以重映射到PB8和PB9上;打开I2C0的重映射功能须要两步:

兆易立异GD系列硬件I2C实例_模式_快速 科学

1.打开重映射时钟rcu_periph_clock_enable(RCU_AF);2.重映射I2C0使能gpio_pin_remap_config(GPIO_I2C0_REMAP,ENABLE);

这两个步骤非常主要,笔者便是没有打开重映射时钟,导致I2C0一贯运行不起来,直到打开后就好了。

I2C0的重映射功能

那么如何是否打开了重映射功能呢,大家可以通过查看重映射寄存器AFIO_PCF0。
I2C0_REMAP为1,表示已经打开了I2C0的重映射功能。

AFIO_PCF0寄存器

I2C时钟配置

I2C引脚配置完成后,须要对I2C0的时钟进行配置。

GD32的I2C0时钟有两种模式,标准模式和快速模式。

在标准模式下,Thigh = Tlow = CLKCTPCLK1

在快速模式下,DTCY=0,Thigh = CLKCTPCLK1 Tlow = 2CLKCTPCLK1

DTCY=1,Thigh = 9CLKCTPCLK1 Tlow = 16CLKCTPCLK1

I2C0的时钟

这里须要关注CLKC的值,CLCK=PCLK/(Speed倍数),倍数为Thigh和Tlow之和,如标准下,倍数为2;快速模式下,DTCY=0,倍数为(1+2)=3;DTCY=1,倍数为(9+16)=25。
PCLK=SYSCLK/2=108MHz/2=54MHz。

GD给的库函数是不须要直接写标准模式或快速模式的,它是根据填写的Speed去剖断为标准模式或快速模式;小于即是100000(100K)以下就认为标准模式,小于即是400000(400K)以下认为是快速模式。

GD供应的库函数为i2c_clock_config(uint32_i i2c_periph,uint32_t clkspeed,uint32_t dutycyc)i2c_periph是I2C0或I2C1clkspeed便是打算CLKC填写的速率dutycyc是快速模式下DTCY的值,0或1

不同的CLCK对应的高低电平

如上是笔者利用的快速模式,DTCY=0配置,发送了一个start旗子暗记(SCL为高时,DSA由高变低);Speed的值分别为400K和200K,对应的Thigh分别为54MHz/(4000003)/54MHz=830ns和54MHz/(2000003)/54MHz=1.666us,Tlow为Tigh2,频率分别为1/830ns3=361K和1/1.666us3=180K,与示波器抓的波形是非常靠近的。

快速模式下大家一定要把稳两点,1.Thigh与Tlow的韶光是不一致的,为1:2或者9:16;2.高电平保持韶光很小;大家把稳看波形,Speed的值为400K时,高电平基本没有保持韶光,这种时序是非常危险的,有可能从机收到会认为非常,这样I2C时序读写是非常不稳定的。
由于笔者只是读取EEPROM,不须要太快的速率,以是终极选取了标准模式,Speed为20000(20K)。
Thigh与Tlow相等,25us。

标准模式20K的I2C起始旗子暗记波形图

结语

GD32F107系列的硬件I2C就先容到这里,紧张是引脚配置和时钟选择,昔时夜家通过示波器能看到起始旗子暗记时,表示I2C旗子暗记已经调通了,之后根据读写协议收发数据即可。
下一章节我们将讲述利用硬件I2C去读写EERPOM芯片AT24C64的过程;关注我,一起学习嵌入式专业知识。
有什么想谈论的,请在评论区给我留言吧,感激大家!

标签:

相关文章