- PVSM.RU - https://www.pvsm.ru -
В этом материале мы рассмотрим процесс запуска NRF24L01 в связке со STM32F1. Разработка ведется в Arduino IDE. В статье указан код и схемы подключения для того, чтобы можно было повторить проект самому.
Всё началось с того, что я решил перейти с Arduino UNO на stm32f1 при работе с NRF24L01. Код перестал работать. На поиск решения проблемы ушло несколько дней. Эта статья — результат моих усилий. Материал этой статьи можно воспринимать просто как пример кода для начала работы со связкой stm32f1 + NRF24L01.
Разработка ведется в Arduino IDE. Если вы новичок в этой теме, то прочтите эту статью [1].
ВАЖНО! ЕСЛИ ВЫ ВЫБРАЛИ ДРУГОЕ ЯДРО, ЭТО МОЖЕТ ПРИВЕСТИ К НЕИЗВЕСТНЫМ ПОСЛЕДСТВИЯМ. В моём случае, в поле "Дополнительные ссылки для Менеджера плат" я вписал: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json [2]
Используется библиотека RF24. Её можно установить в менеджере библиотек.
В моей ситуации проблема заключалась в том, что модуль NRF24L01 не включался. Из нескольких источников я узнал, что плата чувствительна к силе тока и может не запуститься, если её недостаточно.
Я нашёл решение этой проблемы на сайте instructables. Код, который я использовал, также был взят оттуда, но я немного адаптировал его под свои нужды.
Суть решения заключалась в том, чтобы добавить в цепь питания модуля NRF24L01 обычный электролитический конденсатор ёмкостью 10 мкФ.
Ниже приведена схема.
|
Pin |
Name |
Description |
|---|---|---|
|
1 |
GND |
Ground (0V) |
|
2 |
VCC |
Power Supply (3.3V) |
|
3 |
CE |
Mode Enable Activates RX or TX mode |
|
4 |
CSN |
Chip Select |
|
5 |
SCK |
Serial Clock |
|
6 |
MOSI |
Master Output, Slave Input |
|
7 |
MISO |
Master Input, Slave Output |
|
8 |
IRQ |
Interrupt Request. Under wireless communication, MCU communicates with NRF24L01 by IRQ. |

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#define CE_PIN PB0
#define CSN_PIN PA4
#define RED_PIN PB10
#define GREEN_PIN PB11
#define CLOSE_BTN_PIN PB6
#define OPEN_BTN_PIN PB7
RF24 radio(CE_PIN, CSN_PIN);
const uint64_t address = 0xF0F0F0F0E1LL;
boolean button_1_state = 0;
boolean button_2_state = 0;
void setup() {
// Кнопки
pinMode(CLOSE_BTN_PIN, INPUT_PULLUP);
pinMode(OPEN_BTN_PIN, INPUT_PULLUP);
// Светодиоды
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, HIGH);
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
}
void loop() {
button_1_state = digitalRead(CLOSE_BTN_PIN);
button_2_state = digitalRead(OPEN_BTN_PIN);
while(!button_1_state && button_2_state) {
char text[2];
text[0] = 0xAA;
text[1] = 0x00;
radio.write(&text, sizeof(text));
digitalWrite(GREEN_PIN, HIGH);
button_1_state = digitalRead(CLOSE_BTN_PIN);
button_2_state = digitalRead(OPEN_BTN_PIN);
}
digitalWrite(GREEN_PIN, LOW);
while(button_1_state && !button_2_state) {
char text[2];
text[0] = 0xAC;
text[1] = 0x00;
radio.write(&text, sizeof(text));
digitalWrite(RED_PIN, HIGH);
button_1_state = digitalRead(CLOSE_BTN_PIN);
button_2_state = digitalRead(OPEN_BTN_PIN);
}
digitalWrite(RED_PIN, LOW);
delay(100);
}
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <SoftwareSerial.h>
#define TX_PIN PA9
#define RX_PIN PA10
#define CE_PIN PB0
#define CSN_PIN PA4
#define RELAY_PIN PB3
SoftwareSerial mySerial(RX_PIN, TX_PIN);
RF24 radio(CE_PIN, CSN_PIN);
const uint64_t address = 0xF0F0F0F0E1LL;
void setup() {
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, LOW);
mySerial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
radio.startListening();
}
void loop() {
if (radio.available())
{
char text[2] = "";
radio.read(&text, sizeof(text));
if (text[0] == 0xAA) {
mySerial.println(text);
digitalWrite(RELAY_PIN, HIGH);
}
else if(text[0] == 0xAC) {
mySerial.println(text);
digitalWrite(RELAY_PIN, LOW);
}
}
delay(5);
}
Автор: lifeIP
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino-ide/408467
Ссылки в тексте:
[1] прочтите эту статью: https://microsin.net/programming/arm/how-to-program-a-stm32-blue-pill-with-arduino.html
[2] https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json: https://github.com/stm32duino/BoardManagerFiles/raw/main/package_stmicroelectronics_index.json
[3] sunfounder: http://wiki.sunfounder.cc/index.php?title=NRF24L01_Test_with_Arduino
[4] https://www.instructables.com/NRF24L01-on-STM32F103/: https://www.instructables.com/NRF24L01-on-STM32F103/
[5] Источник: https://habr.com/ru/articles/875638/?utm_source=habrahabr&utm_medium=rss&utm_campaign=875638
Нажмите здесь для печати.