Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

NRF24L01 i STM32F0 z wykorzystaniem HALa

04 Lut 2017 01:39 1137 2
  • Poziom 11  
    Witajcie,

    siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc.

    To najpierw kody, które wyrażają więcej niż tysiąc słów ;) :

    main.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    NRF24L01.h
    Kod: c
    Zaloguj się, aby zobaczyć kod


    NRF24L01.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ponieważ wspomagam się CubeMX to wrzucam grafiki z jego ustawieniami:
    NRF24L01 i STM32F0 z wykorzystaniem HALa NRF24L01 i STM32F0 z wykorzystaniem HALa NRF24L01 i STM32F0 z wykorzystaniem HALa NRF24L01 i STM32F0 z wykorzystaniem HALa

    Czytałem już na tym forum w podobnym temacie, że SPI w STM czasem daje ciała. Zależy mi mimo to na wykorzystaniu sprzętowego SPI. Najbardziej bym obstawiał, że źle wykorzystałem funkcję HALa do komunikacji po SPI. Będę wdzięczny za zweryfikowanie tego. Chodzi dokładnie o ten fragment:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przyznaję się też bez bicia, nie do końca rozumie zasadę działania NRFa. Czytałem już o nim sporo, jednak nadal umyka mi to, jak on prawidłowo musi zostać zainicjowany. Z tego powodu jeżeli znajdzie się dobry samarytanin, który mi dokładnie opisze co należy mu wysłać by działały konkretne rzeczy to będę bardzo wdzięczny. Pomoże mi to uporządkować moją wiedzę, która jest w niezłym chaosie z powodu nadmiaru informacji, nieraz zbędnych... Kod na ATmega mi działa, więc sądzę, że błąd jest gdzieś w sposobie wysyłania po SPI.

    Mam też drugie podejrzenie co do błędu. Mianowicie, w ATmega8 mam taktowanie 1MHz i ustawiam tam dla SPI dzielnik 4. Więc wychodzi na to, że SPI ma 250kHz (dobrze rozumię?). Tutaj taktowanie mam stosunkowo większe i niezależnie jaki ustawię dzielnik, to taki mam inną wartość niż te 250kHz. Czy to może być dużym problemem?

    W załączniku dodaję cały projekt. Wykorzystuję program System Workbench for STM32.
  • Poziom 11  
    Na czym polega problem? Udaje Ci się wpisać bajt konfiguracyjny do rejestru konfiguracyjnego NRF za pomocą SPI i odczytać go poprawnie? W domu mam działający projekt z obsługą NRF24L01+ pod biblioteką SPL. Sprawdzę wieczorem czy wprowadzałem jakieś poprawki do zamieszczonego kodu:

    https://www.elektroda.pl/rtvforum/topic3057834.html

    Jeśli tak to wyślę Ci poprawione źródła. Z Halem niestety nie miałem doczynienia.
  • Poziom 11  
    Dałem radę już cokolwiek zrobić, jednak nadal mam problem z odbiorem drogą radiową (wysyłania jeszcze nie sprawdziłem). Zaraz opiszę co dokładnie nadal nie działa. W załączniku dodaję cały projekt. Kody (obecne):

    main.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    NRF24L01.c
    Kod: c
    Zaloguj się, aby zobaczyć kod


    NRF24L01.h
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Mam postawioną komunikację między Raspberry Pi 3 a ATmega8. Chcę teraz tym modułem na STMie podsłuchiwać tę komunikację i przesyłać to co odbiorę za pomocą UARTa do PC. Obecnie doszedłem do tego, że odbiera mi pierwszy bajt w sposób poprawny, niestety kolejne cztery (sumarycznie zawsze w radiu leci 5 bajtów danych) są źle odbierane. Co więcej, są one kopią pierwszego bajtu. Np. jeżeli w radiu mam transmitowane 1 0 10 127 0 to NRF na STM odbiera mi 1 1 1 1 1. Sprawdzałem adresy kanału itd., wszystkie są poprawne (żywcem skopiowane z kodu na ATmega. Wychodzi na to, że tutaj coś źle odbieram lub odczytuję (skoro pierwszy bajt jest dobry a reszta zła, to już nie wiem co źle robię...).

    Przejrzę te kody, SPL też mi wystarcza bo go jako tako znam. Dziękuje.