Giỏ hàng
Danh mục sản phẩm

Lập Trình SPI Arduino STM32

Đăng bởi Buiprohd@gmail.com ngày bình luận

Hôm nay mình chia sẻ Lập trình Test hoạt động SPI Arduino STM32

  • SCLK -> Đồng hồ nối tiếp
  • MOSI -> Đầu vào Slave đầu ra chính (Dữ liệu từ Master đến Slave)
  • MISO -> Master Input Slave Output (Dữ liệu từ Slave đến Master)
  • SS -> Chọn Thiết bị 
  • Tín hiệu Chọn Slave được sử dụng để kích hoạt một nô lệ cụ thể bằng cách làm cho tín hiệu SS ở mức THẤP. Trong cấu hình nhiều phụ kiện, mỗi thiết bị phụ có Tín hiệu SS riêng từ Chính và tại bất kỳ thời điểm nào, chỉ một thiết bị phụ có thể hoạt động.

    Phần cứng bên trong của SPI Communication rất đơn giản. Nó bao gồm một thanh ghi dịch chuyển và một chốt dữ liệu. Một điểm quan trọng cần nhớ là thiết bị Chính chịu trách nhiệm tạo ra Tín hiệu Đồng hồ trên Đường SCLK.

  •  

  • SPI trên STM32

  •  

  • SPI1

    SS1PA4

    PA15

    SCLK1

    PA5

    PB3

    MISO1

    PA6

    PB4

    MOSI1PA7

    PB5

    SPI2

    SS2PB12

    SCLK2

    PB13

    MISO2

    PB14

    MOSI2PB15
    SPI in Arduino
  •  

  • SPI Signal

    Arduino Pin

    SS

    Digital IO 10

    MOSI

    Digital IO 11

    MISO

    Digital IO 12

    SCK

    Digital IO 13

    Sơ đồ kết nối SPI với Arduino
  • Sơ đồ nối như sau

  • SPI Pin

    STM32 Blue Pill

    Arduino UNO

    SS

    PA4

    Digital IO 10

    SCLK

    PA5

    Digital IO 13

    MISO

    PA6

    Digital IO 12

    MOSI

    PA7

    Digital IO 11

    ở đây STM32 là master ,Arduino Là salve
  • CODE STM32
  • #include<SPI.h>

    #define SS PA4
    #define ledPin PC13
    #define buttonPin PA0

    void setup (void)
    {
    pinMode(SS, OUTPUT);
    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT);
    SPI.begin();
    SPI.setClockDivider(SPI_CLOCK_DIV16);
    digitalWrite(SS, HIGH);
    digitalWrite(ledPin, LOW);
    }

    void loop(void)
    {
    int masterSend, masterReceive;

    masterSend = digitalRead(buttonPin);

    digitalWrite(SS, LOW);

    masterReceive = SPI.transfer(masterSend);
    delay(500);
    digitalWrite(SS, HIGH);

    if (masterReceive == HIGH)
    {
    digitalWrite(ledPin, HIGH);
    }
    else
    {
    digitalWrite(ledPin, LOW);

    }
    }

  • Code Arduino AVR

  • #include<SPI.h>

    const int ledPin = 13;
    const int buttonPin = 6;

    volatile boolean received;
    volatile int slaveReceive, slaveSend;

    void setup()
    {
    pinMode(ledPin, OUTPUT);
    pinMode(buttonPin, INPUT);
    pinMode(MISO, OUTPUT);

    digitalWrite(ledPin, LOW);
    /* Turn on SPI in Slave Mode */
    SPCR |= _BV(SPE);
    received = false;
    /* Interupt ON is set for SPI Commnunication */
    SPI.attachInterrupt();
    }

    /* SPI ISR */
    ISR (SPI_STC_vect)
    {
    /* Value received from master STM32F103C8T6 is stored in variable slaveReceive */
    slaveReceive = SPDR;
    received = true;
    }

    void loop()
    {
    slaveSend = digitalRead(buttonPin);
    /* Send the slaveSend value to master STM32F103C8T6 via SPDR */
    SPDR = slaveSend;

    if(received == true)
    {
    if(slaveReceive == HIGH)
    {
    digitalWrite(ledPin, HIGH);
    }

    else
    {
    digitalWrite(ledPin, LOW);
    }
    }
    }

  • Chú ý Với Board Black STM32 SPI mặc định Cổng PB3,PB4,PB5 ,PA15


Cũ hơn Mới hơn