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

STM32F7 SPI - Problem z odbiorem 8-bitowych danych w rejestrze DR

mycodename47 03 Lut 2017 09:16 1377 12
REKLAMA
  • #1 16249314
    mycodename47
    Poziom 16  
    Posty: 257
    Pomógł: 15
    Ocena: 55
    Witam, jestem w trakcie pisania własnej biblioteki do obsługi SPI na mikro kontrolerze STM32F746NG. Mam problem z wysyłaniem/odbieraniem 8 bitów. Jeśli próbuję "wrzucić" do rejestru DR uinta8, np. 0x55 to na oscyloskopie widzę 0x0055. Dodam, że SPI mam skonfigurowane na 8bit. Dopiero gdy wrzucę do rejestru DR w ten sposób: *(volatile uint8_t*)&SPIx->DR= 0x55 to na oscyloskopie widać ładnie 0x55. Powiedzmy, że w ten sposób rozwiązałem wysyłanie 8 bitów. Do odbioru napisałem następującą funkcję:

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


    Funkcja zawsze zwraca 0x00, pomimo, że na oscyloskopie i w trybie debugowania widzę dane w rejestrze DR, ale w momencie przejścia do linijki dane[i] = (SPIx->DR); znikają z rejestru...
    Podejrzewam, że problem może być z Data Pakingiem, o którym czytałem w RM ale nie wiem co dokładnie mogę jeszcze zmienić. Słyszałem też, że podobny problem może pojawić się z F0, F3.
    Pozdrawiam Krzysiek
  • REKLAMA
  • #3 16249439
    mycodename47
    Poziom 16  
    Posty: 257
    Pomógł: 15
    Ocena: 55
    Moja aktualna funkcja wygląda następująco:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Rejestr DR po wysłaniu 0xFF:
    STM32F7 SPI - Problem z odbiorem 8-bitowych danych w rejestrze DR
    Rejestr DR po da=*(volatile uint8_t*)&SPIx->DR:
    STM32F7 SPI - Problem z odbiorem 8-bitowych danych w rejestrze DR
    A w da dalej mam 0x00....
  • REKLAMA
  • #4 16249530
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #5 16249555
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Jak przeczytasz RefMan, to będziesz wiedział. ;)

    Moim skromnym zdaniem SPI to najbardziej nieudany peryferial w STM32.
  • #6 16249565
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    mycodename47 napisał:
    Rejestr DR po wysłaniu 0xFF:

    Proponuję przestać podglądać rejestry SPI przez debugger, bo wtedy na pewno Ci nie zadziała.

    Dodano po 38 [sekundy]:

    BlueDraco napisał:
    Moim skromnym zdaniem SPI to najbardziej nieudany peryferial w STM32.

    Ze względu na tą drobną niedogodność wymagającą rzutowania?
  • #7 16249587
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #8 16249608
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    albertb napisał:
    Rozumiem, ze Ty też nie przeczytałeś i nie wiesz.
    Słowo "cast" nie występuje w rozdziale o SPI

    Na szczęście występuje tam fraza "access size" i rozdział "Data packing".
  • #9 16249624
    mycodename47
    Poziom 16  
    Posty: 257
    Pomógł: 15
    Ocena: 55
    jeżeli chodzi o rejestr FRXTH, to ustawiam go na 8 bit
  • #10 16249749
    Konto nie istnieje
    Konto nie istnieje  
  • #11 16249876
    Konto nie istnieje
    Konto nie istnieje  
  • #12 16250679
    BlueDraco
    Specjalista - Mikrokontrolery
    Posty: 6479
    Pomógł: 939
    Ocena: 421
    Jest to okrutnie niezręczne. W normalnych SPI do rejestru danych zapisuje się słowo do wysłania, a sam interfejs wie, ile bitów z tego słowa ma wysłać. W STM32 zapisujesz słowo, w którym może się mieścić jedno lub dwa słowa do wysłania, w zależności od ustawionej długości słowa/ramki SPI. Chyba nikt poza ST tego tak nie skopał.
  • #13 16250753
    Konto nie istnieje
    Konto nie istnieje  

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik ma problem z odbiorem 8-bitowych danych w rejestrze DR mikro kontrolera STM32F746NG podczas pracy z interfejsem SPI. Po wysłaniu wartości 0xFF do rejestru DR, odczyt z tego rejestru zawsze zwraca 0x00, mimo że dane są widoczne na oscyloskopie. W odpowiedziach sugerowane jest, aby zastosować rzutowanie przy odczycie, podobnie jak przy zapisie. Wskazano również na potencjalne problemy z debugowaniem oraz na specyfikę działania rejestru SPI w STM32, który wymaga ustawienia szerokości transmisji. Dyskusja porusza również kwestie związane z FIFO w SPI oraz jego wpływem na wydajność transmisji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA