美文网首页树莓派树莓派
基于I2C的STM32与树莓派通信

基于I2C的STM32与树莓派通信

作者: 有信仰的人 | 来源:发表于2018-10-23 22:39 被阅读332次

      传统的串口通信会丢失数据,不可靠,故采用I2C(同步串行总线)通信。
      树莓派上使用python脚本,后期将使用c或java重写,目前没有需求。
      树莓派作主机(Master),stm32作从机(Slave)。特别需要注意的是,I2C的通信虽然只需要两根线就能通信,但是需要第三根线接地GND(提供判断低电位的能力),否则不能正常识别stm32从机
    使用Arduino IDE编程
      以下是STM32的代码:

        #include <Wire_slave.h>
        #define SLAVE_ADDRESS 0x04 //i2c地址
        int data;
        void setup() {
        Serial.begin(9600); // start serial for output
        // initialize i2c as slave
        Wire.begin(SLAVE_ADDRESS);
        // define callbacks for i2c communication
        Wire.onReceive(receiveData);//从机 接收 主机 发来的数据
        Wire.onRequest(sendData); //从机 请求 主机 发送数据
        Serial.println("Ready");
        }
        void loop() {
         delay(100);
         }
        // callback for received data
        void receiveData(int byteCount){
        while(Wire.available()) {
        data = Wire.read();
        Serial.print("data received: ");
        Serial.println(data);
          }
        }
        // callback for sending data
         void sendData(){
         Wire.write(data);
        }
    

    特别地,请注意头文件“Wire_slave.h”

      以下是树莓派上的python文件

    特别的,请先开启树莓派上i2c的接口,sudo raspi-config

    此外要能会使用树莓派上i2cdetect命令测试接口的连接是否正常

        import smbus
        import time
        bus = smbus.SMBus(1)
        address = 0x04
        def writeNumber(value):
         bus.write_byte(address, value)
         return -1
        def readNumber():
         number = bus.read_byte(address)
         return number
        while True:
          var=input("Enter1–9:")
          if not var:
             continue
          writeNumber(var)
          print "RPI: Hi STM32, I sent you ", var
          # sleep one second
          time.sleep(1)
          number = readNumber()
          print "STM32: Hey RPI,I received a digit", number
          print "======================================\n"
    

    连接效果图:
    运行测试图:

    相关文章

      网友评论

        本文标题:基于I2C的STM32与树莓派通信

        本文链接:https://www.haomeiwen.com/subject/xbjzzftx.html