Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/327: Рейтинг темы: голосов - 327, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 198

NRF24L01 на STM32

21.07.2013, 18:09. Показов 65359. Ответов 58
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Собственно сабж, есть ли у кого рабочий код для этого модуля? уже хз сколько перепробовал... не работают найденные коды в сети. Я хочу сделать так. Имеются два таких модуля, подключены к SPI1 и SPI2 соответственно. Камень stm32f103rb... С одного данные посылаю, с другого принимаю... Как-то так.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.07.2013, 18:09
Ответы с готовыми решениями:

Погодная станция STM32&NRF24L01+
Пока в разобранном состоянии https://youtu.be/htuQdyKFeAU

Обмен данными STM32 nrf24l01+pa+lna
Закупил пару штук от разных продавцов по паре nrf24l01+pa+lna .Но что-то они не как не хотят нормально работать. Возьмешь в руки...

костыль для умного дома на NRF24L01+STM32
Написал много, если лениво все читать, то переходи к проблеме и вариантах решения. Пытаюсь сделать "умный дом". Поставил себе...

58
MykMit
24.07.2013, 18:56
Студворк — интернет-сервис помощи студентам
Ой, я незнаю... Мне его только использовать на вкл/вык реле.
Он на прямую не будет работать с АРМ процессорами. Только через Радио.
А то что разработчики доверили свое устройство этому процессору, то думаю они сознательно шли на этот шаг.
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
21.08.2013, 20:49
Здесь есть пример для STM32VL https://github.com/wendlers/libemb
Пытаюсь проверить.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
21.08.2013, 20:55
Цитата Сообщение от osmy
Здесь есть пример для STM32VL https://github.com/wendlers/libemb
Пытаюсь проверить.
osmy, так он же на Си, не на ассемблере...
На Вас не похоже ;-)
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
21.08.2013, 21:03
Так пример же не мой, а я пишу на асм, хотя в последнее время на Си, ха ха.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
21.08.2013, 21:44
Кстати на STM32-103STK плате есть этот модуль, эту плату не st выпускает же.
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
21.08.2013, 23:03
Цитата Сообщение от osmy
Кстати на STM32-103STK плате есть этот модуль, эту плату не st выпускает же.
Ммм... вкуснятина от Olimex. Правда, в описании платы они пишут "2.4 Ghz transciever wyth Nordic nRF23L01" - наверно, очепятка.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
22.08.2013, 20:02
Люди, чё за libopencm3/stm32/f1/gpio.h либы на каком то GNU/Linux, в примерах они используются. И {del}здесь тоже индус пишет, им чё stmовскими и Кейлем пользоваться религия не позволяет, у меня нету такого компилятора, чё за хрень бля, опять переносить хрень в другую хрень?
Понаделают либы и компиляторы, из одной в другую переносить замучаешся!!!
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
22.08.2013, 22:22
Кстати, не плохие либы, и ARM_Toolchain, который с GNU тоже ничего.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
02.09.2013, 13:25
{del} здесь тоже примерчик не плохой, в Кеил компилируется.
0
zokokutkym
19.12.2013, 14:39
http://www.edaboard.com/thread275093.html

