Znaleziono 6 wyników

autor: tuxcnc
17 paź 2022, 13:41
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

Re: DRO STM32F103C8T6 (Blue Pill)

Napisałem od podstaw w środowisku STM32CubeIDE program na STM32F401ccu6, czyli tę płytkę, która przynajmniej chwilowo jest bezkonkurencyjnym zwycięzcą w kategorii "STM32 możliwości/cena" (na Aliexpress ~15 PLN plus wysyłka).
Wstyd się przyznać, ale pieprzyłem się z tym cały dzień, a przecież to wyjątkowo prosty program.
STM32CubeIDE nigdy nie używałem, choć próbowałem kilka razy. Największym problemem jest niedostępność dokumentacji. To znaczy, że dokumentacja na pewno jest, ale znaleźć ją w Internecie nie sposób. O co by się Google nie pytać, to się dostaje sto linków do kretyńskich publikacji jakichś debili, którym coś się fuksem udało i mają imperatyw pochwalić się tym w necie...
Niemożliwością jest przekopać się przez te góry śmieci żeby odnaleźć wartościowe treści...
Najpierw myślałem że szlag mnie trafi, bo mi przy edycji pinów kasowało fragmenty mojego kodu. Rozwiązanie okazało się wyjątkowo proste - kod użytkownika należy wpisywać pomiędzy komentarzami "USER CODE BEGIN ..." a "USER CODE END ...", wtedy rekonfiguracja zostawia te fragmenty kodu tak, jak je zastała. Aż trudno w to uwierzyć, ale tak podstawowej informacji nie znalazłem nigdzie i sam się musiałem tego domyślić...
Drugie pół dnia zmarnowałem na przejście z arduinowego Serial.print() na standardowe printf(). O ile sposób przekierowania standardowego wyjścia na port szeregowy znalazłem od razu, to efekt był daleki od oczekiwań...
Otóż taki prosty kod doprowadzał mnie do szału:

Kod: Zaznacz cały

 while (1)
  {
      printf("X%ld;Y%ld;Z%ld;", timer2_ovf + TIM2->CNT, timer3_ovf + TIM3->CNT, timer4_ovf + TIM4->CNT);
      HAL_Delay(50);
  }
Dla lepszej czytelności usunąłem wszystkie komentarze, ale jak wcześniej pisałem, są one bardzo istotne.
Funkcja printf() działa poprawnie z podanymi argumentami, ale oczywiście pewny tego być nie mogłem.
Funkcja HAL_Delay() też działa poprawnie, czego też pewny być nie mogłem.
Tak więc szukałem przyczyny w składni, typach argumentów, a nawet w systemie przerwań...
Otóż wynik działania tej pętli można przewidywać w taki sposób, że co około 50 ms jest wysyłany jeden pakiet danych na port szeregowy, natomiast w rzeczywistości wypluwa ona wiele pakietów na raz, jak z karabinu maszynowego, po czym jest kilkusekundowa cisza...
W końcu okazało się, że przyczyną jest używanie przez funkcję printf() bufora... Najzwyczajniej printf() pisze do bufora, a nie bezpośrednio na wyjście, zawartość bufora jest natomiast wysyłana na wyjście w całości i do tego w momentach które trudno przewidzieć. Na szczęście można funkcję printf() zmusić do tego, żeby nie korzystała z bufora i wysyłała dane od razu na wyjście...
Powyższe jest doskonałym dowodem na to, że korzystanie z ArduinoIDE jest w dłuższej perspektywie głupotą.
Aczkolwiek pisanie prostych programów w tym środowisku jest dziecinnie proste, o tyle napisanie bardziej zaawansowanego kodu jest drogą przez mękę, najpierw zaczynają się schody, potem schody są coraz wyższe, a na koniec trafiamy na ścianę, na przykład w postaci bibliotek rozbabranych do połowy i porzuconych w takim stanie, czego doskonały przykład mamy tutaj.
Kodu napisanego w ArduinoIDE na STM32F103 nie da się w żaden sposób przenieść na STM32F401 tylko i wyłącznie z tego powodu, że autor ukrywający się pod ksywą CARLOS biblioteki dla F103 przerobił, a biblioteki dla F401 rozbabrał i porzucił, bo trafił na zbyt wiele problemów. Tutaj akurat ktoś sprawę totalnie spartaczył, tego kto to już nie wiem, ale albo biblioteki są z różnych wersji kompilatora, albo autor bibliotek miał kompatybilność w głębokim poważaniu. Dość powiedzieć, że argumenty pewnych funkcji w F103 są zadeklarowane jako zmienne, a w F401 jako stałe... Po prostu kod napisany pod F103 nie ma prawa zadziałać w F401 i faktycznie nie działa...
No a potem ktoś, kto korzystał z ArduinoIDE bo łatwo i szybko, musi zapomnieć o wszystkim czego się nauczył i zacząć wszystko od zera w jakimś poważniejszym środowisku, albo poprzestać na projektach na poziomie Blink...

