WCH沁恒单片机
直播中

陈博

13年用户 589经验值
擅长:12268
私信 关注
[问答]

求助,能提供一个CH582可用的硬件IIC读写24C256的例程吗?

  GPIOB_ModeCfg(GPIO_Pin_13 | GPIO_Pin_12, GPIO_ModeIN_PU);
  #if(I2C_MODE == HOST_MODE)
  PRINT(“IIC Host modern”);
  I2C_Init(I2C_Mode_I2C, 400000, I2C_DutyCycle_16_9, I2C_Ack_Enable, I2C_AckAddr_7bit, TxAdderss);
  while(I2C_GetFlagStatus(I2C_FLAG_BUSY) != RESET);
  I2C_GenerateSTART(ENABLE);
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
  I2C_Send7bitAddress(RxAdderss, I2C_Direction_Transmitter);
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
  while(i 《 6)
  {
  if(I2C_GetFlagStatus(I2C_FLAG_TXE) != RESET)
  {
  I2C_SendData(TxData[i]);
  i++;
  }
  }
  while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTED));
  I2C_GenerateSTOP(ENABLE);
  #elif(I2C_MODE == SLAVE_MODE)
  PRINT(“IIC Slave modern”);
  I2C_Init(I2C_Mode_I2C, 400000, I2C_DutyCycle_16_9, I2C_Ack_Enable, I2C_AckAddr_7bit, RxAdderss);
  while(!I2C_CheckEvent(I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED));
  while(i 《 6)
  {
  if(I2C_GetFlagStatus(I2C_FLAG_RXNE) != RESET)
  {
  RxData[i] = I2C_ReceiveData();
  i++;
  }
  }
  PRINT(“RxData:rn”);
  for(i = 0; i 《 6; i++)
  {
  PRINT(“%02xrn”, RxData[i]);
  }
  #endif
  例程里面提供的IIC例程如上所示,虽然做了很多改动,但是还是无法读写24C256.不知道错在哪里了,帮忙传一个可用的硬件IIC例程。谢谢

回帖(2)

刘桂兰

2022-7-29 10:19:24
我们这里提供的是一个例程,可以作为参考用,将主机的PB12、PB13分别上拉电阻到3.3v,阻值在2-5K之间,可以再进行尝试看看。如果没有实现你的功能可以软件模拟IIC。
举报

Refine张

2023-3-8 09:33:30
我也是遇到一样的问题了,调试的代码可以运行就是不饿能点亮SSD1306的屏幕GPIO配置为上拉输入的是时候内部电阻是50K 我打算外部上拉一个2.2K的试试
举报

更多回帖

发帖
×
20
完善资料,
赚取积分