logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[STM32F103] Jak połączyć NRF24L01 z STM32F103/STM32F107? Problemy z komunikacją SPI

zielik 19 Paź 2012 22:03 7254 15
REKLAMA
  • #1 11429805
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Witam,
    Otoz proboje podlaczyc uklad do komunikacji bezprzewodowej NRF24L01 (Strona producenta) do prockow STM32F103 i SMT32F107 aby umowliwic komunikacje pomiedzy nimi.
    Jakoze nie znalazlem w sieci zadnej nadajacej sie/dzialajacej biblioteki obslugujacej ten uklad na STM32, skorzystalem i przepisalem biblioteki AVR/Arduino.
    Jednak nadal mam problem, nie jestem pewien co tutaj jest nieprawidlowe, gdyz uklady nie komunikuja sie.
    SPI sie na pewno inicjuje, w debuggerze widac ze program dochodzi sobie do while i tam sobie krazy.
    Czy ktos pracowal juz na tym ukladzie i moze poradzic gdzie moze byc blad ?
    Pozdrawiam

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Uklad nadawczy rozni sie tym, ze inicjuje funkcje:
    Cytat:

    TX_Mode();

    a w petli znajduje sie
    Cytat:
    nrf_send(sss, 32);

    Plik NRF24L01.h:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Konfiguracja RCC jest standardowa, poza tym zainicjowalem GPIOA,B,AFIO:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/code]
  • REKLAMA
  • #2 11488006
    you-zek
    Poziom 15  
    Posty: 229
    Pomógł: 3
    Ocena: 23
    Moja rada na problemy: zrezygnuj ze sprzętowego interfejsu SPI w STM32. Ten interfejs "działa", ale wg mnie ma bugi które w pewnych wypadkach uniemożliwiają poprawną wymianę danych. Po prostu napisz procedury które będą sterowały portami bezpośrednio.
  • #3 11488022
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Wydaje mi sie ze interfejs SPI akurat poprawnie wysyla i odbiera dane, gdyz po wpisaniu np numeru kanalu komenda SPI1_writeReg, jestem w stanie pozniej odczytac ten numer kanalu poprzez SPI1_readReg.
    Uwazam ze to jedynie problem biblioteki.
    Obcenie proboje uzyc kopii biblioteki z Arduino/AVR przepisanej aby dzialala na STM32 i widze pewne niewielkie postepy.
  • REKLAMA
  • #4 11488071
    you-zek
    Poziom 15  
    Posty: 229
    Pomógł: 3
    Ocena: 23
    Problem z interfejsem SPI polega na czymś innym. Wytłumaczyłem to trochę szerzej w innym wątku. Spróbuj tak jak ja proponuję. Napisanie SPI programowego zajmie chwilę.
  • REKLAMA
  • #5 11488135
    felekfala
    Poziom 19  
    Posty: 417
    Pomógł: 24
    Ocena: 217
    you-zek napisał:
    Moja rada na problemy: zrezygnuj ze sprzętowego interfejsu SPI w STM32. Ten interfejs "działa", ale wg mnie ma bugi które w pewnych wypadkach uniemożliwiają poprawną wymianę danych. Po prostu napisz procedury które będą sterowały portami bezpośrednio.

    Ten interfejs działa poprawnie.
    zielik
    Zrób inicjacje i obsługę SPI normalnie na rejestrach.
  • #6 11488143
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Czyli po prostu pominac biblioteke stm ?
  • #7 11488152
    you-zek
    Poziom 15  
    Posty: 229
    Pomógł: 3
    Ocena: 23
    Pomiń interfejs sprzętowy. Manipuluj stanem portów programowo. Każdy bit wysyłaj na piechotę.
  • #8 11488165
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Tak tak rozumiem, you-zek - skoro piszesz ze to nie trudno sproboje.
    Pytalem felekfale, czy mial an mysli jedynie pominiecie "tej" biblioteki.
  • #9 11488167
    felekfala
    Poziom 19  
    Posty: 417
    Pomógł: 24
    Ocena: 217
    W funkcji wysłania widzę brak sprawdzania stanu flagi BSY po wysłaniu bajtu danych, sprawdzasz tylko stan flagi TXE przed wysłaniem bajtu.
    Tak z ta biblioteką ludzie mieli sporo problemów, chociaż i na niej powinno wszystko działać. Czytałeś Reference manual?
  • #10 11488185
    you-zek
    Poziom 15  
    Posty: 229
    Pomógł: 3
    Ocena: 23
    Właśnie w pracy flagi BSY jest bug. Trochę się nad nią nawk..... i czasu spędziłem. Ona po prostu nie działa. Sprawdź oscyloskopem stan wyjścia nadajnika a co pokazuje rejestr.
  • #11 11488212
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Czytalem RM nie przywiazujac uwagi do falgi BSY, widze ze musi byc rowna 0 po wyslaniu danych. Poprawie kod w wolnej chwili i sprawdze czy dziala.
  • REKLAMA
  • #12 11488217
    you-zek
    Poziom 15  
    Posty: 229
    Pomógł: 3
    Ocena: 23
    Sprawdź też czy kiedykolwiek stan tej flagi się zmienia.
  • #13 11488232
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    No ale już idź do swojego tematu z tą rewelacją, że flaga BSY nie działa, bo milionom osób działa bezproblemowo... Twierdzisz że jest inaczej i że to sprawdziłeś - podaj konkretny przypadek, wszystkie dane, pełny kod i pomiary które zebrałeś, bo tak to ja sobie mogę twierdzić, że flaga PLLRDY też nie działa...

    4\/3!!
  • #14 11488252
    felekfala
    Poziom 19  
    Posty: 417
    Pomógł: 24
    Ocena: 217
    Cytat z RM
    "After writing the last data item into the SPI_DR register, wait until TXE=1, then wait until
    BSY=0, this indicates that the transmission of the last data is complete"

    Sprawdzasz np. w ten sposób:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #15 11489107
    nibbit
    Poziom 20  
    Posty: 270
    Pomógł: 40
    Ocena: 4
    Z tym BSY to jakaś prowokacja?

    Jeśli nie to czekam aż napiszesz żeby ktoś sobie napisał CANa lub MACa programowo :].
  • #16 11508557
    zielik
    Poziom 10  
    Posty: 11
    Ocena: 1
    Udalo mi sie napisac dzialajaca bibloteke.
    Problem byl jedynie z obsluga urzadzenie, jego statusu, configu. Jednak dla mnie to nie byl maly problem i ciesze sie ze w koncu to rozwiazalem.

    Oto kod i krotki film:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod




Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik próbuje połączyć moduł NRF24L01 z mikrokontrolerami STM32F103 i STM32F107 w celu nawiązania komunikacji bezprzewodowej. Napotkał problemy z komunikacją SPI, mimo że interfejs SPI wydaje się działać poprawnie. Użytkownicy sugerują, aby zrezygnować z użycia sprzętowego interfejsu SPI i zamiast tego implementować SPI programowo, manipulując stanem portów bezpośrednio. Wskazano również na konieczność sprawdzenia stanu flagi BSY po wysłaniu danych. Po kilku próbach użytkownik zdołał napisać działającą bibliotekę, rozwiązując problemy z obsługą urządzenia i jego konfiguracją.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA