GD32F130R8的I2C2工作不了,没有波形。。。

[复制链接]
2444|8
手机看帖
扫描二维码
随时随地手机跟帖
heqiaosheng|  楼主 | 2015-7-21 23:16 | 显示全部楼层 |阅读模式
本帖最后由 heqiaosheng 于 2015-7-21 23:24 编辑

GD32F130使用的是STM32F0xx的库,芯片选的是STM32F103R8。SDA、SCL没有波形,外部有上拉地址。代码如下:

/**
  * @brief  I2C接口初始化
  *         初始化为I2C1主机,7位地址模式,启用模拟滤波器,停用数字滤波器,
  *         启用应答,I2C传输速度100KHz
  * @param  无
  * @retval 无
  */
void I2C2_Init_Config(void)
{
I2C_InitTypeDef I2C_InitStructure;
GPIO_InitTypeDef  GPIO_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOF, ENABLE); //使能GPIOB时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);

/*
//I2C PF6 PF7
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;// 开漏
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOF, &GPIO_InitStructure);  //
*/

I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
I2C_InitStructure.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
I2C_InitStructure.I2C_DigitalFilter = 0x01;
I2C_InitStructure.I2C_OwnAddress1 = 0x00;
I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
I2C_InitStructure.I2C_Timing = 0x40B22536;
I2C_Cmd(I2C2, ENABLE);
I2C_Init(I2C2, &I2C_InitStructure);
}

/**
  * @brief  从I2C1总线上的某一器件的某一起始地址中读取一定字节的数据到数组中
  * @param  driver_Addr:I2C器件地址
  * @param  start_Addr1:起始字节地址1
  * @param  start_Addr2:起始字节地址2
  * @param  number_Bytes:要读取的字节数量(小于一页)
  * @param  read_Buffer:存放读取数据的数组指针
  * @retval 是否读取成功
  */
I2C_Status I2C2_Read_NBytes2(uint8_t driver_Addr, uint8_t start_Addr1, uint8_t start_Addr2, uint8_t number_Bytes, uint8_t *read_Buffer)
{
uint8_t read_Num;
I2C_Timeout = I2C_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY) != RESET)
{
  if((I2C_Timeout--) == 0)
  {
   return I2C_FAIL;
  }
}

I2C_TransferHandling(I2C2, driver_Addr, 1, I2C_SoftEnd_Mode, I2C_Generate_Start_Write);

I2C_Timeout = I2C_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS) == RESET)
{
  if((I2C_Timeout--) == 0)
  {
   return I2C_FAIL+1;
  }
}

I2C_SendData(I2C2, start_Addr1);
I2C_Timeout = I2C_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TXIS) == RESET)
{
  if((I2C_Timeout--) == 0)
  {
   return I2C_FAIL+2;
  }
}

I2C_SendData(I2C2, start_Addr2);

I2C_Timeout = I2C_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_TC) == RESET)
{
  if((I2C_Timeout--) == 0)
  {
   return I2C_FAIL+3;
  }
}

I2C_TransferHandling(I2C2, driver_Addr, number_Bytes,  I2C_AutoEnd_Mode, I2C_Generate_Start_Read);
for(read_Num = 0; read_Num < number_Bytes; read_Num++)
{
  I2C_Timeout = I2C_TIMEOUT;
  while(I2C_GetFlagStatus(I2C2, I2C_FLAG_RXNE) == RESET)
  {
   if((I2C_Timeout--) == 0)
   {
    return I2C_FAIL+4;
   }
  }
  
  read_Buffer[read_Num] = I2C_ReceiveData(I2C2);
}
I2C_Timeout = I2C_TIMEOUT;
while(I2C_GetFlagStatus(I2C2, I2C_FLAG_STOPF) == RESET)
{
  if((I2C_Timeout--) == 0)
  {
   return I2C_FAIL+5;
  }
}
return I2C_OK;
}


低八度的声线| | 2015-7-22 08:49 | 显示全部楼层
芯片选的是STM32F103R8。芯片选的就不对,130对应的是F0系列的片子。

使用特权

评论回复
邓布利多| | 2015-7-22 08:50 | 显示全部楼层
为什么不用GD自己的库呢

使用特权

评论回复
heqiaosheng|  楼主 | 2015-7-22 11:22 | 显示全部楼层
本帖最后由 heqiaosheng 于 2015-7-22 11:25 编辑
低八度的声线 发表于 2015-7-22 08:49
芯片选的是STM32F103R8。芯片选的就不对,130对应的是F0系列的片子。

http://forum.eepw取消.com.cn/thread/270386/1 这个帖子好像不是这样说的。

通过仔细阅读GD32F130与STM32F030的说明书,并做对比,我们不难发现:GD32F130的外设类型、数量均相同,并且内存映射地址与STM32F030是相同的。

另一方面,我们也知道固件库函数是操作寄存器的封装,也就是说如果内存映射地址是相同,那么固件库是可以通用的,说得再直白一些,我们可以使用ST公司已有的STM32F0xx的固件库来编写GD32F130的程序。

既然GD32F130C是Cortex-M3的内核,那么其一定具有优秀、高性能的气质。我们在平时的软件编程的时候,仅需要将目标芯片选择为gd32f103或者stm32f103同系列芯片,并使用stm32f0xx的固件库即可。

使用特权

评论回复
sunmeat| | 2015-7-22 17:33 | 显示全部楼层
GD32F130使用的是STM32F0xx的库,芯片选的是STM32F103R8。
上面摘自你的原话,所以说你错了。确实,GD和ST两者基本上差不多,但是基本每个外设还是有细小区别的,需要改动那么一点点,以前用的确实是ST的库,但是后面出了自己的库了。

使用特权

评论回复
sunmeat| | 2015-7-22 17:35 | 显示全部楼层
给你个ST库的I2C的例子,你看看
5、I2C---24C02 EEPROM读写.rar (1014.54 KB)

使用特权

评论回复
zhangbo1985| | 2015-7-26 00:02 | 显示全部楼层
这个首先需要注意你的I2C总线的口线对不对的吧

使用特权

评论回复
547515736| | 2018-6-19 16:08 | 显示全部楼层

使用特权

评论回复
elhfs| | 2018-6-27 10:12 | 显示全部楼层
呵呵,选错芯片型号,应该会提示下载错误吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

44

帖子

0

粉丝