快捷搜索: 王者荣耀 脱发

STM32F103 硬件I2C主从机通信

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

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

这个是VL53L0X的keil mdk 的工程文件:

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

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

经验分享 程序员 微信小程序 职场和发展