Skocz do zawartości

STM32 UART wysyłanie danych typu uint16_t


radek04

Pomocna odpowiedź

Co do komunikacji i zapisu na dysku to jeśli nie wiesz jak to zrobić to poszukaj w necie rozwiązań ot choćby to  https://controllerstech.com/stm32-usb-host-msc/.

   Projekty są omawiane krok po kroku i można je ściągnąć.Najważniejsze by się nie zniechęcać.Wszak wchodząc w tematy mikrokontrolerów  wchodzisz na teren w dużej części nieznany z którym należy się oswoić.Mokrokonrtolery weryfikują wiedzę jaką posiadamy,sposób myślenia,odpowiadają na pytanie czy jesteśmy logiczni.Z Controllertech  należy czerpać pełnymi garściami.Wypróbuj rozwiązania i dostosuj do własnych potrzeb.Jak dobrze  dostosujesz program do swoich potrzeb np. napiszesz polecenie by dane były lokowane w arkuszu kalkulacyjnym to pół roboty z obsługą danych na dzień dobry odpada.

Na tym forum wypowiadało się wielu na temat pomocy.Właśnie to uczyniłem i jestem z tych co raczej dają wędkę a nie rybę.W internecie znajdziesz mnóstwo rozwiązań i tam Cię kieruję a jedno rozwiązanie podałem jak na tacy.Mam nadzieję,że to doceniasz.Rozwiązań raczej szukaj na stronach amerykańskich bo wszyscy publikują właśnie tam.Musisz sam dojść do rozwiązania problemu tak jak większość na tym forum.

Link do komentarza
Share on other sites

15 godzin temu, szymonw napisał:

Co do komunikacji i zapisu na dysku to jeśli nie wiesz jak to zrobić to poszukaj w necie rozwiązań ot choćby to  https://controllerstech.com/stm32-usb-host-msc/.

Niedawno próbowałem zrobić zapis na USB właśnie zgodnie z tym tutorialem. No i niestety nie działa. Nie wiem, czy problem jest z z moimi pendrive'ami - mam dwa różne egzemplarze ze złączami micro USB, niby OTG (ale chyba nie jest jednoznaczne?), z Nucleo - F764ZG to jedyne z OTG, jakie posiadam - czy robię coś źle.

Postaram się poszukać jakiegoś poradnika z zapisem na kartę SD, bo to mnie bardziej teraz interesuje, czas już trochę goni, a ja prawie stoję w miejscu.

Choć i tak dzięki Waszym poradom wiele się nauczyłem i wiem, jak nierealne były moje pierwotne założenia z transmisją bezprzewodową.

Link do komentarza
Share on other sites

Bezprzewodowa transmisja nie jest nierealna, taki BLE "2 megabity" wykręci:

Choć tutaj lepszym byłby klasyczny BT i profil SPP - czyli serial. Wybrany moduł oczywiście powinien zapewniać odpowiednio szybki UART do komunikacji pomiędzy STM.

Edytowano przez matsobdev
Link do komentarza
Share on other sites

Na 100% masz dobrze skonfigurowaną płytę? Przeczytaj  UM1974 . Szczególnie polecam rozdział 5 a nade wszystko rozdział 6.

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dnia 11.11.2022 o 17:26, radek04 napisał:

Akurat na F7 idzie to bardzo szybko.

A racja, nie wiem czemu mi się ubzdurało, że to F103.

Dnia 11.11.2022 o 17:26, radek04 napisał:

DMA będzie szybsze od IT?

Zależy od prędkości, może nie być szybsze ale z pewnością mniej obciążające CPU w każdym wypadku.

Dnia 11.11.2022 o 17:26, radek04 napisał:

Już wcześniej wspominałem, że CubeIDE ma jakiś problem z UART_DMA na F7.

A nie ma opcji, że to napisać bez HALa?

Link do komentarza
Share on other sites

1 godzinę temu, szymonw napisał:

Na 100% masz dobrze skonfigurowaną płytę? Przeczytaj  UM1974 . Szczególnie polecam rozdział 5 a nade wszystko rozdział 6.

