最近几天学cube 做个stm32 f030f4 I2c主从通讯

2020-01-01 17:40发布

本帖最后由 haiyu 于 2017-1-13 19:23 编辑

最近几天学cube  写个I2c主从通讯
主机发送一个地址位上总线 对应地址位的从机发送一组数据到总线上;
主机通过i2c读取多个stm32f030F4 采集ADC值
ps : 从机例子只能固定发送数据 不能读主机数据
只能说玩玩而已   切勿商用
主机查询某一地址 然后在串口中打印:
  1.          printf("add: %d ",add);
  2.                 ERROR_data=HAL_I2C_Master_Receive(&hi2c1,add,I2c_Buf_Read,20,2000);
  3.                 if(ERROR_data==HAL_TIMEOUT)
  4.                 {
  5.                  MX_I2C1_Init();
  6.                 __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
  7.                  printf("I2C超时错误 ");
  8.                 }else if(        ERROR_data==HAL_ERROR)
  9.                  {
  10.                 __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
  11.                 printf("I2C错误 ");
  12.                 }
  13.                 else if(ERROR_data==HAL_BUSY)
  14.                 {
  15.                 __HAL_I2C_ENABLE_IT(&hi2c1,I2C_IT_ADDRI);
  16.                 printf("I2C总线忙 ");
  17.                 }
  18.                
  19.          HAL_Delay(1000);
  20.          for (i=0;i<20;i++)
  21.          {
  22.                         printf("0x%02X ", I2c_Buf_Read[i]);
  23.                  //I2c_Buf_Read[i]=0;
  24.                 }
  25.           printf(" ");
  26.                  for (i=0;i<20;i++)
  27.          {
  28.                  I2c_Buf_Read[i]=0;
  29.                 }
  30.                
复制代码
从机用cube配置好波特率 上下时间 地址位 开 I2c中断
用中断函数在大循环里不断发送
HAL_I2C_Slave_Transmit_IT(&hi2c1,&I2c_Buf_Write[0],20);         //发送数据
从而实现I2c主从通讯 ;
附件有cube配置生成的工程
注意总线上要焊接4.7~10K的上拉电阻
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。