ESP32 - STM32 SPI haberleşme problem

Başlatan magnetron, 01 Temmuz 2025, 14:02:59

magnetron

merhaba forum,

ESP32 master , STM32 slave olarak SPI haberleşme yapıyorum  kodların son şeklini ekliyorum

sorun şu ; start verince gayet güzel haberleşme başlıyor ama yaklaşık 1 dk sonra STM32 tarafı SPI kilitleniyor

tx_buffer  rx_buffer donup kalıyor

Copilot bir sürü şey denetti olmadı acaba elinde bu konuda çalışan kod olan veya fikir vericek olan var mı

teşekkür

resim burda
https://hizliresim.com/9ehgw5z

      

void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi) {
    if (hspi->Instance == SPI2) {
        spi_ready = 1;
................
  HAL_SPI_TransmitReceive_IT(&hspi2, spi_tx_buffer, spi_rx_buffer, 5);

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
............
if (spi_ready) {
          spi_ready = 0;c+=5;
          // Yeni veri hazırla
          spi_tx_buffer[0]=c;
          spi_tx_buffer[1]=c+1;
          spi_tx_buffer[2]=c+2;
          spi_tx_buffer[3]=c+3;
          spi_tx_buffer[4]=c+4;

          // Tekrar başlat
          if (HAL_SPI_GetState(&hspi2) == HAL_SPI_STATE_READY) {
          HAL_SPI_TransmitReceive_IT(&hspi2, spi_tx_buffer, spi_rx_buffer, 5);}


bu da ESP32 tarafı

#include<SPI.h>       //Library for SPI
 
/*  #define SPI_SCK 18 //Serial Clock(Master Output)
#define SPI_MOSI 23 //Master Output,Slave Input
#define SPI_MISO 19 //
#define SPI_CS 5 //Chip Select,Slave Transmit Enable(active low,Master 
#define SS 5  */
uint8_t reciveData[5], c=0;
 
char retchr;
String command;


void setup() {
  // put your setup code here, to run once:
        delay(3000); 
  Serial.begin(115200); //set baud rate to 115200 for usart

  Serial.print("MOSI: ");
  Serial.println(MOSI);
  Serial.print("MISO: ");
  Serial.println(MISO);
  Serial.print("SCK: ");
  Serial.println(SCK);
  Serial.print("SS: ");
  Serial.println(SS);  
  
   pinMode(SS, OUTPUT);
 
   pinMode(SCK, OUTPUT);
   pinMode(MOSI, OUTPUT);
   pinMode(MISO, INPUT);
 
   digitalWrite(SS, HIGH); // disable Slave Select
   SPI.begin (SCK,MISO,MOSI);
   SPI.setBitOrder(MSBFIRST);
   SPI.setDataMode(SPI_MODE0);
   SPI.setClockDivider(SPI_CLOCK_DIV8); //divide the clock by 8=2 MHz 
   reciveData[5]= {0};

   //reciveData=SPI.transfer(1);
}

void loop (void) {

      delay(250); 
      Serial.println("Sending 1: ");c+=5; if(c>100)c=0;
      
      digitalWrite(SS, LOW); // enable Slave Select

      reciveData[0]=SPI.transfer(c);
      reciveData[1]=SPI.transfer(c+1);
      reciveData[2]=SPI.transfer(c+2);
      reciveData[3]=SPI.transfer(c+3);
      reciveData[4]=SPI.transfer(c+4);

      digitalWrite(SS, HIGH); // disable Slave Select
 
      Serial.print(reciveData[0]);Serial.print(" ");
      Serial.print(reciveData[1]);Serial.print(" ");
      Serial.print(reciveData[2]);Serial.print(" ");
      Serial.print(reciveData[3]);Serial.print(" ");
      Serial.print(reciveData[4]);Serial.print(" "); 
  }

Benzer Konular (5)