Wiesz, na 100% to nie wiem nawet, czy Kopernik już umarł. Ale mam spore przeświadczenie, że wszystko z płytką jest OK. Inne programy działają. Poza tym sprzętowo mam wszystko domyślnie, czyli przystosowane do obsługi dołączonych peryferiów. Masz coś konkretnego na myśli?

Obecnie walczę (znów) z SD_SPI oraz SD_MMC. W obu przypadkach kończy się na popranym zamontowaniu karty. Nie mogę nic z niej odczytać, ani na nią zapisać. Testowane 2 karty uSD, 2 różne moduły kart, Nucleo-F7 oraz Nucleo-F4 (tylko tryb SPI).

Link do komentarza
Share on other sites

Istotą poprawności działania USB jest właściwe ustawienie zworek .USB musi być zasilone z dobrego źródła prądowego.

6.4 Zasilanie i wybór mocy

Zasilanie jest dostarczane z komputera głównego przez kabel USB lub z zewnętrznego źródła: VIN (7 V-12 V), E5V (5 V) lub piny zasilania +3,3 V na CN8 lub CN11. W przypadku, gdy do zasilania płytki Nucleo-144 wykorzystywane jest napięcie VIN, E5V lub +3,3 V, źródło to musi spełniać normę EN-60950-1: 2006+A11/2009 i musi być Safety Extra Low Voltage (SELV) o ograniczonej mocy.

W przypadku, gdy zasilanie wynosi +3,3 V, ST-LINK nie jest zasilany i nie może być używany.

 

 

 

Link do komentarza
Share on other sites

Dużo pomysłów i dużo koncepcji nawet różnych od początkowych założeń. Pod koniec dnia dane pewnie wylądują na komputerze celem obróbki. Zwykły serial po USB nie będzie się nadawał? Mam na myśli czy kabelek może być pociągnięty. CoolTerm do zapisu i potem zrobić z danymi co się chce albo zrobić tak, alby się wyświetlało na bieżąco. Tutaj to nawet apka na Androida może być. Jeśli nie idzie z STM, to może coś innego? Chyba, że jego użycie to konieczność. A tak na szybko, lamerski kod pod Pico:

#include <stdio.h>
#include "pico/stdlib.h"
#include "hardware/vreg.h"
#include <unistd.h>

int main() {
    vreg_set_voltage(7);
    set_sys_clock_khz(48000, true);
    stdio_init_all();
	stdio_set_translate_crlf(&stdio_usb, false);
	uint64_t i = 0;
	uint64_t j = 0;
	uint64_t k = 0;
	uint64_t l = 0;
	uint64_t m = 0;
	uint64_t n = 0;
    while (true) {
		write(1, &i, 8);
		write(1, &j, 8);
		write(1, &k, 8);
		write(1, &l, 8);
		write(1, &m, 8);
		write(1, &n, 8);
		i++;
		j++;
		k++;
		l++;
		m++;
		n++;
        sleep_us(1700);
    }
}

Działa i tak na pierwszy rzut oka dane kupy się trzymają przy dużo wyższych transmisjach niż 24000 B/s

Edytowano przez matsobdev
Link do komentarza
Share on other sites

(edytowany)

Nie ma opcji z kablem. Obiekt będzie ruchomy, dużo danych, potrzebny szybki zapis.
Kolejny dzień walczę z SD. Próbowałem na F1, F4 i F7. Docelowo musi być F7. Próbowałem z SPI, MMC 4-bit i MMC 1-bit. Jedyne, co mi zadziałało, to prosty przykład na Arduino. Z STM ani razu nie udało mi się osiągnąć więcej, niż sprawdzenie pojemności i wolnego miejsca na karcie. Ani odczyt, ani zapis nie działa. Możliwe, że to problem z biblioteką HAL lub nową wersją CubeIDE. Resztę kodu mam w HAL i wolałbym tego nie zmieniać, ale jeśli nie da się inaczej, to wszystko zrobię na SPL. Ludzie wrzucają swoje przykłady z HAL, które im działają, a u mnie za nic nie chce ruszyć. Powoli zaczynam tracić nadzieję.

Edit 1: Pierwszy sukces z SPI na F1. Spróbuję to samo zrobić na F7.