Wracając do programu DRO napisanego na STM32CubeIDE, to wygląda na to, że wszystko działa jak powinno i kod będzie przenośny na dowolny STM32, pod warunkiem że posiada on potrzebne zasoby.
Niestety nie mam w tej chwili ani czasu, ani głowy żeby wszystko sprawdzić i dopieścić kod, więc na razie go nie opublikuję.
autor: tuxcnc
13 paź 2022, 01:00
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

Re: DRO STM32F103C8T6 (Blue Pill)

tristar0 pisze:
12 paź 2022, 18:12
niby się bulwersujesz a tu skrobiesz że CKS następny klon udający STM.
Mam do Ciebie ogromną prośbę, czytaj uważnie moje posty zanim je skomentujesz.
Tam naprawdę jest napisane jasno i wyraźnie co robię i dlaczego.
A robiłem próby uruchomienia kodu z pierwszego posta w tym temacie na obecnie dostępnych i tanich płytkach.
Teraz piszę program od nowa, w środowisku STM32CubeIDE, żeby podobnych jajec uniknąć w przyszłości.
autor: tuxcnc
12 paź 2022, 12:38
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

Re: DRO STM32F103C8T6 (Blue Pill)

Jeszcze dwie próby.

1. https://www.aliexpress.com/item/1005001639712812.html
Cena jest wyjątkowo atrakcyjna, bo to dużo potężniejszy procesor od F103.
Niestety, poprawnie skompilować programu mi się nie udało.
Tutaj sprawa jest ewidentna, kompilator używa zupełnie innych plików i ustawień dla F103 i F401, co widać nawet pobieżnie przeglądając kod.
Najzwyczajniej biblioteka BluePillDRO nie jest kompatybilna z STM32F401.
Natomiast sam układ ma potrzebne zasoby i program będzie na nim działał, pod warunkiem że się kod napisze od nowa, najlepiej na inny kompilator, najlepiej STM32Cube, bo to najbardziej perspektywiczne rozwiązanie.

2. https://www.aliexpress.com/item/1005004150862710.html
Nie kupowałem u tego sprzedawcy, więc nie mogę go polecić, ale na tej aukcji są pokazane aż dwa (trzy?) chińskie klony STM32F103C8T6...
Zupełnie przypadkiem zauważyłem, że na jednej z kupionych jakiś czas temu płytek, chip ma logo CKS a nie ST, więc jest to właśnie chiński klon CKS32F103C8T6.
Wgrałem do niego firmware dla oryginalnego STM (ten z załącznika w pierwszym poście tego tematu) i wygląda na to, że działa prawidłowo.
Co do dwóch pozostałych klonów nie mogę niczego powiedzieć, bo nie wiem.
Znając Chińczyków, może to być dokładnie ten sam chip inaczej oznaczany, ale też mogą być znaczące różnice.
Sprawa jest dość istotna, bo ewidentnie Chińczykom kończą się płytki z oryginalnym STM32F103C8T6, więc podnieśli ceny i czekają na jelenia, który kupi resztki za wariackie pieniądze. Potrafią krzyczeć nawet 50 PLN za taką płytkę z oryginałem, choć za te pieniądze można kupić procesor o dwie klasy wyższy...
autor: tuxcnc
11 paź 2022, 22:37
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

Re: DRO STM32F103C8T6 (Blue Pill)

tristar0 pisze:
11 paź 2022, 14:49
tuxcnc pisze:Po wgraniu firmware od STM32F103C8T6 DRO nie działa
Bo pewnie to jest GD 32F....
Czytałeś dokładnie?
C6 (sześć)
autor: tuxcnc
11 paź 2022, 12:33
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

Re: DRO STM32F103C8T6 (Blue Pill)

