最近几天学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的上拉电阻
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
gmyu
1楼-- · 2020-01-01 19:47
过年了还在玩技术的,点个赞。
justdomyself
2楼-- · 2020-01-01 23:22
 精彩回答 2  元偷偷看……
haiyu
3楼-- · 2020-01-02 01:02
justdomyself 发表于 2017-1-14 11:04
这个软件是个代码生成器?

cubemx  
st的初始化软件 用它可以配置好初始化的流程 让你直接去写代码 而不用考虑底层的东西 不用去看寄存器了~~
好早以前想学stm32 但看了一对堆的手册寄存器就放弃了 现在用这个已配置好 然后就写几个回调函数就可以用了
但其效率低了  不过上手容易了 起码有信心去搞程序 不用考虑配置问题~

一周热门 更多>