STM32F103 硬件I2C主从机通信

肝了这么多天,查了很多资料,逛了不少论坛终于把stm32f103的硬件I2C写出来了,就先做个记录。
开发板是自己画的兼容原子精英两块板子,型号是f103zet6。主从用的都是硬件I2C,用的是st官方例程,感谢,同时官方还给出了其他例如定时器,CAN通信的例程。地址先放在下面:
https://www.st.com/content/st_com/en/products/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103ze.html#sw-tools-scroll
官方例程并没有像网上大多数代码在IIC中断里面调用库函数来发,而是采用判断寄存器的值来处理数据的收发等,所以在阅读官方的的代码前最好准备stm32参考手册,主要就是SR1,SR2,这两个寄存器。

在官方例程里面默认是主机的读写,我做的是主机读取从机的内容。当然,简单改下就可以实现主机向从机写数据。
在这里插入图片描述
主机先使能中断和方向、地址。
在这里插入图片描述
之后就发送开始条件。
在这里插入图片描述
最后中断接收
在这里插入图片描述
下面从机初始化后,所有的数据接收、发送都在中断里面处理。从机发送
在这里插入图片描述
从机接收
在这里插入图片描述
最后通信成功
在这里插入图片描述
这是从机需要发送的数据。
在这里插入图片描述
哈哈哈。。。还有些函数需要再封装一下。
下一步就是在I2C总线上再挂几个单片机。
代码贴在这:
https://download.csdn.net/download/changshengxiao/10989174

这个是VL53L0X的keil mdk 的工程文件:
https://download.csdn.net/download/changshengxiao/10997790

这两天我又试了下在I2C总线上面挂两个单片机,但是主机接收的数据不对,而单独对一块单片机读取的数据没有问题,后来改了两个从机地址数据才读出来,开始两个从机地址分别是0x30,0x31后面改成了0x30,0x40(后来实验,0x32,0x33都行),强烈建议多从机地址一定不要连续,中间最好隔几个。期间又试了下HAL库的I2C,没有读出数据,希望知道的朋友告知一下。

这是stm32f103zet6作为主机,两片stm32f103c8t6作为从机各自控制VL53L0X测距传感器,发送到主机的图片。
在这里插入图片描述
注意主从机之间的I2C总线上拉电阻我用的是4.7K,电源是3.3V(之前电源接的是5V,后面硬件电路动了一下后,主机死活收不到数据,后来点对点测试的时候发现电源接3.3V可以)。

评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值