打印
[STM32F1]

STM32F105的硬件IIC接口能不能用作从机?

[复制链接]
1728|36
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuhuis|  楼主 | 2019-4-17 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F105的硬件IIC接口能不能用作从机?

使用特权

评论回复
沙发
zhuhuis|  楼主 | 2019-4-17 17:27 | 只看该作者
如果可以的话,具体的IIC初始化跟作为主机有什么不同

使用特权

评论回复
板凳
llljh| | 2019-4-17 17:30 | 只看该作者
必须可以

使用特权

评论回复
地板
zhuhuis|  楼主 | 2019-4-17 17:33 | 只看该作者
楼上大神,能否将这个IIC从机代码部分共享一下,非常感谢

使用特权

评论回复
5
dingy| | 2019-4-17 17:36 | 只看该作者
给你提供个思路吧,寄存器配置和I2C 作为主差不多的,区别就是要把I2C配置成从模式,另外在I2C作为从模式,要设置从机的地址。

使用特权

评论回复
6
happy_10| | 2019-4-17 17:40 | 只看该作者
如果从机是为了发送数据的话,建议使用DMA+I2C模式,因为不知要主机什么时候读取数据,因此要提前准备好数据(DMA就起了提前准备好数据的作用)

使用特权

评论回复
7
renyaq| | 2019-4-17 17:43 | 只看该作者
对于I2C SPI这种需要同步时钟通信的接口,作为从机的话,时钟必须有主机提供,以帮助从机把数据从数据寄存器里面“推出去"

使用特权

评论回复
8
happy_10| | 2019-4-17 17:46 | 只看该作者

如果从机是为了接收数据,那就用中断接收的方式更合理一点。

使用特权

评论回复
9
houcs| | 2019-4-17 17:52 | 只看该作者
代码看看,遇到的问题说明清楚,越详细越好,最重要的是用示波器波形 上来

使用特权

评论回复
10
zhuhuis|  楼主 | 2019-4-17 17:52 | 只看该作者
我这边作为IIC从机,另个一个模块作为主机,需要对我写数据(作为命令让我执行某些动作),并且也需要查询某些状态

使用特权

评论回复
11
liuzaiy| | 2019-4-17 17:55 | 只看该作者
也就是我需要准备一些数据供主机读

使用特权

评论回复
12
zhuhuis|  楼主 | 2019-4-17 17:58 | 只看该作者
我不明白你说的从机接收数据以及从机发送数据; IIC所有动动作不管是读还是写不都是主机发起的吗,主机读取从机的数据,这个时候从机仅仅是按照协议节拍,在合理的时候在寄存器的对应的buff处准备好数据,供主机读取吧?

使用特权

评论回复
13
zhuhuis|  楼主 | 2019-4-17 18:02 | 只看该作者
我的IIC配置如下
static void MX_I2C2_Init(void)
{
    /*I2C_Info.controlMode=1;//硬件控制
        I2C_Info.speed=400000;
        I2C_Info.subAddrMode=2;
        I2C_Info.subAddrWidth=0;
        I2C_Info.slaveAddr=0x30;
        I2C_Info.channel=1;
        VT_I2C_HardInit(&I2C_Info);*/
  hi2c2.Instance = I2C2;
  hi2c2.Init.ClockSpeed = 100000;
  hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c2.Init.OwnAddress1 = 0x2a;//0x54
  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  hi2c2.Init.OwnAddress2 = 0;
  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_ENABLE;
  if (HAL_I2C_Init(&hi2c2) != HAL_OK)
  {
    Error_Handler();
  }

}

使用特权

评论回复
14
stly| | 2019-4-17 18:06 | 只看该作者
看样子你用的是hal库,直接拿hal库的配置,都不用自己配啦

使用特权

评论回复
15
zhuhuis|  楼主 | 2019-4-17 18:10 | 只看该作者
恩,但是进步了中断

使用特权

评论回复
16
zhuhuis|  楼主 | 2019-4-17 18:18 | 只看该作者
我这边作为IIC从机,另个一个模块作为主机,需要对我写数据(作为命令让我执行某些动作),并且也需要查询某些状态(也就是我需要准备一些数据供主机读)

使用特权

评论回复
17
zhuhuis|  楼主 | 2019-4-17 18:21 | 只看该作者
我不明白你说的从机接收数据以及从机发送数据; IIC所有动动作不管是读还是写不都是主机发起的吗,主机读取从机的数据,这个时候从机仅仅是按照协议节拍,在合理的时候在寄存器的对应的buff处准备好数据,供主机读取吧?

使用特权

评论回复
18
zhuhuis|  楼主 | 2019-4-17 18:23 | 只看该作者
怎么从机还有接收和发送的说法?

使用特权

评论回复
19
zhuhuis|  楼主 | 2019-4-17 18:27 | 只看该作者
能否把你的IIC从机的配置贴上来,我对比下,看到底哪里导致进步了中断

使用特权

评论回复
20
stly| | 2019-4-17 18:30 | 只看该作者
去年写的,都不知道扔哪里去了。如果实在不会调,用SPI或者UART通信都可以

使用特权

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

本版积分规则

728

主题

8464

帖子

6

粉丝