From 22867e01442d29fd5d6543a355c87fa4e7e27892 Mon Sep 17 00:00:00 2001 From: Niklas Hauser Date: Wed, 24 Jul 2019 18:53:17 +0200 Subject: [PATCH] [examples] Update NRF24 examples --- examples/README.md | 2 +- examples/nucleo_f411re/radio/lbuild.xml | 10 + .../radio/nrf24-basic-comm/main.cpp | 150 +++++++++++ .../radio/nrf24-basic-comm/project.xml | 8 + .../nucleo_f411re/radio/nrf24-data/main.cpp | 48 ++++ .../radio/nrf24-data/project.xml | 8 + .../radio/nrf24-phy-test/main.cpp | 60 +++++ .../radio/nrf24-phy-test/project.xml | 8 + .../radio/nrf24-scanner/main.cpp | 89 ++----- .../radio/nrf24-scanner/project.xml | 8 + examples/nucleo_f411re/radio/radio.hpp | 163 ++++++++++++ .../radio/nrf24-basic-comm/main.cpp | 234 ------------------ .../radio/nrf24-basic-comm/project.xml | 16 -- .../radio/nrf24-data/README.md | 29 --- .../radio/nrf24-data/rx/main.cpp | 138 ----------- .../radio/nrf24-data/rx/project.xml | 15 -- .../radio/nrf24-data/tx/main.cpp | 138 ----------- .../radio/nrf24-data/tx/project.xml | 15 -- .../radio/nrf24-phy-test/main.cpp | 106 -------- .../radio/nrf24-phy-test/project.xml | 14 -- .../radio/nrf24-scanner/project.xml | 15 -- 21 files changed, 481 insertions(+), 793 deletions(-) create mode 100644 examples/nucleo_f411re/radio/lbuild.xml create mode 100644 examples/nucleo_f411re/radio/nrf24-basic-comm/main.cpp create mode 100644 examples/nucleo_f411re/radio/nrf24-basic-comm/project.xml create mode 100644 examples/nucleo_f411re/radio/nrf24-data/main.cpp create mode 100644 examples/nucleo_f411re/radio/nrf24-data/project.xml create mode 100644 examples/nucleo_f411re/radio/nrf24-phy-test/main.cpp create mode 100644 examples/nucleo_f411re/radio/nrf24-phy-test/project.xml rename examples/{stm32f4_discovery => nucleo_f411re}/radio/nrf24-scanner/main.cpp (52%) create mode 100644 examples/nucleo_f411re/radio/nrf24-scanner/project.xml create mode 100644 examples/nucleo_f411re/radio/radio.hpp delete mode 100644 examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp delete mode 100644 examples/stm32f4_discovery/radio/nrf24-basic-comm/project.xml delete mode 100644 examples/stm32f4_discovery/radio/nrf24-data/README.md delete mode 100644 examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp delete mode 100644 examples/stm32f4_discovery/radio/nrf24-data/rx/project.xml delete mode 100644 examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp delete mode 100644 examples/stm32f4_discovery/radio/nrf24-data/tx/project.xml delete mode 100644 examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp delete mode 100644 examples/stm32f4_discovery/radio/nrf24-phy-test/project.xml delete mode 100644 examples/stm32f4_discovery/radio/nrf24-scanner/project.xml diff --git a/examples/README.md b/examples/README.md index e48d953228..6dc2b7e0e8 100644 --- a/examples/README.md +++ b/examples/README.md @@ -94,7 +94,7 @@ make gdb ## Interesting Examples -We have a lot of examples, 191 to be +We have a lot of examples, 190 to be exact, but here are some of our favorite examples for our supported development boards: diff --git a/examples/nucleo_f411re/radio/lbuild.xml b/examples/nucleo_f411re/radio/lbuild.xml new file mode 100644 index 0000000000..c411b50221 --- /dev/null +++ b/examples/nucleo_f411re/radio/lbuild.xml @@ -0,0 +1,10 @@ + + modm:nucleo-f411re + + modm:driver:nrf24 + modm:platform:spi:2 + modm:platform:spi:3 + modm:platform:timer:2 + modm:processing:timer + + diff --git a/examples/nucleo_f411re/radio/nrf24-basic-comm/main.cpp b/examples/nucleo_f411re/radio/nrf24-basic-comm/main.cpp new file mode 100644 index 0000000000..9dbf009f73 --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-basic-comm/main.cpp @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2014, Daniel Krebs + * Copyright (c) 2014, 2017, Sascha Schade + * Copyright (c) 2014-2019, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#include "../radio.hpp" + +/* + * Basic communication with least config possible + * + * In this example one module is configured as primary tx, so it will just send + * packets and never receive anything. The second module is configured as + * primary rx, so it will only receive packets. + */ + +using Register = Nrf1Phy::NrfRegister; +using Status = Nrf1Phy::Status; +using Pipe = Nrf1Phy::Pipe; +using Config = Nrf1Phy::Config; +using FifoStatus = Nrf1Phy::FifoStatus; + +int main() +{ + Board::initialize(); + MODM_LOG_INFO << "Hello from nrf24-basic-comm example" << modm::endl; + + /* Configuration values for nRF24 */ + /* Use channel 2400 + 60 MHz = 2460 MHz */ + constexpr const uint8_t rf_channel = 60; + + /* 4 byte payload length */ + constexpr const uint8_t payload_length = 4; + + /* Address for ptx module. Not used here because ptx won't receive packets */ + // constexpr const uint64_t ptx_address = 0xB3B4B5B605; + constexpr const uint64_t prx_address = 0xB3B4B5B607; + + /* Dummy payload */ + uint8_t payload[payload_length] = { + 0xaa, + 0xbb, + 0xcc, + 0xdd + }; + + initializeSpi(); + + Nrf1Ce::set(); + Nrf2Ce::set(); + + // Initialize nRF24-HAL + Nrf1Phy::initialize(payload_length); + Nrf2Phy::initialize(payload_length); + + /* set RF channel */ + Nrf1Phy::writeRegister(Register::RF_CH, rf_channel); + Nrf2Phy::writeRegister(Register::RF_CH, rf_channel); + + /* Set payload length for pipe 1 on receiver */ + Nrf2Phy::writeRegister(Register::RX_PW_P1, payload_length); + + /* Set tx address of ptx device to prx's address and also set + * receive pipe 0 to the same address to receive ACK packets + * from prx. + */ + Nrf1Phy::setTxAddress(prx_address); + Nrf1Phy::setRxAddress(Pipe::PIPE_0, prx_address); + + /* Set receive pipe 1 of prx device to receive packets from ptx */ + Nrf2Phy::setRxAddress(Pipe::PIPE_1, prx_address); + + /* Configure ptx as primary sender and power up */ + Nrf1Phy::clearBits(Register::CONFIG, Config::PRIM_RX); + Nrf1Phy::setBits(Register::CONFIG, Config::PWR_UP); + + /* Configure prx as primary receiver and power up*/ + Nrf2Phy::setBits(Register::CONFIG, Config::PRIM_RX); + Nrf2Phy::setBits(Register::CONFIG, Config::PWR_UP); + + + /* Timer to send packets every 1000ms */ + modm::ShortPeriodicTimer sendPacket(1000); + + /* Buffer for received payload */ + uint8_t received_data[payload_length]; + + while (true) + { + // ------------------------- Primary sender --------------------------- + + /* Send packet every 1000ms */ + if(sendPacket.execute()) + { + /* Copy packet into ptx device. Because CE is always high here, the + * packet will be transmitted immediately + */ + Nrf1Phy::writeTxPayload(payload, payload_length); + payload[0]++; + + Board::LedD13::toggle(); + } + + /* Check if packet was sent successfully */ + if(Nrf1Phy::readStatus() & ((uint8_t)Status::TX_DS | (uint8_t)Status::MAX_RT)) + { + if(Nrf1Phy::readStatus() & (uint8_t)Status::MAX_RT) + { + MODM_LOG_INFO.printf("Packet lost, MAX_RT reached\n"); + MODM_LOG_INFO.printf(" Status: %x\n", Nrf1Phy::readStatus()); + Nrf1Phy::setBits(Register::STATUS, Status::MAX_RT); + MODM_LOG_INFO.printf(" Status: %x\n", Nrf1Phy::readStatus()); + } else + { + MODM_LOG_INFO.printf("Packet successfully sent\n"); + Nrf1Phy::setBits(Register::STATUS, Status::TX_DS); + } + + Board::LedD13::toggle(); + } + + + // ----------------------- Primary receiver --------------------------- + + /* Check for received bytes */ + if( (!(Nrf2Phy::readRegister(Register::FIFO_STATUS) & (uint8_t)FifoStatus::RX_EMPTY)) || (Nrf2Phy::readStatus() & ((uint8_t)Status::RX_DR))) + { + uint8_t pl = 0; + + /* Read payload of received packet */ + pl = Nrf2Phy::readRxPayload(received_data); + + /* Clear RX_DR flag after payload is read */ + Nrf2Phy::setBits(Register::STATUS, Status::RX_DR); + + MODM_LOG_INFO.printf("Received packet, pl=%d, data: %x %x %x %x\n", pl, received_data[3], received_data[2], received_data[1], received_data[0]); + + Board::LedD13::toggle(); + } + } + + return 0; +} diff --git a/examples/nucleo_f411re/radio/nrf24-basic-comm/project.xml b/examples/nucleo_f411re/radio/nrf24-basic-comm/project.xml new file mode 100644 index 0000000000..8cce1d3add --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-basic-comm/project.xml @@ -0,0 +1,8 @@ + + + + + + modm:build:scons + + diff --git a/examples/nucleo_f411re/radio/nrf24-data/main.cpp b/examples/nucleo_f411re/radio/nrf24-data/main.cpp new file mode 100644 index 0000000000..07856b4fda --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-data/main.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2015, Daniel Krebs + * Copyright (c) 2015, 2017, Sascha Schade + * Copyright (c) 2015-2019, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#include "../radio.hpp" + +// This example showcases a simple usage of the data layer implementation for +// the nRF24L01+ radio modules. + +int main() +{ + Board::initialize(); + MODM_LOG_INFO << "Hello from nrf24-data example" << modm::endl; + + initializeNrf(); + + while (true) + { + Nrf1Data::update(); + Nrf2Data::update(); + + static modm::PeriodicTimer sendTimer{1000}; + if (Nrf1Data::Packet packet; sendTimer.execute()) + { + static uint8_t counter{0}; + packet.setDestination(0x20); + packet.payload[0] = counter++; + Nrf1Data::sendPacket(packet); + MODM_LOG_INFO << "Sending packet " << counter << " to " << packet.getDestination() << modm::endl; + } + + if (Nrf2Data::Packet packet; Nrf2Data::getPacket(packet)) + { + MODM_LOG_INFO << "Receiving packet " << packet.payload[0] << " from " << packet.getSource() << modm::endl; + } + } + + return 0; +} diff --git a/examples/nucleo_f411re/radio/nrf24-data/project.xml b/examples/nucleo_f411re/radio/nrf24-data/project.xml new file mode 100644 index 0000000000..2aa29628d4 --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-data/project.xml @@ -0,0 +1,8 @@ + + + + + + modm:build:scons + + diff --git a/examples/nucleo_f411re/radio/nrf24-phy-test/main.cpp b/examples/nucleo_f411re/radio/nrf24-phy-test/main.cpp new file mode 100644 index 0000000000..7d52f27204 --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-phy-test/main.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014, Daniel Krebs + * Copyright (c) 2014, 2017, Sascha Schade + * Copyright (c) 2014-2017, 2019, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#include "../radio.hpp" + +template< class Phy > +void +test() +{ + Phy::setRxAddress(Phy::Pipe::PIPE_0, 0xdeadb33f05); + uint64_t addr = Phy::getRxAddress(Phy::Pipe::PIPE_0); + MODM_LOG_INFO.printf("Setting RX_P0 address to: 0xdeadb33f05\n"); + MODM_LOG_INFO.printf("Reading RX_P0 address: 0x%" PRIx32 "%" PRIx32 "\n", + uint32_t((addr >> 32) & 0xffffffff), + uint32_t(addr & 0xffffffff)); + + Phy::setTxAddress(0xabcdef55ff); + addr = Phy::getTxAddress(); + MODM_LOG_INFO.printf("Setting TX address to: 0xabcdef55ff\n"); + MODM_LOG_INFO.printf("Reading TX address: 0x%" PRIx32 "%" PRIx32 "\n", + uint32_t((addr >> 32) & 0xffffffff), + uint32_t(addr & 0xffffffff)); + + uint8_t rf_ch = Phy::readRegister(Phy::NrfRegister::RF_CH); + MODM_LOG_INFO.printf("Expected output for RF_CH: 0x2\n"); + MODM_LOG_INFO.printf("Reading RF_CH: 0x%" PRIx8 "\n\n", rf_ch); +} + +// Test SPI communication by writing and reading out registers on the +// nRF24L01+ module. +int main() +{ + Board::initialize(); + MODM_LOG_INFO << "Hello from nRF24-phy-test example" << modm::endl; + + initializeSpi(); + + while (true) + { + MODM_LOG_INFO << "Testing PHY1" << modm::endl; + test(); + + MODM_LOG_INFO << "Testing PHY2" << modm::endl; + test(); + + modm::delayMilliseconds(1000); + } + + return 0; +} diff --git a/examples/nucleo_f411re/radio/nrf24-phy-test/project.xml b/examples/nucleo_f411re/radio/nrf24-phy-test/project.xml new file mode 100644 index 0000000000..ef5818a8b1 --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-phy-test/project.xml @@ -0,0 +1,8 @@ + + + + + + modm:build:scons + + diff --git a/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp b/examples/nucleo_f411re/radio/nrf24-scanner/main.cpp similarity index 52% rename from examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp rename to examples/nucleo_f411re/radio/nrf24-scanner/main.cpp index 963eec70ac..1a7c452b2d 100644 --- a/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp +++ b/examples/nucleo_f411re/radio/nrf24-scanner/main.cpp @@ -1,7 +1,7 @@ /* * Copyright (c) 2014, Daniel Krebs * Copyright (c) 2014, 2017, Sascha Schade - * Copyright (c) 2014-2018, Niklas Hauser + * Copyright (c) 2014-2019, Niklas Hauser * * This file is part of the modm project. * @@ -11,75 +11,20 @@ */ // ---------------------------------------------------------------------------- -#include -#include -#include -#include -#include -using namespace modm::literals; +#include "../radio.hpp" -/* - * A simple 2.4GHz "spectrum analyzer". Please use a terminal - * application for UART monitoring such as picocom or screen - * - * Connect as follows - * - * STM32 NRF24 - * ------------ - * PB13 - SCK - * PB14 - MISO - * PB15 - MOSI - * PE12 - CSN - * - * STM32 USB2UART - * --------------- - * PA2 - TXD - */ - -#undef MODM_LOG_LEVEL -#define MODM_LOG_LEVEL modm::log::INFO - - -// Create an IODeviceWrapper around the Uart Peripheral we want to use -modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; - -// Set all four logger streams to use the UART -modm::log::Logger modm::log::debug(loggerDevice); -modm::log::Logger modm::log::info(loggerDevice); -modm::log::Logger modm::log::warning(loggerDevice); -modm::log::Logger modm::log::error(loggerDevice); - -typedef GpioOutputE11 Ce; -typedef GpioOutputE12 Csn; +// A simple 2.4GHz "spectrum analyzer". Please use a terminal +// application for UART monitoring such as picocom or screen - - -typedef modm::Nrf24Phy nrf24phy; - - -int -main() +int main() { Board::initialize(); - - Csn::setOutput(modm::Gpio::High); - Ce::setOutput(modm::Gpio::Low); - - Board::LedOrange::setOutput(modm::Gpio::Low); - - // Enable SPI 2 - SpiMaster2::connect(); - SpiMaster2::initialize(); - - // Enable UART 2 - Usart2::connect(); - Usart2::initialize(); +// MODM_LOG_INFO << "Hello from nRF24 scanner example" << modm::endl; + initializeSpi(1); // Initialize nRF24-HAL - nrf24phy::initialize(); - -// MODM_LOG_INFO << "Hello from nRF24-HAL example" << modm::endl; + Nrf1Phy::initialize(); /* @@ -89,11 +34,11 @@ main() * puts("\033[5A"); // move cursor up 5 lines */ - nrf24phy::setBits(nrf24phy::NrfRegister::CONFIG, nrf24phy::Config::PWR_UP); - nrf24phy::setBits(nrf24phy::NrfRegister::CONFIG, nrf24phy::Config::PRIM_RX); + Nrf1Phy::setBits(Nrf1Phy::NrfRegister::CONFIG, Nrf1Phy::Config::PWR_UP); + Nrf1Phy::setBits(Nrf1Phy::NrfRegister::CONFIG, Nrf1Phy::Config::PRIM_RX); - nrf24phy::writeRegister(nrf24phy::NrfRegister::EN_AA, 0x00); - nrf24phy::writeRegister(nrf24phy::NrfRegister::RF_SETUP, 0x0f); + Nrf1Phy::writeRegister(Nrf1Phy::NrfRegister::EN_AA, 0x00); + Nrf1Phy::writeRegister(Nrf1Phy::NrfRegister::RF_SETUP, 0x0f); constexpr const uint8_t channel_start = 25; @@ -131,19 +76,19 @@ main() max = 0; for(i = 0; i < max_channel; i++) { - nrf24phy::writeRegister(nrf24phy::NrfRegister::RF_CH, i + channel_start); + Nrf1Phy::writeRegister(Nrf1Phy::NrfRegister::RF_CH, i + channel_start); - Ce::set(); + Nrf1Ce::set(); modm::delayMicroseconds(rx_settle); - Ce::reset(); + Nrf1Ce::reset(); modm::delayMicroseconds(2); - channel_info[i] += 5*nrf24phy::readRegister(nrf24phy::NrfRegister::RPD); + channel_info[i] += 5*Nrf1Phy::readRegister(Nrf1Phy::NrfRegister::RPD); if(channel_info[i] > max) max = channel_info[i]; if(channel_info[i]) - Board::LedOrange::toggle(); + Board::LedD13::toggle(); if(divide_now) channel_info[i] /= divider; diff --git a/examples/nucleo_f411re/radio/nrf24-scanner/project.xml b/examples/nucleo_f411re/radio/nrf24-scanner/project.xml new file mode 100644 index 0000000000..671be131c7 --- /dev/null +++ b/examples/nucleo_f411re/radio/nrf24-scanner/project.xml @@ -0,0 +1,8 @@ + + + + + + modm:build:scons + + diff --git a/examples/nucleo_f411re/radio/radio.hpp b/examples/nucleo_f411re/radio/radio.hpp new file mode 100644 index 0000000000..9a6ba02ce0 --- /dev/null +++ b/examples/nucleo_f411re/radio/radio.hpp @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2019, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#pragma once + +#include +#include +#include +using namespace modm::literals; + + +class ClockUs +{ +public: + typedef uint32_t Type; + using ClockUsTimer = modm::platform::Timer2; + +public: + template< class SystemClock > + static void + enable() + { + ClockUsTimer::enable(); + ClockUsTimer::setMode(ClockUsTimer::Mode::UpCounter); + ClockUsTimer::setPrescaler(SystemClock::Timer2 / 1_MHz); + ClockUsTimer::setOverflow((uint32_t)-1); + ClockUsTimer::applyAndReset(); + + setTime(0); + ClockUsTimer::start(); + } + + template< typename TimestampType = modm::Timestamp > + static TimestampType + now() + { return TimestampType(ClockUsTimer::getValue()); } + + static void + setTime(const Type time) + { ClockUsTimer::setValue(time); } +}; + + +using Nrf1Spi = SpiMaster3; +using Nrf1Sck = Board::D3; +using Nrf1Mosi = Board::D4; +using Nrf1Miso = Board::D5; +using Nrf1Csn = Board::D6; +using Nrf1Ce = Board::D7; +using Nrf1Irq = Board::D8; + +using Nrf1Phy = modm::Nrf24Phy; +using Nrf1Config = modm::Nrf24Config; +using Nrf1Data = modm::Nrf24Data; + + +// This must normally be declared in a .cpp file, NOT a header file +MODM_ISR(EXTI9_5) // From PA9 +{ + Nrf1Irq::acknowledgeExternalInterruptFlag(); + Board::LedD13::toggle(); + Nrf1Data::interruptHandler(); +} + +using Nrf2Spi = SpiMaster2; +using Nrf2Sck = GpioB13; +using Nrf2Mosi = GpioB15; +using Nrf2Miso = GpioB14; +using Nrf2Csn = GpioB1; +using Nrf2Ce = GpioB2; +using Nrf2Irq = GpioB12; + +using Nrf2Phy = modm::Nrf24Phy; +using Nrf2Config = modm::Nrf24Config; +using Nrf2Data = modm::Nrf24Data; + +MODM_ISR(EXTI15_10) // From PB12 +{ + Nrf2Irq::acknowledgeExternalInterruptFlag(); + Board::LedD13::toggle(); + Nrf2Data::interruptHandler(); +} + +void inline +initializeSpi(uint8_t instances=0b11) +{ + Board::LedD13::setOutput(modm::Gpio::Low); + ClockUs::enable(); + + if (instances & 0b01) + { + MODM_LOG_INFO << "Initializing SPI #1..." << modm::endl; + + Nrf1Csn::setOutput(modm::Gpio::High); + Nrf1Ce::setOutput(modm::Gpio::Low); + + Nrf1Spi::connect(); + Nrf1Spi::initialize(); + } + + if (instances & 0b10) + { + MODM_LOG_INFO << "Initializing SPI #2..." << modm::endl; + + Nrf2Csn::setOutput(modm::Gpio::High); + Nrf2Ce::setOutput(modm::Gpio::Low); + + Nrf2Spi::connect(); + Nrf2Spi::initialize(); + } +} + +static constexpr uint8_t nrf_address1{0x10}; +static constexpr uint8_t nrf_address2{0x20}; + +void inline +initializeNrf(uint8_t instances=0b11, uint8_t address1=nrf_address1, uint8_t address2=nrf_address2, uint8_t channel=20) +{ + initializeSpi(instances); + + if (instances & 0b01) + { + MODM_LOG_INFO.printf("Initializing NRF24 #1 with address %d on channel %d...\n", address1, channel); + + Nrf1Data::initialize(0xdeadbeef00, address1, 0xFF); + + Nrf1Config::setChannel(channel); + Nrf1Config::setAutoRetransmitCount(Nrf1Config::AutoRetransmitCount::Retransmit3); + Nrf1Config::setAutoRetransmitDelay(Nrf1Config::AutoRetransmitDelay::us500); + Nrf1Config::setSpeed(Nrf1Config::Speed::MBps1); + Nrf1Config::setCrc(Nrf1Config::Crc::Crc2Byte); + + Nrf1Irq::setInput(Nrf1Irq::InputType::PullUp); + Nrf1Irq::setInputTrigger(Nrf1Irq::InputTrigger::FallingEdge); + Nrf1Irq::enableExternalInterrupt(); + Nrf1Irq::enableExternalInterruptVector(4); + } + if (instances & 0b10) + { + MODM_LOG_INFO.printf("Initializing NRF24 #2 with address %d on channel %d...\n", address2, channel); + + Nrf2Data::initialize(0xdeadbeef00, address2, 0xFF); + + Nrf2Config::setChannel(channel); + Nrf2Config::setAutoRetransmitCount(Nrf2Config::AutoRetransmitCount::Retransmit3); + Nrf2Config::setAutoRetransmitDelay(Nrf2Config::AutoRetransmitDelay::us500); + Nrf2Config::setSpeed(Nrf2Config::Speed::MBps1); + Nrf2Config::setCrc(Nrf2Config::Crc::Crc2Byte); + + Nrf2Irq::setInput(Nrf2Irq::InputType::PullUp); + Nrf2Irq::setInputTrigger(Nrf2Irq::InputTrigger::FallingEdge); + Nrf2Irq::enableExternalInterrupt(); + Nrf2Irq::enableExternalInterruptVector(5); + } +} diff --git a/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp b/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp deleted file mode 100644 index 0edc1f0ebc..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (c) 2014, Daniel Krebs - * Copyright (c) 2014, 2017, Sascha Schade - * Copyright (c) 2014-2018, Niklas Hauser - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#include -#include -#include -#include - -#include -using namespace modm::literals; - -using modm::Nrf24Register; -using modm::Nrf24Phy; - -/* - * Basic communication with least config possible - * - * In this example one module is configured as primary tx, so it will just send - * packets and never receive anything. The second module is configured as - * primary rx, so it will only receive packets. - * - * - * Connect as follows - * - * STM32 NRF24 module 1 - * ------------ - * PB3 - SCK - * PB4 - MISO - * PB5 - MOSI - * PB6 - CSN - * PB7 - CE - * - * STM32 NRF24 module 2 - * ------------ - * PB13 - SCK - * PB14 - MISO - * PB15 - MOSI - * PE12 - CSN - * - * STM32 USB2UART - * --------------- - * PA2 - TXD - */ - -#undef MODM_LOG_LEVEL -#define MODM_LOG_LEVEL modm::log::INFO - -// Create an IODeviceWrapper around the Uart Peripheral we want to use -modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; - -// Set all four logger streams to use the UART -modm::log::Logger modm::log::debug(loggerDevice); -modm::log::Logger modm::log::info(loggerDevice); -modm::log::Logger modm::log::warning(loggerDevice); -modm::log::Logger modm::log::error(loggerDevice); - - -typedef GpioOutputB7 Ce1; -typedef GpioOutputB6 Csn1; - -typedef GpioOutputE11 Ce2; -typedef GpioOutputE12 Csn2; - - -typedef Nrf24Phy nrf24ptx; -typedef Nrf24Phy nrf24prx; - -typedef nrf24ptx::NrfRegister Register; -typedef nrf24ptx::NrfRegister_t Register_t; - -typedef nrf24ptx::Config Config; -typedef nrf24ptx::Status Status; -typedef nrf24ptx::Pipe Pipe; -typedef nrf24ptx::FifoStatus FifoStatus; - -void -configureBoth(Register_t reg, uint8_t value) -{ - nrf24ptx::writeRegister(reg, value); - nrf24prx::writeRegister(reg, value); -} - -int -main() -{ - Board::initialize(); - - Csn1::setOutput(modm::Gpio::High); - Csn2::setOutput(modm::Gpio::High); - Ce1::setOutput(modm::Gpio::Low); - Ce2::setOutput(modm::Gpio::Low); - - // Enable SPI 1 - SpiMaster1::connect(); - SpiMaster1::initialize(); - - // Enable SPI 2 - SpiMaster2::connect(); - SpiMaster2::initialize(); - - // Enable UART 2 - Usart2::connect(); - Usart2::initialize(); - - /* Configuration values for nRF24 */ - - /* Use channel 2400 + 60 MHz = 2460 MHz */ - constexpr const uint8_t rf_channel = 60; - - /* 4 byte payload length */ - constexpr const uint8_t payload_length = 4; - - /* Address for ptx module. Not used here because ptx won't receive packets */ - // constexpr const uint64_t ptx_address = 0xB3B4B5B605; - constexpr const uint64_t prx_address = 0xB3B4B5B607; - - /* Dummy payload */ - uint8_t payload[payload_length] = { - 0xaa, - 0xbb, - 0xcc, - 0xdd - }; - - // Initialize nRF24-HAL - nrf24ptx::initialize(payload_length); - nrf24prx::initialize(payload_length); - - - MODM_LOG_INFO << "Hello from nrf24-basic-comm example" << modm::endl; - - /* set RF channel */ - nrf24ptx::writeRegister(nrf24ptx::NrfRegister::RF_CH, rf_channel); - nrf24prx::writeRegister(nrf24prx::NrfRegister::RF_CH, rf_channel); - - /* Set payload length for pipe 1 on receiver */ - nrf24prx::writeRegister(Register::RX_PW_P1, payload_length); - - /* Set tx address of ptx device to prx's address and also set - * receive pipe 0 to the same address to receive ACK packets - * from prx. - */ - nrf24ptx::setTxAddress(prx_address); - nrf24ptx::setRxAddress(Pipe::PIPE_0, prx_address); - - /* Set receive pipe 1 of prx device to receive packets from ptx */ - nrf24prx::setRxAddress(Pipe::PIPE_1, prx_address); - - /* Configure ptx as primary sender and power up */ - nrf24ptx::clearBits(Register::CONFIG, Config::PRIM_RX); - nrf24ptx::setBits(Register::CONFIG, Config::PWR_UP); - - /* Configure prx as primary receiver and power up*/ - nrf24prx::setBits(Register::CONFIG, Config::PRIM_RX); - nrf24prx::setBits(Register::CONFIG, Config::PWR_UP); - - /* CE always high on both, so the module don't go to standby */ - Ce1::set(); - Ce2::set(); - - - /* Timer to send packets every 1000ms */ - modm::ShortPeriodicTimer sendPacket(1000); - - /* Buffer for received payload */ - uint8_t received_data[payload_length]; - - while (true) - { - // ------------------------- Primary sender --------------------------- - - /* Send packet every 1000ms */ - if(sendPacket.execute()) - { - /* Copy packet into ptx device. Because CE is always high here, the - * packet will be transmitted immediately - */ - nrf24ptx::writeTxPayload(payload, payload_length); - - payload[0]++; - - Board::LedOrange::toggle(); - } - - /* Check if packet was sent successfully */ - if(nrf24ptx::readStatus() & ((uint8_t)Status::TX_DS | (uint8_t)Status::MAX_RT)) - { - if(nrf24ptx::readStatus() & (uint8_t)Status::MAX_RT) - { - MODM_LOG_INFO.printf("Packet lost, MAX_RT reached\n"); - MODM_LOG_INFO.printf(" Status: %x\n", nrf24ptx::readStatus()); - nrf24ptx::setBits(Register::STATUS, Status::MAX_RT); - MODM_LOG_INFO.printf(" Status: %x\n", nrf24ptx::readStatus()); - } else - { - MODM_LOG_INFO.printf("Packet successfully sent\n"); - nrf24ptx::setBits(Register::STATUS, Status::TX_DS); - } - - Board::LedBlue::toggle(); - } - - - // ----------------------- Primary receiver --------------------------- - - /* Check for received bytes */ - if( (!(nrf24prx::readRegister(Register::FIFO_STATUS) & (uint8_t)FifoStatus::RX_EMPTY)) || (nrf24prx::readStatus() & ((uint8_t)Status::RX_DR))) - { - uint8_t pl = 0; - - /* Read payload of received packet */ - pl = nrf24prx::readRxPayload(received_data); - - /* Clear RX_DR flag after payload is read */ - nrf24prx::setBits(Register::STATUS, Status::RX_DR); - - MODM_LOG_INFO.printf("Received packet, pl=%d, data: %x %x %x %x\n", pl, received_data[3], received_data[2], received_data[1], received_data[0]); - - Board::LedGreen::toggle(); - } - } - - return 0; -} diff --git a/examples/stm32f4_discovery/radio/nrf24-basic-comm/project.xml b/examples/stm32f4_discovery/radio/nrf24-basic-comm/project.xml deleted file mode 100644 index ee99bd0a68..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-basic-comm/project.xml +++ /dev/null @@ -1,16 +0,0 @@ - - modm:disco-f407vg - - - - - modm:debug - modm:driver:nrf24 - modm:platform:gpio - modm:platform:spi:1 - modm:platform:spi:2 - modm:platform:uart:2 - modm:processing:timer - modm:build:scons - - diff --git a/examples/stm32f4_discovery/radio/nrf24-data/README.md b/examples/stm32f4_discovery/radio/nrf24-data/README.md deleted file mode 100644 index b283370317..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-data/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# nrf24 data layer example - - This example showcases a simple usage of the data layer implementation for -the nRF24L01+ radio modules. - -You need 2 STM32F4 Discovery boards wired up like it's described at the top of -each main.cpp inside 'rx' and 'tx' folder. - - -## Expected output of tx: - -[...] -Send packet -Send packet -Send packet -[...] - - -## Expected output of rx: - -[...] -Received packet from 0x11 -Data: 00 00 02 34 -Received packet from 0x11 -Data: 00 00 02 35 -Rx is still alive -Received packet from 0x11 -Data: 00 00 02 36 -[...] \ No newline at end of file diff --git a/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp b/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp deleted file mode 100644 index 2558c2efae..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2015, Daniel Krebs - * Copyright (c) 2015, 2017, Sascha Schade - * Copyright (c) 2015-2018, Niklas Hauser - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#include -#include -#include - -#include -#include -#include - -using namespace modm::literals; - -/* - * This example showcases a simple usage of the data layer implementation for - * the nRF24L01+ radio modules. - * - * Check output on UART. - * - * Connect as follows - * - * STM32 NRF24 - * ------------ - * PB13 - SCK - * PB14 - MISO - * PB15 - MOSI - * PE11 - CE - * PE12 - CSN - * - * STM32 USB2UART - * --------------- - * PA2 - TXD - */ - -#undef MODM_LOG_LEVEL -#define MODM_LOG_LEVEL modm::log::INFO - - -// Create an IODeviceWrapper around the Uart Peripheral we want to use -modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; - -// Set all four logger streams to use the UART -modm::log::Logger modm::log::debug(loggerDevice); -modm::log::Logger modm::log::info(loggerDevice); -modm::log::Logger modm::log::warning(loggerDevice); -modm::log::Logger modm::log::error(loggerDevice); - -/* nrf24 interface */ -typedef SpiMaster2 Spi; -typedef GpioOutputE12 Csn; -typedef GpioOutputE11 Ce; - -/* Setup and connect layers */ -typedef modm::Nrf24Phy nrf24phy; -typedef modm::Nrf24Config nrf24config; -typedef modm::Nrf24Data nrf24data; - -int -main() -{ - Board::initialize(); - - // Setup GPIOs - Csn::setOutput(modm::Gpio::High); - Ce::setOutput(modm::Gpio::Low); - - // Enable SPI 2 - Spi::connect(); - Spi::initialize(); - - // Enable UART 2 - Usart2::connect(); - Usart2::initialize(); - - MODM_LOG_INFO << "Hello from nrf24-data-rx example" << modm::endl; - - // Send alive message every 5 seconds - modm::PeriodicTimer aliveTimer(5000); - - // Initialize physical layer with payload size of 6 bytes, this gives us - // a payload size of 4 bytes in the data layer, as the header takes 2 bytes. - nrf24phy::initialize(6); - - // This is the base address of our network, imagine this as an IP subnet - // like 192.168.1.0/24. Coincidentally, our the network also has 256 - // addresses. The lower byte should be zero because addresses will be placed - // there. - nrf24data::BaseAddress base_address = 0xdeadbeef00; - - // We need to define a broadcast address, this can be any address. - nrf24data::Address broadcast_address = 0xff; - - // Now we define the addresses of our 2 endpoints in this example. - // nrf24data::Address address_tx_side = 0x11; - nrf24data::Address address_rx_side = 0x33; - - // Initialize data layer, this also rudimentary configures the physical - // layer (e.g. speed, crc) so we just need to set a channel and are good to - // go. - nrf24data::initialize(base_address, address_rx_side, broadcast_address); - nrf24config::setChannel(10); - - // Using the data layer, we send and receive packets, so we need to allocate - // one. It's automatically allocated with the max. payload length configured. - nrf24data::Packet packet; - - while (true) - { - if (nrf24data::getPacket(packet)) - { - MODM_LOG_INFO.printf("Received packet from 0x%02x\n", packet.src); - MODM_LOG_INFO.printf("Data: %02x %02x %02x %02x\n", - packet.payload.data[3], - packet.payload.data[2], - packet.payload.data[1], - packet.payload.data[0]); - } - - if(aliveTimer.execute()) - { - MODM_LOG_INFO << "Rx is still alive" << modm::endl; - } - - nrf24data::update(); - } - - return 0; -} diff --git a/examples/stm32f4_discovery/radio/nrf24-data/rx/project.xml b/examples/stm32f4_discovery/radio/nrf24-data/rx/project.xml deleted file mode 100644 index a9b42ce730..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-data/rx/project.xml +++ /dev/null @@ -1,15 +0,0 @@ - - modm:disco-f407vg - - - - - modm:debug - modm:driver:nrf24 - modm:platform:gpio - modm:platform:spi:2 - modm:platform:uart:2 - modm:processing:timer - modm:build:scons - - diff --git a/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp b/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp deleted file mode 100644 index 19d9951c69..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright (c) 2015, Daniel Krebs - * Copyright (c) 2015, Sascha Schade - * Copyright (c) 2015-2018, Niklas Hauser - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#include -#include -#include - -#include -#include -#include - -using namespace modm::literals; - -/* - * This example showcases a simple usage of the data layer implementation for - * the nRF24L01+ radio modules. - * - * Check output on UART. - * - * Connect as follows - * - * STM32 NRF24 - * ------------ - * PB13 - SCK - * PB14 - MISO - * PB15 - MOSI - * PE11 - CE - * PE12 - CSN - * - * STM32 USB2UART - * --------------- - * PA2 - TXD - */ - -#undef MODM_LOG_LEVEL -#define MODM_LOG_LEVEL modm::log::INFO - - -// Create an IODeviceWrapper around the Uart Peripheral we want to use -modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; - -// Set all four logger streams to use the UART -modm::log::Logger modm::log::debug(loggerDevice); -modm::log::Logger modm::log::info(loggerDevice); -modm::log::Logger modm::log::warning(loggerDevice); -modm::log::Logger modm::log::error(loggerDevice); - -/* nrf24 interface */ -typedef SpiMaster2 Spi; -typedef GpioOutputE12 Csn; -typedef GpioOutputE11 Ce; - -/* Setup and connect layers */ -typedef modm::Nrf24Phy nrf24phy; -typedef modm::Nrf24Config nrf24config; -typedef modm::Nrf24Data nrf24data; - -int -main() -{ - Board::initialize(); - - // Setup GPIOs - Csn::setOutput(modm::Gpio::High); - Ce::setOutput(modm::Gpio::Low); - - // Enable SPI 2 - Spi::connect(); - Spi::initialize(); - - // Enable UART 2 - Usart2::connect(); - Usart2::initialize(); - - MODM_LOG_INFO << "Hello from nrf24-data-tx example" << modm::endl; - - // Send a packet every 500ms - modm::PeriodicTimer sendTimer(500); - - // Initialize physical layer with payload size of 6 bytes, this gives us - // a payload size of 4 bytes in the data layer, as the header takes 2 bytes. - nrf24phy::initialize(6); - - // This is the base address of our network, imagine this as an IP subnet - // like 192.168.1.0/24. Coincidentally, our the network also has 256 - // addresses. The lower byte should be zero because addresses will be placed - // there. - nrf24data::BaseAddress base_address = 0xdeadbeef00; - - // We need to define a broadcast address, this can be any address. - nrf24data::Address broadcast_address = 0xff; - - // Now we define the addresses of our 2 endpoints in this example. - nrf24data::Address address_tx_side = 0x11; - nrf24data::Address address_rx_side = 0x33; - - // Initialize data layer, this also rudimentary configures the physical - // layer (e.g. speed, crc) so we just need to set a channel and are good to - // go. - nrf24data::initialize(base_address, address_tx_side, broadcast_address); - nrf24config::setChannel(10); - - // Using the data layer, we send and receive packets, so we need to allocate - // one. It's automatically allocated with the max. payload length configured. - nrf24data::Packet packet; - - // Send this packet to the other endpoint of this example - packet.dest = address_rx_side; - - // We have 4 bytes payload, so interpret them as an uint32_t and increment - // over time - uint32_t* data = reinterpret_cast(packet.payload.data); - - while (true) - { - if(sendTimer.execute()) - { - MODM_LOG_INFO << "Send packet" << modm::endl; - nrf24data::sendPacket(packet); - - *data += 1; - } - - nrf24data::update(); - } - - return 0; -} diff --git a/examples/stm32f4_discovery/radio/nrf24-data/tx/project.xml b/examples/stm32f4_discovery/radio/nrf24-data/tx/project.xml deleted file mode 100644 index 5c1cf214da..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-data/tx/project.xml +++ /dev/null @@ -1,15 +0,0 @@ - - modm:disco-f407vg - - - - - modm:debug - modm:driver:nrf24 - modm:platform:gpio - modm:platform:spi:2 - modm:platform:uart:2 - modm:processing:timer - modm:build:scons - - diff --git a/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp b/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp deleted file mode 100644 index 86b700a5b1..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (c) 2014, Daniel Krebs - * Copyright (c) 2014-2017, Niklas Hauser - * Copyright (c) 2014, 2017, Sascha Schade - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#include -#include -#include -#include -using namespace modm::literals; - -/* - * Test SPI communication by writing and reading out registers on the - * nRF24L01+ module. Check output on UART - * - * Connect as follows - * - * STM32 NRF24 - * ------------ - * PB13 - SCK - * PB14 - MISO - * PB15 - MOSI - * PE12 - CSN - * - * STM32 USB2UART - * --------------- - * PA2 - TXD - */ - -#undef MODM_LOG_LEVEL -#define MODM_LOG_LEVEL modm::log::INFO - - -// Create an IODeviceWrapper around the Uart Peripheral we want to use -modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; - -// Set all four logger streams to use the UART -modm::log::Logger modm::log::debug(loggerDevice); -modm::log::Logger modm::log::info(loggerDevice); -modm::log::Logger modm::log::warning(loggerDevice); -modm::log::Logger modm::log::error(loggerDevice); - -typedef GpioOutputE12 Csn; - -// just needed to make Nrf24Phy happy -typedef GpioOutputA1 Ce; - - -typedef modm::Nrf24Phy nrf24phy; - -int -main() -{ - Board::initialize(); - - Csn::setOutput(modm::Gpio::High); - - // Enable SPI 2 - SpiMaster2::connect(); - SpiMaster2::initialize(); - - // Enable UART 2 - Usart2::connect(); - Usart2::initialize(); - - - // Initialize nRF24-Phy - nrf24phy::initialize(); - - MODM_LOG_INFO << "Hello from nRF24-phy-test example" << modm::endl; - - - uint8_t rf_ch; - uint64_t addr; - - - while (true) - { - - nrf24phy::setRxAddress(nrf24phy::Pipe::PIPE_0, 0xdeadb33f05); - addr = nrf24phy::getRxAddress(nrf24phy::Pipe::PIPE_0); - MODM_LOG_INFO.printf("Setting RX_P0 address to: 0xDEADB33F05\n"); - MODM_LOG_INFO.printf("Reading RX_P0 address: 0x%" PRIx32 "%" PRIx32 "\n", static_cast((addr >> 32) & 0xffffffff), static_cast(addr & 0xffffffff)); - - nrf24phy::setTxAddress(0xabcdef55ff); - addr = nrf24phy::getTxAddress(); - MODM_LOG_INFO.printf("Setting TX address to: 0xABCDEF55FF\n"); - MODM_LOG_INFO.printf("Reading TX address: 0x%" PRIx32 "%" PRIx32 "\n", static_cast((addr >> 32) & 0xffffffff), static_cast(addr & 0xffffffff)); - - rf_ch = nrf24phy::readRegister(nrf24phy::NrfRegister::RF_CH); - MODM_LOG_INFO.printf("Expected output for RF_CH: 0x2\n"); - MODM_LOG_INFO.printf("Reading RF_CH: 0x%" PRIx8 "\n\n", rf_ch); - - modm::delayMilliseconds(1000); - } - - return 0; -} diff --git a/examples/stm32f4_discovery/radio/nrf24-phy-test/project.xml b/examples/stm32f4_discovery/radio/nrf24-phy-test/project.xml deleted file mode 100644 index 0ffbe9029b..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-phy-test/project.xml +++ /dev/null @@ -1,14 +0,0 @@ - - modm:disco-f407vg - - - - - modm:debug - modm:driver:nrf24 - modm:platform:gpio - modm:platform:spi:2 - modm:platform:uart:2 - modm:build:scons - - diff --git a/examples/stm32f4_discovery/radio/nrf24-scanner/project.xml b/examples/stm32f4_discovery/radio/nrf24-scanner/project.xml deleted file mode 100644 index 12f88aa8ea..0000000000 --- a/examples/stm32f4_discovery/radio/nrf24-scanner/project.xml +++ /dev/null @@ -1,15 +0,0 @@ - - modm:disco-f407vg - - - - - modm:debug - modm:driver:nrf24 - modm:platform:gpio - modm:platform:spi:2 - modm:platform:uart:2 - modm:processing:timer - modm:build:scons - -