Если актуально, хороший пример работы с nrf24l01 и еще визард есть.
stm32f4
07.09.2014, 12:35
Всем привет!
Наконец-то вчера у меня дошли руки до микросхемок NRF24L01 купленные на али пару лет назад
Все бы ничего, но не могу заставить передать данные((((
Подпрограммы чтения и записи в регистры NRF24L01-проверял и все работает корректно!

Как я понял для передачи данных достаточно выставить бит PWR_UP и сбросить PRIME_RX в регистре CONFIG. И поидее при записи данных в регистр TX_ADDR передача должна начаться через 130мкс, а по окончанию передачи должно быть сгенерироно прерывание (сброс IRQ(8)!
Но ни прерывания ни биты TX_DS, MAX_RT регистра STATUS ничего не происходит(((
Подскажите что я делаю не так?
Так же после передачи данных в регистр TX_ADDR я поднимаю линию CE на 10мкс!
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
07.09.2014, 21:02
stm32f4, да нет, все у вас правильно, должно работать! наверное модули паленые или баги компилятора... больше идей нет. как ТЕЛЕПАТ вам говорю!
0
stm32f4
08.09.2014, 12:22
Цитата Сообщение от Ymk
stm32f4, да нет, все у вас правильно, должно работать! наверное модули паленые или баги компилятора... больше идей нет. как ТЕЛЕПАТ вам говорю!
Согласен, без кода толку мало) Вот инициализация и отправка данных передатчика:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
*NSS=1;
*CE=0;
WRITE_SPI(0x00,10,1);         //выставляем бит CONFIG|=PWR_UP-> включение
delay_ms(100);               //ждем мин 10мкс
WRITE_SPI(0x00,10,1);         //выставляем бит CONFIG&=|PRIME_RX-> настраиваем на передачу (PRIME_RX=0)
TMP=READ_SPI(0x00,1);
delay_ms(100);               //ждем мин 10мкс
 
WRITE_SPI(0x03,1,1);         //01 - 3 bytes
WRITE_SPI(0x04,15,1);         //‘1111’ – Up to 15 Re-Transmit  on fail of AA
WRITE_SPI(0x05,15,1);         //Sets the frequency channel nRF24L01 operates on
WRITE_SPI(0x06,15,1);         //11 –     0dBm ;  Air Data Rate   ‘1’ – 2Mbps
 
WRITE_SPI(0x01,1,1);         // Enable outo acknowtidkiment data pype 0
WRITE_SPI(0x02,1,1);         // Enable data pype 0.
WRITE_SPI(0x11,6,1);         // Number of bytes in RX paytood in data pype 0 (1   to 32 bytes).
 
while(1)
{
delay_ms(10000);
WRITE_SPI(0xA0,0x555555,3);//отправляем данные
*CE=1;
delay_ms(100);
*CE=0;
 
delay_ms(10000);
TMP=READ_SPI(0x07,1);
}
Приемник :
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
      *NSS=1;
*CE=0;
delay_ms(100);
 
WRITE_SPI(0x00,10,1);         //выставляем бит CONFIG|=PWR_UP-> включение
delay_ms(100);               //ждем мин 10мкс
WRITE_SPI(0x00,11,1);         //выставляем бит CONFIG&=|PRIME_RX-> настраиваем на передачу (PRIME_RX=0)
delay_ms(100);               //ждем мин 10мкс
WRITE_SPI(0x11,1,1);
 
WRITE_SPI(0x03,1,1);         //01 - 3 bytes
WRITE_SPI(0x04,15,1);         //‘1111’ – Up to 15 Re-Transmit  on fail of AA
WRITE_SPI(0x05,15,1);         //Sets the frequency channel nRF24L01 operates on
WRITE_SPI(0x06,15,1);         //11 –     0dBm ;  Air Data Rate   ‘1’ – 2Mbps
 
WRITE_SPI(0x01,1,1);         // Enable outo acknowtidkiment data pype 0
WRITE_SPI(0x02,1,1);         // Enable data pype 0.
WRITE_SPI(0x11,6,1);         // Number of bytes in RX paytood in data pype 0 (1   to 32 bytes).
*CE=1;
while(1)
{
delay_ms(10000);
TMP=READ_SPI(0x07,1);
}
Посмотрите пожалуйста инициализацию приемника/передатчика и отправку данных, все верно ?
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
08.09.2014, 22:00
ужс... разбирать эти нигические числа...

вощем... самый криминал, если не ошибаюсь, отправляется 3 байта, а размер пайпа на прием - 6 байт.
еще желательно адреса тоже задавать явно... да и outoack не юзать для первого теста...

а в статусе приемника что возвращается (TMP)?
0
stm32f4
09.09.2014, 13:50
Цитата Сообщение от Ymk
ужс... разбирать эти нигические числа...

вощем... самый криминал, если не ошибаюсь, отправляется 3 байта, а размер пайпа на прием - 6 байт.
еще желательно адреса тоже задавать явно... да и outoack не юзать для первого теста...

а в статусе приемника что возвращается (TMP)?
Попробую описать мою конфигурацию!
Для первого запуска обмена данных я решил попробовать настроить микросхемы с минимальной настройкой, дабы уменьшить количество ошибок )
И так, что я сделал на передатчике:
1. CONFIG|=PWR_UP включаю микросхему
2. Жду 10мкс
3. CONFIG&=~PRIME_RX настраиваю на передачу данных
4. записываю 5-ть байт(0x78,0x78,0x78,0x78,0x78) в регистр TX_ADDR(0x10) и RX_PW_P0(0x0A) ! не знаю зачем я это делаю, но говорят надо!
На этом моя инициализация передатчика закончилась!!!!!!!!!!
5. Теперь начинаем передавать данные:
5.1 NSS=0; сброс огибающей
5.2 отправляю команду W_TX_PAYLOAD(0xA0)
5.3 следом отправляю байт данных
5.4 NSS=1; огибающая
5.5 поднимаем линию CE
5.6 жду 10мкс
5.7 опускаем линию CE
5.8 ВСЕ, по идее данные должны уйти в эфир!
6. Проверяем регистр STATUS(0x07) там все время лежит 0x1F. а в регистре FIFO_STATUS(0x17) лежит 0x21.

Теперь приемник:
1. CONFIG|=PWR_UP включаю микросхему
2. Жду 10мкс
3. CONFIG|=PRIME_RX настраиваю на прием данных
4. записываю 5-ть байт(0x78,0x78,0x78,0x78,0x78) в регистр TX_ADDR(0x10) и RX_RW_P0(0x0A) !
ВСЕ, инициализация приемника закончилась!
5. теперь в цикле читаю регистр STATUS(0x07) и там все время лежит 0x0E.

Так же для приемника и передатчика у меня настроено прерывание от ножки IRQ! ни на передатчике ни на приемнике не разу не происходило перываний (Хотя по идее, после неудачной отправки передатчиком должно произойти прерывание и выставиться флаг MAX_RT в регистре STATUS(0x07).
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
09.09.2014, 14:58
Цитата Сообщение от stm32f4
ВСЕ, инициализация приемника закончилась!
а размер пайпа??

п.с. можно взять готовые примеры тестов модулей...
0
stm32f4
09.09.2014, 16:51
Цитата Сообщение от Ymk
Цитата Сообщение от stm32f4
ВСЕ, инициализация приемника закончилась!
а размер пайпа??

п.с. можно взять готовые примеры тестов модулей...

да, забыл про пайп написать!На приемнике задал RX_PW_P0 = 6. но толку нет( в STATUS по-прежнему 14.

По поводу готовых примеров - яб с радостью, но нет толковых примеров под stm32f4 для CooCox.
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
09.09.2014, 16:55
Там ничем не отличается от других процов, разве что SPI от железа зависит. В соседней теме давал рабочий код для nrf24l01 . Посмотрите как всё инициализируется, как передается/принимается. Если вы говорите, что регистры читаются/пишутся, то проблема явно не в stm.
0
0 / 0 / 0
Регистрация: 18.03.2010
Сообщений: 2,230
09.09.2014, 17:49
Цитата Сообщение от stm32f4
да, забыл про пайп написать!На приемнике задал RX_PW_P0 = 6. но толку нет( в STATUS по-прежнему 14.
угу, 6. а шлете сколько? не 6.
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
09.09.2014, 19:48
попробуйте сначала один байт передать. Еще раз убедитесь, что у приемника и передатчика одинаковые настройки: адреса приема и передачи, размер пайпа совпадает с размером передаваемых данных, скорость, crc. После перепрошивки МК лучше перезагружать (дергать питание) nrf24l01, он при повторной инициализации может коряво запустится. Либо сначала принудительно дергать его в Power Down и уже потом запускать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.09.2014, 19:48
Помогаю со студенческими работами здесь

stm32f4+NRF24L01 связать с arduino+NRF24L01
Нужно связать два блока: ведущий на stm32f4 ведомый на arduino. Есть платки NRF24L01 и куча примеров, но ни один не работает. Причем не...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не тут то было. Информации по нем очень мало, даже на Arduino...

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка сигналов + коммуникация с датчиками). Чем связать данные...

nRF24L01
Здравствуйте, не могу найти необходимую информацию по модулю "nRF24L01". Подскажите пожалуйста, нашёл информацию, что может принимать...

NRF24L01+DS18B20
Здравствуйте! Разрабатываю беспроводной датчик в связке ds18b20 + nrf24l01 с батарейным питанием. В целях экономии энергии на батарейке...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
Как я стал коммунистом))) Модель сохранения здоровья сотрудников, запись блога номер 15
anaschu 23.05.2026
Внезапно хорошее здоровье сотрудников не нужно капиталистам?))
Модель здравоСохранения 15. Как мы чинили AnyLogic модель рабочего коллектива: сочленение диаграммы состояний болезней и поломок в ресурспул
anaschu 23.05.2026
Как мы чинили AnyLogic модель рабочего коллектива Сегодня разобрались с пятью багами, из-за которых модель либо падала с ошибкой, либо давала совершенно бессмысленные результаты. Каждый баг был. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru