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.

USART1 STM32 - Interpretacja danych USART1

05 Lis 2016 17:24 891 9
  • Poziom 21  
    Problem z interpretacją danych.

    Już pisałem o tym problemie ale dalej nie wiem o co chodzi..
    Otóż gdy w real term odbieram to mam takie informacje:
    USART1 STM32 - Interpretacja danych USART1

    Natomiast w przerwaniu w STM32 w buforze typu char mam takie dane:
    USART1 STM32 - Interpretacja danych USART1

    Ni jak ma się to w buforze do tego co w real term a powinno być to samo...
  • Specjalista - Mikrokontrolery
    Proponuję zacząć od obejrzenia tych danych w tej samej reprezentacji. W tym celu np. ustaw wyświetlanie hex w terminalu i w debuggerze.
  • Poziom 21  
    @BlueDraco W debugerze mam ustawione na HEX:
    USART1 STM32 - Interpretacja danych USART1

    Natomiast jeśli w terminalu zmienię na hex to dane są w postaci :
    USART1 STM32 - Interpretacja danych USART1

    Dodano po 2 [minuty]:

    Pierwsza wartość 6 to by się zgadzała bo jest to [ACK], a potem widać że jest . i ( a reszta to w żaden sposób mi nie pasuje.
  • Specjalista - Mikrokontrolery
    Skoro masz ustawione hex, to pokaż hex, a nie ósemkowe kodowanie bajtów. Z tego, co pokazałeś, nic nie widać. Anie nei widać, że jest dobrze, ani że źle.

    Czy ten, kto nadaje, robi przerwy co jakiś czas?

    Jeśli masz wątpliwości co do transmisji - dlaczego nie spróbujesz nadawania takiego ciągu znaków, który byłby łatwo weryfikowalny/widoczny dla oka (bez kodów z zakresu 0..31 i powyżej 127)?
  • Poziom 21  
    Poniżej można sobie najlepiej porównać.
    USART1 STM32 - Interpretacja danych USART1

    Po lewej w recived_string są odebrane znaki w HEX (bufor w mikrokontrolerze), natomiast po prawej znaki jakie powinny być odebrane w HEX (w terminalu).

    Dodano po 4 [minuty]:

    Tak jakby bajty które się nie zgadzają to zgadza się w nich tylko młodsza część (LO)
  • Użytkownik usunął konto  
  • Pomocny post
    Poziom 1  
  • Poziom 21  
    @Marek_Skalski Rzeczywiście w konfiguracji USART1 jest
    USART_WordLength_8b,
    USART_StopBits_1,
    USART_Parity_Even.

    Ale z tego co wiem to tylko w ten sposób można uzyskać komunikację z parametrami 7E1 (bo w urządzeniu odczytowym nie mogę zmienić parametrów transmisji)
    gdyż ten bit parzystości jest wliczany w ramkę stąd 8 bitów w konfiguracji .

    Dodano po 2 [minuty]:

    @Marek_Skalski Masz racje. gdy w realterm ustawię 8E1 to dane są takie same.
    Tylko tak nie mogę zrobić.
    Jak w takim razie w STM ustawić ramkę 7 E 1 ?

    Dodano po 24 [minuty]:

    Czy po prostu muszę każdą wartość wyciągnąć z maską 0x7F ?
  • Użytkownik usunął konto  
  • Specjalista - Mikrokontrolery
    Piotrus_999 napisał:
    To znaczy że tak samo nadaje to urządzenie. To po co Ci 7 bitów jak nadawcze daje 8

    W razie wątpliwości zawsze patrzymy do dokumentacji

    Cytat:
    Data register (USART_DR)
    [...]
    Bits 8:0 DR[8:0]: Data value
    Contains the Received or Transmitted data character, depending on whether it is read from
    or written to.
    The Data register performs a double function (read and write) since it is composed of two
    registers, one for transmission (TDR) and one for reception (RDR)
    The TDR register provides the parallel interface between the internal bus and the output
    shift register (see Figure 1).
    The RDR register provides the parallel interface between the input shift register and the
    internal bus.
    When transmitting with the parity enabled (PCE bit set to 1 in the USART_CR1 register),
    the value written in the MSB (bit 7 or bit 8 depending on the data length) has no effect
    because it is replaced by the parity.
    When receiving with the parity enabled, the value read in the MSB bit is the received parity
    bit.