打印
[信息]

MM32F013x上实现I2C多地址的功能应用

[复制链接]
283|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

转自灵动微**
I2C中,通信是借助设备地址寻址实现的,大致可以分为两类:一对多、多对多通信。在多主机通信时,从机如果想接收多个主机的数据,就需要使用到从机多地址的功能。
本文是针对在MM32F013x上实现I2C多地址的功能应用。

1.配置方式
MM32F013X的多地址功能是通过配置I2C\_SLAVMASK寄存器来实现的。通过I2C\_SAR寄存器配置从机地址后,再配置I2C\_SLAVMASK寄存器。MM32F013x是支持7位地址和10位地址格式的,所以需要按照自己的实际情况配置I2C\_SLAVMASK寄存器的低九位,I2C\_SLVRCVADDR寄存器会给出真实地址。
注意:在I2C中有些特殊地址是不会产生响应的。
3.相关软件的实现3.1功能验证制作一个主机设备发送16个字节的字符串,连接两块开发板的SDA/SCL,通过主机向从机发送数据,分别将目标地址设置为:0XA0、0XA2、0XA4、0XA6、0XA8、0XAA、0XAC、0XAE进行通信测试

3.1.1主机程序
3.1.2从机初始化部分

以上程序将设备配置为从机模式,使能读请求/接收缓冲非空中断,从机地址配置为0XA8,SLVMASK配置为0X0F,表示地址的低四位不进行比较,则从机设备可以从总线上接受地址为0XA0、0XA2、0XA4、0XA6、0XA8、0XAA、0XAC、0XAE的数据包。

3.1.3从机多地址中断处理程序


3.1.4测试结果通过UART1打印接收及发送的结果发现每次结果都如下图所示

结合上述结果与调试过程,可知从机可以接收地址为:0XA0、0XA2、0XA4、0XA6、0XA8、0XAA、0XAC、0XAE的数据包



396725ff3fe57ca884.png (21.47 KB )

396725ff3fe57ca884.png

使用特权

评论回复
沙发
renzheshengui| | 2021-2-2 09:02 | 只看该作者
感觉这个通讯调试起来很麻烦

使用特权

评论回复
板凳
wakayi| | 2021-2-2 09:05 | 只看该作者
是的 需要来回来去的研究波形

使用特权

评论回复
地板
两只袜子| | 2021-2-2 09:14 | 只看该作者
这个通讯调试起来是不是很麻烦

使用特权

评论回复
5
wowu| | 2021-2-2 09:44 | 只看该作者
iic比较娇气的原因是什么呢

使用特权

评论回复
6
xiaoqizi| | 2021-2-2 10:18 | 只看该作者
其实它本身并没啥 就是调试比较麻烦

使用特权

评论回复
7
木木guainv| | 2021-2-2 10:18 | 只看该作者
介绍的很细致 波形非常清晰

使用特权

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

本版积分规则

681

主题

1534

帖子

7

粉丝