7135|3

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

请教GD32E230C开发板如何设置I2C1? [复制链接]

    我想开启I2C1,使用PF6和PF7两个引脚,我参照I2C0配置了引脚,代码如下:
  1. void i2c_gpio_config(void)
  2. {
  3.     /* enable GPIOB clock 启用GPIOB时钟*/
  4.     rcu_periph_clock_enable(RCU_GPIOB);
  5.     /* enable I2C0 clock 启用I2c0时钟*/
  6.     rcu_periph_clock_enable(RCU_I2C0);

  7.     /* connect PB6 to I2C0_SCL 将PB6连接到I2c0_SCL*/
  8.     gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_6);
  9.     /* connect PB7 to I2C0_SDA 将PB7连接到I2c0_SDA*/
  10.     gpio_af_set(GPIOB, GPIO_AF_1, GPIO_PIN_7);
  11.     /* configure GPIO pins of I2C0 配置I2c0的GPIO管脚*/
  12.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_6);
  13.     gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
  14.     gpio_mode_set(GPIOB, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_7);
  15.     gpio_output_options_set(GPIOB, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ,GPIO_PIN_7);


  16.     rcu_periph_clock_enable(RCU_GPIOF);            //配置I2C1引脚
  17.     rcu_periph_clock_enable(RCU_I2C1);

  18.     gpio_af_set(GPIOF, GPIO_AF_0, GPIO_PIN_6);     //将PF6连接到I2C1_SCL
  19.     gpio_af_set(GPIOF, GPIO_AF_0, GPIO_PIN_7);     //将PF7连接到I2C1_SDA

  20.     gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_6);  //配置I2c1的GPIO管脚
  21.     gpio_output_options_set(GPIOF, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ,GPIO_PIN_6);
  22.     gpio_mode_set(GPIOF, GPIO_MODE_AF, GPIO_PUPD_PULLUP,GPIO_PIN_7);
  23.     gpio_output_options_set(GPIOF, GPIO_OTYPE_OD, GPIO_OSPEED_50MHZ,GPIO_PIN_7);
  24. }
复制代码


   I2C的配置代码如下,现在就是不清楚I2C1的i2c_mode_addr_config()函数的最后一个参数是起什么作用,该如何取值?固件库中的说明是I2C地址,原代码I2C0的设置是0xA0,那I2C1的地址是多少呢?

  1. void i2c_config(void)
  2. {
  3.     /* enable I2C clock 启用I2c时钟*/
  4.     rcu_periph_clock_enable(RCU_I2C0);
  5.     /* configure I2C clock 配置I2c时钟*/
  6.     i2c_clock_config(I2C0,I2C0_SPEED,I2C_DTCY_2);
  7.     /* configure I2C address 配置I2c地址*/
  8.     i2c_mode_addr_config(I2C0,I2C_I2CMODE_ENABLE,I2C_ADDFORMAT_7BITS,I2C0_SLAVE_ADDRESS7);
  9.     /* enable I2C0 启用I2C0*/
  10.     i2c_enable(I2C0);
  11.     /* enable acknowledge 启用确认*/
  12.     i2c_ack_config(I2C0,I2C_ACK_ENABLE);
  13.        
  14.         rcu_periph_clock_enable(RCU_I2C1);             //启用I2C1时钟
  15.     i2c_clock_config(I2C1,I2C0_SPEED,I2C_DTCY_2);  //配置I2C1时钟,速度400000,占空比2
  16.     i2c_mode_addr_config(I2C1,I2C_I2CMODE_ENABLE,I2C_ADDFORMAT_7BITS,0xA0);//配置I2c地址,I2C模式0x82
  17.     i2c_enable(I2C1);                              //启用I2C1
  18.     i2c_ack_config(I2C1,I2C_ACK_ENABLE);           //启用确认
  19. }
复制代码





此帖出自GD32 MCU论坛

最新回复

不同的IIC从设备地址不同的  详情 回复 发表于 2019-4-17 16:48
点赞 关注(1)
 

回复
举报

9795

帖子

24

TA的资源

版主

沙发
 
0xA0应该是对应I2C外设的地址,比如你例程可能是控制AT24XXX EEPROM的
0xA0就是这个EEPROM的设备地址

这个地址只有从设备才有,一搬MCU都是作为主机去控制其它I2C设备的,这时候不管你用的是I2C0还是I2C1它的地址都是要控制的从设备地址,比如这个EEPROM的地址是0xA0
此帖出自GD32 MCU论坛
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

板凳
 
谢谢版主解惑!那如果我想在同一I2C总线上挂多个设备,是不是在每次使用前必须重新设置地址?
此帖出自GD32 MCU论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
不同的IIC从设备地址不同的
此帖出自GD32 MCU论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表