Skocz do zawartości

pion3k

Użytkownicy
  • Zawartość

    6
  • Rejestracja

  • Ostatnio

Reputacja

0 Neutralna

O pion3k

  • Ranga
    2/10

Informacje

  • Płeć
    Mężczyzna
  1. Hej! Jasne, temat odbiega trochę może od zakresu tego kursu, ale bardziej chciałem zwrócić uwagę na mój problem z komunikacją szeregową (nawet z obrazem raspbiana), zostawiając już całe Yocto za sobą A w szczególności - kwestia jednoznacznego ustalenia czy port działa/nie działa, bo szczerze mówiąc nie wiem jak go sprawdzić i być pewnym rezultatów
  2. Treker, dzięki za odpowiedź! Konwerter jest prawdopodobnie sprawny, jeszcze jakiś czas temu testowałem go bodajże z układami od ST, a wcześniej pracował z malinką. Zrobiłem dodatkowy test, najprostszy z możliwych, o którym zapomniałem - założyłem zworkę na Rx/Tx w malince i z poziomu konsoli odpaliłem picocom'a, zachowując poprawną konfigurację portu szeregowego. Cisza, nie mam żadnych zwrotnych wiadomości (loopback)... Wygląda na to, że musiałem kiedyś omyłkowo coś zrobić co zniszczyło port. Przetestuję jeszcze sam interface bluetooth, mam nadzieję że przynajmniej on przeżył
  3. Hej, chciałbym poprosić o pomoc w rozwiązaniu problemu braku komunikacji przez port szeregowy z malinką. Nie jestem pewien czy nie mam uszkodzonego portu UART na RPi3 bo wszystkie ze znanych sposobów zawiodły jak do tej pory. Moja konfiguracja: - RPi3 model B v1.2 - konwerter USB-UART bazujący na oryginalnym chipie FTDI (układ działa dobrze bo testowałem na innych platformach) Problem z brakiem komunikacji przez port szeregowy rozpoczął się od tego, że pomimo poprawnej konfiguracji buildsystemu (Yocto + meta-layers rpi), budowany obraz linuxa podnosił się normalnie (printy na ekranie przez port HDMI) ale wszelka konfiguracja pliku config.txt nie przynosiła żadnych rezultatów jeśli chodzi o sam interfejs UART. Postanowiłem zrezygnować na chwilę z buildsystemu (zakładając że mogłem zrobić coś nie tak) i zainstalowałem raspbiana zgodnie z poradnikiem (tzn. natywnie używam Linuxa ale to kwestia tylko połączenia z portem szeregowym). Cały czas jednak nie mam żadnej komunikacji po UARTcie, pomimo że system bootuje się normalnie. Próbowałem aplikować różne device-tree, wyłączające współdzielony interface BT w celu przywrócenia pełnego interfejsu szeregowaego, ale żadna z tym metod nie działa... Czy ktoś miałby jakieś sugestie?
  4. Wygląda na to, że masz rację! Użyłem wstawek asemblerowych do chwilowego zablokowania wszystkich przerwań i jak na tę chwilę działa Wielkie dzięki! Mam jeszcze jedno pytanie: czy istnieje możliwość (na czas odczytu) zablokowania wartości rejestru CNT timera szybszego, następnie odczytanie CNT timera wolniejszego (który się nie przekręci bo przecież zablokowałem przed chwilą szybszy timer) a następnie wznowienie jego działania?
  5. Witam, co jakiś czas mam problem z brakiem inkrementacji rejestru CNT wolniejszego timera, inkrementowanego przez przepełnienie timera szybszego. Konfiguracja timerów odbywa się w sposób standardowy, tzn. pomijając ustawienia jednostek Capture, ustawiam też kaskadowe połączenie timerów zgodnie z dokumentacją. TIM5 ma być inkrementowany poprzez przepełnienie licznika TIM2. W tym celu: 1) [TIM2] Ustawiam bity 6:4 MMS = 010 (przepełnienie TIM2 powoduje załączenie TRGO) 2) [TIM5] Wybieram wejściowy trigger służący do synchronizacji licznika (ITR0, TS=000 rejestru TIM5_SMCR) 3) [TIM5] Ustawiam zbocze narastające jako taktowanie wolniejszego licznika (TRGI, SMS=111 rejestru TIM5_SMCR) 4) Odpalam liczniki TIM2, TIM5 Dodam, że rejestry TIM2->CNT i TIM5->CNT były wyzerowane. Generalnie program działa dobrze, przepełnienie TIM2 powoduje inkrementację TIM5 ale... nie zawsze! W programie wygląda to tak: // funkcja main(), pętla while(1) // część programu, wywołanie funkcji static volatile unsigned short tim5_value, tim2_value; static volatile unsigned long Timer25a, Timer25b; tim5_value = TIM5->CNT; tim2_value = TIM2->CNT; Timer25a = tim2_value + (tim5_value << 16); //zapisz do zmiennej Timer25a wartość dwóch rejestrów // tutaj występuje kilka instrukcji nie mających związku z timerami tim5_value = TIM5->CNT; //powtarzamy odczytanie rejestrów (różnica Timer25a-Timer25b da nam czas) tim2_value = TIM2->CNT; Timer25b = tim2_value + (tim5_value << 16); //zapisz do zmiennej Timer25b wartość dwóch rejestrów Jak wspomniałem, program działa bez zarzutów, jednak co jakiś czas przepełnienie TIM2 nie powoduje inkrementacji TIM5. Zdiagnozowałem to przy debugowaniu, i tak: 1) Na początku zmienna Timer23a ma wartość np. 0x2171 C519 2) A za chwilę zmienna Timer23b ma wartość np. 0x2171 0013 Mimo, że nastąpiło przepełnienie licznika szybszego (o czym świadczą 4 najmłodsze bajty) to licznik TIM5 (cztery najstarsze bajty) się nie inkrementował. Dodam, że rejestry ARR wynoszą odpowiednio: TIM2->ARR=0xFFFF; TIM5->ARR=0x2AEA; Z góry dziękuję za pomoc.
  6. Przyłączam się do podziękowań, zawsze znajdzie się coś ciekawego na co człowiek wcześniej nie zwrócił uwagi Mam tylko jedno pytanie: czy można zrealizować w analogiczny sposób komunikację PC z makietką STM32F4 Discovery Disco? Próbowałem na kilka sposobów ale komputer wykrywa tylko programator STLink, który sam w sobie nie jest widoczny dla terminalu Tera Term jako port szeregowy. Czy konieczne jest zastosowanie w tym przypadku konwertera UART TTL z USB lub, w przypadku komputera z RS232, układu MAX232? Pozdrawiam
×