Edit 2: No i faktycznie na F7 ten sam kod nie działa (oczywiście zmieniłem piny i numery odpowiednich interfejsów, ale główne elementy są takie same). Ewidentnie jest jakiś błąd w oprogramowaniu (driver/biblioteki/inne) dotyczący serii F7, a przynajmniej mojego Nucleo F746.

Edytowano przez radek04
Link do komentarza
Share on other sites

(edytowany)
24 minuty temu, Elvis napisał:

Skoro musi być radiówka, ale niekoniecznie BT/WiFi to może coś takiego: https://botland.com.pl/moduly-radiowe/1687-modul-radiowy-nrf24l01-24ghz-transceiver-tht-czarny-5903351242721.html ?

Nawet mam taki moduł w domu. A to wyrobi, jeśli chodzi o moje wymagania szybkości zapisu?
Nie musi być radiówka, może być też zapis na kartę. Ale przewodowa transmisja faktycznie odpada.

Edytowano przez radek04
Link do komentarza
Share on other sites

No dobrze.Widzę,że utknąłeś i nie ruszysz z miejsca.Zobacz jak to jest u mnie .Pierwsze zdjęcie pokazuje cały moduł.Najważniejsze abyś miał porządny MicroSD Card Adapter taki co to jest do kupienia za 3,5zł.Dlaczego to takie ważne  bo musisz mieć pewność jeśli idzie o  połączenia.Na drugim zdjęciu widzisz konfigurację  SPI i tu zaznaczamy tak jak widać na zdjęciu.Szybkość transmisji  u mnie jest ustawiona jest na 21MHz i aby to zmienić trzeba kliknąć w  liczbę po prawej stronie prescalera. Na trzecim konfigurację FATFS w którym jak widzisz jest podświetlony Max SS(Sect...) zmieniamy na 4096.Po prawej stronie ioc jest procesor i zaznaczone wybrane piny w projekcie.SCK.MISO,MOSI są oczywiste natomiast jakoś tak jest,że nikt nie przykłada się do pinu NSS czyli do CS na adapterze.Jest to główna przyczyna,że na karcie się nie zapisuje.Przed wygenerowaniem kodu w zakładce Menager project->code generator  odznaczamy  generate periheral initialization...  Biblioteki do obsługi karty SD w  znajdziesz na stronie https://www.micropeta.com/video29

Po implementacji bibliotek  otwieramy fatfs.c i zmieniamy #include "stm32f1xx_hal.h" na #include "stm32f4xx_hal.h" jeśli używamy procesora z rodziny STM32F4,a jeśli używamy STMF7 to #include "stm32f7xx_hal.h"  etc.Tak jak w opisie na stronie. Ale to nie koniec bo w bibliotece fatfs.h trzeba jeszcze sprawdzić czy  pin NSS  to ten sam co jest zapisany w tej bibliotece inaczej mówiąc odnajdujemy

#define    SD_CS_PORT            GPIOA
#define SD_CS_PIN            GPIO_PIN_4

jeśli nie to zmieniamy w bibliotece na taki jaki jest przypisany jako NSS.

Następnie na stronie którą podałem powyżej przechodzimy do Code modification i dokonujemy zmian zgodnie z tym co jest tam zapisane.

Program w main jest jeszcze niżej  i tylko trzeba dokonać implementacji.Powodzenia - u mnie działa i na F1 i na F4.Daj znać jak uruchomisz.

 

IMG_0965.thumb.JPG.e290f46b5670e4da271cefacabe05a39.JPG

SPI.thumb.jpg.382ce624e0b8902c68c0b764d0794787.jpg

 

FATFS.thumb.jpg.7d5b5dfa3bcb603f0ec2d0ff5e48285c.jpg

 

 

Link do komentarza
Share on other sites

(edytowany)

To pierwszy projekt, w którym widzę, by ktoś ustawiał Hardware NSS Output Signal. A widziałem ich już naprawdę sporo... Zwykle ludzie ustawiają po prostu jakiś pin jako GPIO_Output i do niego podłączają CS. Nie wiem, czy to robi różnicę, ale zrobię po Twojemu.

Dzięki za pomoc, zaraz go sprawdzę na swoim F7. Moduł SD mam identyczny.

Edytowano przez radek04
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.