SI 4432 + stm32 + Arduino как завести оба SPI интерфейса ?

electro24
Offline
Зарегистрирован: 21.05.2018

Добрый день народ, кто сталкивался с этим или сможет подсказать. Пытаюсь для начала завести модуль si4432  на mapple плате stm32f103cbt6 используя либу http://www.airspayce.com/mikem/arduino/RadioHead/classRH__RF22.html#   На обычной ардуине всё работает, а с крайним аддоном  Роджера Кларка  нивкакую не хочет работать, сыплет ошибки про SPI . Я в курсе что у мапла 2 хардварных SPI , подскажите как в этой либе хотябы один программный spi правильно запустить, уже весь мозг вынесла эта библиотека, да и примера там нету с программным spi, точнее есть несколько строк кода не особо рабочих от слова совсем.

// rf22_client.pde
// Example sketch showing how to create a simple messageing client
// with the RH_RF22 class. RH_RF22 class does not provide for addressing or
// reliability, so you should only use RH_RF22 if you do not need the higher
// level messaging abilities.
// It is designed to work with the other example rf22_server
// Tested on Duemilanove, Uno with Sparkfun RFM22 wireless shield
// Tested on Flymaple with sparkfun RFM22 wireless shield
// Tested on ChiKit Uno32 with sparkfun RFM22 wireless shield
#include <SPI.h>
#include <RH_RF22.h>
#include <RHSoftwareSPI.h>
#include <RHReliableDatagram.h>
RHSoftwareSPI spi;
RH_RF22 rf22(PA15, PA14, spi);    // SS, INT .. 
//SPI по умолчанию SCK - PB3, MOSI - PB5, MISO - PB4
RHReliableDatagram manager(rf22, 0);
 void setup() 
{
  spi.setPins(PB3, PB5, PB4); // Or whatever SPI pins you need
  //SPI1 по умолчанию: SCK - PB3, MOSI - PB5, MISO - PB4
  Serial.begin(9600);
  if (!rf22.init()) // по умолчанию, мощьность 8DBM, частота 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
    Serial.println("init failed");  
  

  rf22.setTxPower(RH_RF22_TXPOW_14DBM);             // RH_RF22_TXPOW_1DBM 
                                                    // RH_RF22_TXPOW_2DBM 
                                                    // RH_RF22_TXPOW_5DBM 
                                                    // RH_RF22_TXPOW_8DBM 
                                                    // RH_RF22_TXPOW_11DBM 
                                                    // RH_RF22_TXPOW_14DBM 
                                                    // RH_RF22_TXPOW_17DBM 
                                                    // RH_RF22_TXPOW_20DBM                        
  rf22.setFrequency(433.0, 0.1);                  // частота 433.0мгц, шаг с автоподстройкой в 100кгц (по умолчанию 0,05)
                    
  rf22.setModemConfig(RH_RF22::GFSK_Rb2_4Fd36);     // скорость и модуляция, Rb = 2.4kbs, Fd = 36kHz. 
                          }

void loop()
{
  Serial.println("Sending to rf22_server");
  // Send a message to rf22_server
  uint8_t data[] = "Hello World!";
  rf22.send(data, sizeof(data));
  
  rf22.waitPacketSent();
  // Now wait for a reply
  uint8_t buf[RH_RF22_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);

  if (rf22.waitAvailableTimeout(500))
  { 
    // Should be a reply message for us now   
    if (rf22.recv(buf, &len))
    {
      Serial.print("got reply: ");
      Serial.println((char*)buf);
    }
    else
    {
      Serial.println("recv failed");
    }
  }
  else
  {
    Serial.println("No reply, is rf22_server running?");
  }
  delay(400);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

точно не помню, но по-моему поддержки программного СПИ у Кларка нет

если на стм аж 2 апппаратных SPI - зачем вам программный? -

electro24
Offline
Зарегистрирован: 21.05.2018

Тупанул, глянул пример рабочего SPI в библиотеке примеров, его инициализировать оказывается надо ручками для стма, а то привыкли все что обычно само всё работает)) Щас ещё помучаюсь с кодом:)

