RFM69

Патафикс
Пт 25 ноября 2016 г., 2:03
Привет, я здесь новичок. Я использую https: // github.com/lowpowerlab/rfm69 Однако на моем нынешнем решении AVR оно трудно реализовать его на Maple Mini. Есть эта библиотека https: // github.com/ahessling/rfm69-stm32 который был реализован в простом C ++, однако это не особенно хорошо документировано.
Любой шанс у кого -то уже есть, или может дать несколько советов относительно того, с чего начать? Мне удается скомпилировать его без ошибок, но как только я загружаю его в Maple Mini Clone - он просто перестает отвечать, поэтому я знаю, что где -то все испортил.

Это очень упрощенная библиотека (LowpowerLab One), но у меня не было опыта MCUS, поэтому любые советы будут очень оценены.

Rogerclark
Пт 25 ноября 2016 г., 3:13
Вы можете попробовать использовать HAL Core для STM32 и библиотеки Non Arduino

https: // github.com/ahessling/rfm69-stm32

Но похоже, что она может использовать старую стандартную периферийную библиотеку, а не новую STM HAL, поэтому переносить ее в HAL может быть не таким простым.

Инструкции для HAL Core - см, ViewTopic.PHP?f = 16&t = 1553
Но вам нужно скачать филиал в работе в работе https: // github.com/stm32duino/arduino_c ... 1/дерево/WIP

В качестве альтернативы придерживаться Libmaple, тогда о вашем единственном выборе, если у вас нет способа использовать отладчик GNU (GDB), используя Stlink и т. Д.

Если просто включение файлов заставит его повесить, то проблема, вероятно, будет в конструкторе, особенно если он пытается хранить ссылки на выводы до настройки ()

Стивестронг
Пт 25 ноября 2016 г. 8:34
Патафикс написал:Мне удается скомпилировать его без ошибок, но как только я загружаю его в Maple Mini Clone - он просто перестает отвечать, поэтому я знаю, что где -то все испортил.

Патафикс
Пт 25 ноября 2016 г., 9:12
Спасибо за ваши ответы.

Он висит в конструкторе, так как я не могу получить сериал.начало (115200); Сериал.print ("Start"); Чтобы отобразить что -нибудь @ setup ().
Я попробую еще раз на выходных.

Еще пара вопросов: // select the RFM69 transceiver (save SPI settings, set CS low) void RFM69::select() { noInterrupts(); #if defined (SPCR) && defined (SPSR) // save current SPI settings _SPCR = SPCR; _SPSR = SPSR; #endif // set RFM69 SPI settings SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); SPI.setClockDivider(SPI_CLOCK_DIV4); // decided to slow down from DIV2 after SPI stalling in some instances, especially visible on mega1284p when RFM69 and FLASH chip both present digitalWrite(_slaveSelectPin, LOW); } // unselect the RFM69 transceiver (set CS high, restore SPI settings) void RFM69::unselect() { digitalWrite(_slaveSelectPin, HIGH); // restore SPI settings to what they were before talking to RFM69 #if defined (SPCR) && defined (SPSR) SPCR = _SPCR; SPSR = _SPSR; #endif maybeInterrupts(); }

Стивестронг
Пт 25 ноября 2016 г., 10:29
Я бы порекомендовал подождать время после сериала.начинать(); (скажем, 6 секунд).
Или дождитесь серийного соединения: Serial.begin(); while ( !Serial.isConnected() ); Serial.print("start");

Патафикс
Пн 28 ноября 2016 г. 14:18
Интересное открытие. Пробовал что -нибудь простое - Читать значения регистрации от RFM69HW.
Возвращает все 0 значений, если я использую порт SPI1 (контакты 4-7) на Baite Maple Mini.
Возвращает ожидаемые значения, если я использую порт SPI2 (Pins 28-32) на Baite Maple Mini.

Проверьте все соединения и сигналы прибывают в припаянные булавки, возможно, это неисправная печатная плата, придется заказать еще один, чтобы проверить. Код для справки.

