立即注册
查看: 3543|回复: 21

[转载] 兆易创新GD系列硬件I2C实例分享

已绑定手机
发表于 2021-7-22 17:23:35 | 显示全部楼层 |阅读模式 来自 广东省深圳市
使用ST的硬件I2C时,总线经常会处于忙的状态,所以用的软件模拟I2C时序,最近笔者在使用GD32F107替换STM32F107的芯片,并且GD的硬件I2C是可以用的,所以我把调试中的问题记录下来,希望能帮助大家少入坑。

引脚配置
通过查询GD32的选型手册可以看到GD32是只有一个I2C资源的,大家在选型的时候要注意下。并且默认脚是PB6和PB7,可以重映射到PB8和PB9上;打开I2C0的重映射功能需要两步:
1.打开重映射时钟rcu_periph_clock_enable(RCU_AF);
2.重映射I2C0使能gpio_pin_remap_config(GPIO_I2C0_REMAP,ENABLE)
这两个步骤非常重要,笔者就是没有打开重映射时钟,导致I2C0一直运行不起来,直到打开后就好了。
1.jpg

I2C时钟配置
I2C引脚配置完成后,需要对I2C0的时钟进行配置。
GD32的I2C0时钟有两种模式,标准模式和快速模式。
在标准模式下,Thigh = Tlow = CLKC*TPCLK1
在快速模式下,DTCY=0,Thigh = CLKC*TPCLK1 Tlow = 2*CLKC*TPCLK1
DTCY=1,Thigh = 9*CLKC*TPCLK1 Tlow = 16*CLKC*TPCLK1
2.jpg
这里需要关注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或I2C1
clkspeed就是计算CLKC填写的速率
dutycyc是快速模式下DTCY的值,0或1

更多详细内容请下载附件查看
游客,如果您要查看本帖隐藏内容请回复

已绑定手机
发表于 2021-10-12 09:19:08 | 显示全部楼层 来自 广东省深圳市
正在搞硬件I2C
发表于 2021-12-30 15:15:47 | 显示全部楼层 来自 江苏省南京市
goooooooooooooooooooooood
已绑定手机
发表于 2022-1-7 10:28:37 | 显示全部楼层 来自 上海市
谢谢分享
已绑定手机
发表于 2022-3-27 05:13:26 | 显示全部楼层 来自 英国
正在用gd的i2c 学习下
已绑定手机
发表于 2022-3-27 11:02:28 | 显示全部楼层 来自 广东省深圳市
谢谢分享
发表于 2022-3-30 17:42:59 | 显示全部楼层 来自 浙江省杭州市
啊奥术大师大所大所大所多哇奥无
已绑定手机
发表于 2022-4-21 10:11:40 | 显示全部楼层 来自 广东省深圳市
兆易创新GD系列硬件
发表于 2022-6-6 14:52:33 | 显示全部楼层 来自 广东省深圳市
紫薯布丁。。。。。。。。
发表于 2022-6-6 16:11:58 | 显示全部楼层 来自 上海市
学习了哈,继续加油,学习学习gooooooooooooood
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

合作/建议

TEL: 19168984579

工作时间:
周一到周五 9:00-11:30 13:30-19:30
  • 扫一扫关注公众号
  • 扫一扫打开小程序
Copyright © 2013-2024 一牛网 版权所有 All Rights Reserved. 帮助中心|隐私声明|联系我们|手机版|粤ICP备13053961号|营业执照|EDI证
在本版发帖搜索
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表