Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 12 lut 2025, o 19:30


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 
Autor Wiadomość
PostNapisane: 7 maja 2014, o 16:07 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Witam,
Mam problem związany z USARTem w układzie STM32F303. Staram się uruchomić naprawdę prosty program, którego zadaniem jest wysyłanie co pewien czas na terminal jakiejkolwiek wartości (w tym wypadku wartości 11). Chce po prostu sprawdzić czy PC cokolwiek odbiera. No i jest problem gdyż nie pojawia się nic... Sprawdzałem połączenia fizyczne - używam konwertera USB-RS232 (napięcia w zakresie 0-3.3V) - TX->RX; RX->TX. To wydaje się być w porządku. Czy zapomniałem o jakiejś dodatkowej linii ?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 17:01 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

Konfiguracja pinu TX i RX:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


USART_SendData(); wysyła tylko pojedyncze znaki np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jak chcesz wysłać więcej to:



Zwiekszyłbym tego delay`a chociaż do 100 ms
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 17:16 
Offline
Użytkownik

Dołączył(a): 25 sty 2014
Posty: 185
Lokalizacja: Działoszyn
Zbananowany użytkownik

Pomógł: 8

ps19:

na arm sie nie znam ale jaka jest roznica
miedzy
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


a

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


moim zdaniem żadna

bo w obu przypadkach dostaniesz na terminalu znak A lub kod hex liczby jezeli nie jest znakiem asci



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 17:50 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Witam ponownie,
Zdeklarowałem ponownie porty GPIO zgodnie z zalecaniami ps19, ale dalej cisza w terminalu...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 18:04 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

Spróbuj zamigać jakąś diodą na porcie A, może w RCC_config jest błąd. Możliwe, że masz coś na PC źle skonfigurowane. Wrzuć kod z poprawkami.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 18:10 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Rozumiem, że zamigać diodą poprzez rozkaz z pc->stm32 ? RCC raczej jest dobrze ustawione (CooCox z którego korzystam na co dzień jest na tyle "mądrym" kompilatorem, że sprawdza dokładnie każdą linie którą pisze - również te związane z RCC). Jeśli chodzi o ustawienia komputera... hmm... przez chwile myślałem, że konwerter jest usiekany, jednak zwarłem TX z RX no i występuje efekt echa, czyli z nim (i prawdopodobnie z ustawienia pc) jest wszystko ok



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 maja 2014, o 18:17 
Offline
Użytkownik

Dołączył(a): 15 lut 2012
Posty: 224
Lokalizacja: Opole
Pomógł: 24

Nie, zamigać diodą poprzez zmianę stanu na jakimś porcie A. W ten sposób ustalimy czy procek m.in odmierza czas i zegar w nim "tyka"

CooCox nie powie ci że zapomniałeś jakiejś linii odpowiedzialnej za konfigurację np. PLL. Sam używam CooCox`a ;)

Wrzuć cały kod z poprawkami



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 00:40 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Problem rozwiązany, wystarczyło dodać linie odpowiedzialne za konfigurację funkcji alternatywnych tzn:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