Odgrzeję temat, bo mam kilka nowych informacji.
Otóż jakiś czas temu kupiłem kilka takich płytek: https://www.aliexpress.com/item/1005002441720435.html
Nie to żebym jakoś specjalnie polecał, ale cena jest tak śmieszna, że warto wypróbować...
Zamówiłem trzy STM32F103C6T6 i trzy STM32FEBKC6T6, żeby je porównać, ale Chińczyk przysłał mi sześć STM32F103C6T6 na niebieskiej płytce V1.1...
Tak więc nie mam pojęcia czy te układy różnią się czymkolwiek oprócz nazwy, bo niewątpliwie to są klony a nie oryginalne ST.
Dziś się wreszcie zebrałem sprawdzić, czy moje DRO pójdzie na tym wynalazku.
Po wgraniu firmware od STM32F103C8T6 DRO nie działa, przez post szeregowy idą jakieś bzdury.
Ale po skompilowaniu programu na "płytkę" "Generic STM32F103C6/fake STM32F103C8" wszystko działa prawidłowo. Cóż zapewne jest więcej różnic niż Chińczycy mówią...
Oczywiście działają tylko dwie osie (X i Y), ale wiadomo że nawet oryginalny STM32F103C6 jest mocno okrojony i nie ma timera T4, więc nic dziwnego że on nie działa.
No ale jak ktoś ma taką płytkę i wystarczą mu dwie osie, to można użyć.
W załączniku tylko firmware do chińskiego STM32F103C6, resztę plików można pobrać z pierwszego posta w temacie (nic się nie zmieniło).
fake-STM32F103C6-BluePillLinearDro.tar
(20 KiB) Pobrany 33 razy
autor: tuxcnc
29 gru 2020, 19:42
Forum: WARSZTAT
Temat: DRO STM32F103C8T6 (Blue Pill)
Odpowiedzi: 23
Odsłony: 3173

DRO STM32F103C8T6 (Blue Pill)

Układ służy do odczytu dowolnych enkoderów kwadraturowych i jest domyślnie skonfigurowany dla enkoderów liniowych, modułu Bluetooth HC-05 i współpracy z programem https://play.google.com/store/apps/deta ... ystoys.dro
Czyli enkodery podłącza się do płytki z STM32F103, a odczytu położenia dokonuje na tablecie lub telefonie.
Należy uważać z podłączeniem enkoderów, bo STM32 pracuje z napięciem 3,3V. Jeśli enkodery mają wyjście NPN Open Collector, czyli tylko zwierają do masy, to można je podłączyć bezpośrednio, ale lepiej się upewnić czy nie podadzą na mikroprocesor niebezpiecznego napięcia. Zawsze można użyć jakiegoś konwertera poziomów logicznych, ale najlepiej szybkich transoptorów, które zapewnią nie tylko izolację galwaniczną, ale też wymuszą przepływ prądu w przewodach enkoderów, co zwiększy odporność na zakłócenia.
Specjalnie nie ma czego opisywać, w programie są komentarze do których pinów podłączyć poszczególne sygnały, a dodatkowe informacje, np. o podłączeniu modułu HC-05, można znaleźć w necie.
Potrzebne są moduły Blue Pill (STM32F103C8T6), HC-05, oraz trzeba mieć programator ST-link V.2. Koszt na Aliexpress to poniżęj 10 PLN za płytkę z wliczoną dostawą, w Polsce zapewne dwa razy drożej.
Jeżeli ktoś chce coś zmienić lub wykorzystać program do współpracy z innym sprzętem, to należy dodać bibliotekę do Arduino IDE i korzystać z "płytki" https://github.com/rogerclarkmelbourne/Arduino_STM32 (Jeśli ktoś nie wie o co chodzi, to nie powinien się za to zabierać).
Jeżeli natomiast ktoś chce po prostu zbudować urządzenie bez żadnych modyfikacji, to jest załączony plik firmware BluePillLinearDRO-BT.ino.generic_stm32f103c.bin , który wystarczy wgrać np. programem https://github.com/fpoussin/QStlink2

Należy podkreślić, że jest to trzykanałowy sprzętowy dekoder kwadraturowy, którego częstotliwość pracy idzie w megaherce, a nie popularne programy na Atmegę, wychwalane przez ignorantów, partaczy i druciarzy, a liczące z prędkością o rzędy wielkości mniejszą.

Jak będą pytania, to odpowiem.
.
BluePillDRO.tar
(40 KiB) Pobrany 154 razy

Wróć do „DRO STM32F103C8T6 (Blue Pill)”