Работает: #include byte data; #define chipSelect 31 SPIClass spi(2); void setup() { 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(chipSelect, OUTPUT); Serial.println("aa"); } void loop() { readRegs(); delay(5000); } void readRegs() { byte regVal; for (byte regAddr = 1; regAddr <= 0x4F; regAddr++) { digitalWrite(chipSelect, LOW); // manually take CSN low for SPI_1 transmission spi.transfer(regAddr & 0x7f); // send address + r/w bit regVal = spi.transfer(0); digitalWrite(chipSelect, HIGH); // manually take CSN low for SPI_1 transmission Serial.print(regAddr, HEX); Serial.print(" - "); Serial.print(regVal,HEX); Serial.print(" - "); Serial.println(regVal,BIN); } }

Патафикс
Пн 28 ноября 2016 г., 17:10
ОК, быстрое обновление RFM69HW прекрасно работает на Baite Maple Mini. Пришлось изменить Spiclass, чтобы использовать SPI2 по умолчанию и прокомментировать #if defined (SPCR) && defined (SPSR) SPCR = _SPCR; SPSR = _SPSR; #endif

Стивестронг
Вт 29 ноября 2016 г. 9:20 утра
В общем, я бы порекомендовал вам использовать PXY (Ex. PA5) Конвенция о названии для определения GPIOS, а не простых чисел.

Стивестронг
Чт 16 февраля 2017 г., 22:48
@patafix,
Не могли бы вы опубликовать здесь LIB для RFM69, который вы перенесли для STM32F103?
Я спрашиваю об этом, потому что в настоящее время я также работаю с этим чипом и у меня есть проблемы.

ZMEMW16
Солнце 19 февраля 2017 г. 12:52 утра
SPI1 V SPI2 длинная, длинная нить ... ... ...
Никто не собирается упомянуть источник CLK и разделители ?
Попробуйте снова SPI1 со SPI_CLOCK_DIV32 ??
или понял неправильную идею из потока?


Стивен

Стивестронг
Солнце 19 февраля 2017 г. 11:55 утра
Моя проблема не была связана со SPI.
Приемная часть не сработала, как и ожидалось, но теперь, кажется, работает нормально.

ZMEMW16
Солнце 19 февраля 2017 г. 18:14
аполы
Разница в фрагментах была spi1 cf spi2, но они использовали тот же разделитель.
CLK в разделитель для SPI1 и SPI2?
Стивен

Стивестронг
Солнце 19 февраля 2017 г. 18:32
Я в основном использую настройки MIT BeginTransaction: // Start up SPI.setModule(1); // nRF905 SPI.beginTransaction(SPISettings(9000000)); nRF905_Init(); Serial.println(F("-> nRF905 initialised.")); Serial.print("Initialise RFM69..."); SPI.setModule(2); // RFM69 SPI.beginTransaction(SPISettings(9000000)); if ( !rfm69.begin(RFM69_CS, RFM69_RST) ) { ... }

ZMEMW16
Солнце 19 февраля 2017 г., 21:13
Стоит упомянуть :)

Каликс
Солнце 16 июля 2017 г. 8:13
У меня тоже проблемы на плате STM32L053R8. Эскиз компилирует ОК и работает на доске, но шлюз не получает никакого сообщения.
Я могу прочитать реестры и температуру от модуля RFM69HW.

Стивестронг
Солнце 16 июля 2017 г. 8:23
С RTL SDR Вы могли бы проверить, действительно ли работает часть TX.

Каликс
Солнце 16 июля 2017 г. 10:15 утра
Я не уверен насчет настройки IRQ. Библиотека, которую я пытаюсь использовать, такая: https: // github.com/brainelectronics/rfm69-stm32

PS: я только что проверил с помощью программного обеспечения SDRSHARP и ... Ничто не выходит из TX. (У меня есть другие узлы 433 МГц, и я ясно вижу, когда они передают).

IRLIB на STM32?