P.S.
Mam małą zagwozdkę, a nie chce zaśmiecać forum nowymi tematami. Mianowicie, chciałbym za pomocą wspomnianego stm'a próbkować sygnał o zmiennej częstotliwości (4kHz-40kHz). No i teraz tak: teoria mówi, że minimalna fp powinna wynosić jakieś 80kHz (dla tego przypadku). Z praktyki jednak wiadomo, że lepsza by była większa wartość częstotliwości próbkowania.
Narazie mam w głowie następującą koncepcję: ustawiam przetwornik ADC na 12 bit (chce "wycisnąć" z STM'a ile natura dała :D ), ustawiam go w tryb pojedynczego pomiaru i wyzwalam timerem co np. 5us. Teraz: chciałbym próbki wysyłać przez usart do pc. W czasie rzeczywistym tego nie dokonam, ponieważ standard tego nie wytrzyma (tak przynajmniej mi się wydaje), więc próbki z ADC bd wysyłał do dwóch tablic (tab1 i tab2) za pomocą DMA. Na początku zapełnie tab1 próbkami - zrobie przerwanie, rozpoczne zapełnianie tab2 - próbki z tab1 chce wysyłać do pc i tak w koło macieju. No i teraz mam zgrzyt... bo przy takiej częstotliwości próbkowania to jest prawie pewne, że tablica się prędzej zapełni próbkami z adc (np. tab1), aniżeli druga (tab2) zdąży wysłać swoje wartości przez USART'A (jeszcze dodatkowo muszę każdą próke w postaci 16bitowej podzielić na pół; wiem: adc daje 12 bitową próbkę, ale będę ją musiał poszerzyć do wspomnianych 16).
Chciałem zatem zapytać czy jest jakieś inne rozwiązanie/metoda podejścia do tego problemu ? Wiem, że istnieją rozwiązania typu przystawka oscyloskopowa do komputera, ale zanim dogrzebie się w kodzie i domyśle "co autor ma na myśli" to już 100 razy zwątpie :D



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 10:23 

Pomógł: 0

Buforowanie sprawdza się tylko wtedy, gdy masz paczki danych, albo dane nie lecą cały czas, bo jak sam zauważyłeś, kiedyś musi być czas na opróżnianie bufora.
A tak na marginesie, sprawdzałeś UARTa w STMie ;), w/g dokumentacji można go pędzić do 10.5Mbit/s



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 12:08 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Sprawdzałem, sprawdzałem ale wyniki dt. prędkości trochę mnie ....zszokowały. Załóżmy że baud rate ustawiłem w programie na poziomie 9600 (w terminalu również) - "próbki" sobie śmigają tak, że otrzymuje kilaset bajtów na sekunde - pasuje. Ale jak zwiększałem BR (nawet do 250000) to nie widziałem żadnej różnicy w ilości przesłanych informacji. Zmieniałem wartość w tej linii:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Troszkę mnie zdziwił fakt, że USART może wyciągnąć 10.5Mbit/s, ale faktycznie zgodnie z notą katalogową STM32F303 wartości są zbliżone (stosunkowo :D):
Cytuj:
The USART interfaces are able to communicate at speeds of up to 9 Mbits/s



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 12:12 

Pomógł: 0

Ja patrzałem w F407 ;).



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 12:28 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Rozumiem:)
Wiesz może dlaczego zmiana tych prędkości nie jest widoczna w terminalu ? Jedyne co przychodzi mi do głowy to to, że gdzieś w bibliotece USARTa trzeba dokonać dodatkowej modyfikacji, ale to było by bez sensu od strony użytecznej (bo po co wtedy linia z deklaracją w której wpisuje się wartość BR - patrz: wcześniejszy mój post).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 12:57 

Pomógł: 0

Rozumiem, że mimo zwiększania prędkości samego UARTa, dane nie przyspieszają?, spróbuj na początek wysyłać coś z bufora bez pobierania pomiarów, może gdzieś masz jakieś opóźnienie. Chwilowo nie jestem nic więcej w stanie podpowiedzieć, bo za chudy w kapeluszu jestem na to.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 13:52 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Wczoraj przeprowadzałem takie proste próby o których wspomniałeś - wysyłałem np. tylko 0xFF (dec: 255) lub 0x0A (dec: 10). Zmiany w BR dawały bardzo słabą poprawę ilości odbieranych bajtów w ciągu sekundy (rzędu kilku dziesięciu bajtów - zmiana BR = 9600-256000).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 13:55 

Pomógł: 0

To ewidentnie coś źle masz skonfigurowane, nawet na mega8 po uarcie śmigało mi na 200 kb.



Góra
  
cytowanie selektywne  Cytuj  
PostNapisane: 8 maja 2014, o 19:19 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Nie wiem już co jest... pewnie trzeba będzie grzebać w rejestrach.... Na chwile obecną uzyskuje "zabójcze" prędkości:
44 bajty na sekunde - przy BR=9600
201 bajt/sekunde - BR=128000

P.S.
rezasurmar korzystasz z bibliotek ST czy sam napisałeś procedury obsługi ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 maja 2014, o 22:36 
Offline
Użytkownik

Dołączył(a): 26 mar 2014
Posty: 25
Pomógł: 0

Nie chce zaśmiecać forum,a trochę mnie to nurtuje mianowicie załóżmy, ze chciałbym wyzwalać przetwornik A/C za pomocą timer'a. Do tego celu (z tego co zrozumiałem z not i idąc śladem intuicji) służy następująca linia:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

gdzie x to numer zdarzenia. Moje pytanie jest następujące: jaki numer wybrać jeśli chce wyzwalać timerem 1,2, itd. ? W nocie katalogowej ( http://www.st.com/st-web-ui/static/acti ... 068049.pdf ) nie ma nic o tym, które zdarzenie jest przypisane któremu timerowi.
Pozdrawiam.

P.S.
Znalazłem (po przeszukaniu dwóch manuali) i zostawiam w razie czego dla potomnych:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 17 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO