SI 4432 + stm32 + Arduino как завести оба SPI интерфейса ?
- Войдите на сайт для отправки комментариев
Пнд, 16/03/2020 - 18:18
Добрый день народ, кто сталкивался с этим или сможет подсказать. Пытаюсь для начала завести модуль 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);
}
точно не помню, но по-моему поддержки программного СПИ у Кларка нет
если на стм аж 2 апппаратных SPI - зачем вам программный? -
Тупанул, глянул пример рабочего 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); }по программному SPI не подскажу, а по аппаратному - на гитхабе библиотеки RadioHead есть пример запуска кода для STM32F4 - попробуйте адаптировать его под STM32f1
Реально надо написать инициализацию и функцию transfer. вроде все
Короче почитал форумы буржуйские и там сам Кларк пишет что в библиотеке RadioHead не так как надо SPI хардварный реализован, короче эта либа без ковыряния и модификации библиотек HardwareSPI НЕ БУДЕТ РАБОТАТЬ с стм32, а жаль((( https://github.com/rogerclarkmelbourne/Arduino_STM32/issues/14 https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Libraries