Не работает SPI с этой библиотекой, подскажите что делать? Только программный SPI походу поможет, как его запустить на СТМ32?

#include <SPI.h>
#include <RH_RF22.h>
#include <RHSoftwareSPI.h>
#define SPI1_NSS_PIN PA4    //SPI_1 Chip Select pin is PA4. You can change it to the STM32 pin you want.
//RHSoftwareSPI spi;
RH_RF22 rf22(PA4, PB0);    // SS, INT .. 
//RHReliableDatagram manager(rf22, 0);
 void setup() 
{
  //spi.setPins(PA7, PA6, PA5); // Or whatever SPI pins you need
  // Setup SPI 1
  SPI.begin(); //Initialize the SPI_1 port.
  SPI.setBitOrder(MSBFIRST); // Set the SPI_1 bit order
  SPI.setDataMode(SPI_MODE0); //Set the  SPI_2 data mode 0
  SPI.setClockDivider(SPI_CLOCK_DIV16);      // Slow speed (72 / 16 = 4.5 MHz SPI_1 speed)
  pinMode(SPI1_NSS_PIN, OUTPUT);

    
  Serial.begin(9600);
  if (!rf22.init()) // по умолчанию, мощьность 8DBM, частота 434.0MHz, 0.05MHz AFC pull-in, modulation FSK_Rb2_4Fd36
    Serial.println("init failed");  
  

  rf22.setTxPower(RH_RF22_TXPOW_14DBM);             // RH_RF22_TXPOW_1DBM 
                                                    // RH_RF22_TXPOW_2DBM 
                                                    // RH_RF22_TXPOW_5DBM 
                                                    // RH_RF22_TXPOW_8DBM 
                                                    // RH_RF22_TXPOW_11DBM 
                                                    // RH_RF22_TXPOW_14DBM 
                                                    // RH_RF22_TXPOW_17DBM 
                                                    // RH_RF22_TXPOW_20DBM                        
  rf22.setFrequency(433.0, 0.1);                  // частота 433.0мгц, шаг с автоподстройкой в 100кгц (по умолчанию 0,05)
                    
  rf22.setModemConfig(RH_RF22::GFSK_Rb2_4Fd36);     // скорость и модуляция, Rb = 2.4kbs, Fd = 36kHz. 
                         }

void loop()
{
  Serial.println("Sending to rf22_server");
  // Send a message to rf22_server
  uint8_t data[] = "Hello World!";
  rf22.send(data, sizeof(data));
  
  rf22.waitPacketSent();
  // Now wait for a reply
  uint8_t buf[RH_RF22_MAX_MESSAGE_LEN];
  uint8_t len = sizeof(buf);

  if (rf22.waitAvailableTimeout(500))
  { 
    // Should be a reply message for us now   
    if (rf22.recv(buf, &len))
    {
      Serial.print("got reply: ");
      Serial.println((char*)buf);
    }
    else
    {
      Serial.println("recv failed");
    }
  }
  else
  {
    Serial.println("No reply, is rf22_server running?");
  }
  delay(400);
}

 

b707
Offline
Зарегистрирован: 26.05.2017

по программному SPI не подскажу, а по аппаратному - на гитхабе библиотеки RadioHead есть пример запуска кода для STM32F4 - попробуйте адаптировать его под STM32f1

Реально надо написать инициализацию и функцию transfer. вроде все

electro24
Offline
Зарегистрирован: 21.05.2018

 Короче почитал форумы буржуйские и там сам Кларк пишет что в библиотеке RadioHead не так как надо SPI хардварный реализован, короче эта либа без ковыряния и модификации библиотек  HardwareSPI  НЕ БУДЕТ РАБОТАТЬ с стм32, а жаль(((  https://github.com/rogerclarkmelbourne/Arduino_STM32/issues/14       https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Libraries