Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'Blue Pill'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 1 wynik

  1. Mikroporadnik dla początkujących. Przeglądając internet często trafiałem na posty dotyczące problemu z debugowaniem popularnych tanich płytek Blue Pill a szczególnie tych zawierających chińskie klony mikrokontrolerów z kuźni STM oznaczonych CKS32. Sposoby tu przedstawione działają w środowisku Ac6 SW4STM32 i zapewne w podstawowym eclipse z dołączonymi pluginami dla STM32 za pomocą taniego klona programatora st-link v2. ------------- STM32F103C8T6 --- Problem z błędem dot. resetu podczas debugowania w SW4 przez SWD można obejść edytując plik konfiguracyjny, który jest tworzony w katalogu projektu po dodaniu nowej konfiguracji: RUN -> Debug Configurations... Trzeba kliknąć 2 razy na "Ac6 STM32 Debugging", pojawi się nowa konfiguracja. Trzeba teraz dodać plik .elf w polu "C/C++ Application" Następnie w zakładce "Debugger" po drodze można dodać opcję w polu "OpenOCD Command" na końcu za ścieżką do ocd -d3 lub -d2 dzięki czemu w konsoli debugera wyświetli się więcej informacji. Poniżej w Configuration Script należy zaznaczyć opcję "User Defined", kliknąć przycisk Browse... i otworzyć do edycji plik .cfg w pliku tym na samym dole trzeba pozbyć się wpisu "srst_only" Od tej pory procek będzie resetowany prawidłowo i możliwe będzie debugowanie po kliknięciu w robala w pasku narzędzi a połączenie z st-linkiem nie wymaga linii reset. W moim przypadku to jedyny sposób na uruchomienie debugera bo nie pomagało nawet fizyczne podłączenie resetu. W trueSTUDIO natomiast konieczne jest podłączenie linii resetu do płytki. W zakładce "Startup" na dole można też odznaczyć opcję "set breakpoint at: main " która w niektórych wersjach gdb powodowała błędy. Najlepiej dodać własne breakpinty. Tyle wystarczy aby debugować oryginalne procesory STM32 ostatnio jednak bardzo często spotykane są płytki z klonami STM. ------------- CKS32F103C8T6 (odpowiednik STM32F103CBT6 128kB Flash) --- Chiński klon ma wbity inny nr. urządzenia niż STM przez co debuger wywala błąd stlinka o niewłaściwym nr. urządzenia. Pierwsze co trzeba zrobić na początku, to w folderze instalacyjnym SW4STM32 włączyć wyszukiwarkę plików i wyszukać pliki " stm32f1x.cfg " (powinny być 2) i w każdym z nich zmienić instrukcję set _CPUTAPID 0x1ba01477 na set _CPUTAPID 0x2ba01477 Dzięki temu uC będzie poprawnie identyfikowany i debuger się uruchomi. Nie znalazłem niestety sposobu aby przekonać trueSTUDIO do debugowania tego klona tak więc w CubeIDE pewnie też będzie problem. Trzeba pamiętać aby przywrócić oryginalne pliki stm32f1x.cfg po zmianie płytki na oryginalny STM32. Czasami zdarza się, że debuger się zatnie, tj. nie zamknie sesji prawidłowo przez co jej wątek wisi w systemie i nie da się uruchomić debugowania ponownie. Pomaga wyłączenie wątku eabi-... przez w systemie operacyjnym alt+ctrl+del lub konsolę czy monitor systemu w linuxie. Oprócz ilości pamięci jest jeszcze jedna ważna różnica pomiędzy oryginalnym STM32F103C8T6 a CKS, tym razem na korzyść STM a mianowicie możliwość przetaktowania. STM32 będzie działał poprawnie przy taktowaniu ponad 120MHz chiński klon natomiast przetaktować się już nie da powyżej 72MHz. Na koniec jeszcze przykładowy plik main.c, blink za pomocą freeRTOS. Aby móc go sobie uruchomić do debugowania trzeba utworzyć nowy projekt C/C++ typu Ac6 wybrać odpowiedni procesor na blue pillu C8T6 lub CBT6, w kolejnym oknie dodać freeRTOS i podmienić plik main.c w projekcie na przykładowy. Miłego debugowania. #include "stm32f1xx.h" #include "FreeRTOS.h" #include "task.h" // Przedrostki funkcji np. v lub i pochodz¹ od zwracanych typów np. void lub int // Przedrostkiem prv zaczynaj¹ siê funkcje prywatne czyli statyczne static void prvSetupHardware(void); void vLEDTask(void *); //! Przydalaby sie wlasna struktura inicjalizujaca HAL int main(void){ prvSetupHardware(); /// Creating tasks Start: // dynamiczna alokacja pamiêci xTaskCreate( vLEDTask, "LEDTask", 100, NULL, 1, NULL );// (adres funkcji,dowolna nazwa, wielkosc stosu dla zadania w bajtach, opcjonalny parametr, priorytet wywolywania funkcji 1 - 9, wskaznik do konkretnego adresu pamiêci lub null) // statyczna alokacja pamiêci //xTaskCreateStatic(); /// End tasks creating // Glówna funkcja RTOS vTaskStartScheduler(); for(;;); // stack overflow // Kod programu jest podzielony na zadania, funkcja main sluzy tylko do // tworzenia zadañ poczatkowych. } //------------------------------------------------------------ void vLEDTask(void *pvParameters) { // Powinna byc w systemie funkcja umozliwiajaca zmiane // wartosci pvParameters z zewnatrz tutaj argument nie jest uzywany TickType_t xMonotonicClockState; // Pobiera aktualny czas systemwy // dziala podobnie do millis w arduino xMonotonicClockState = xTaskGetTickCount(); for(;;){ HAL_GPIO_TogglePin (GPIOC, GPIO_PIN_13); // Po przelaczeniu kreci sie w tym tasku vTaskDelayUntil(&xMonotonicClockState, pdMS_TO_TICKS(100)); } vTaskDelete(NULL); } /* void vApplicationTickHook(void){ //! Ta funkcja jest wykonywana w przerwaniu od ticka systemowego //! aby dodac tê funkcjonalnosc nale¿y w pliku FreeRTOSConfig.h //! #define configUSE_TICK_HOOK 1 //! Dzia³anie podobne do IDLE_HOOK z ta róznica, ze IDLE jest //! wykonywana podczas stanu bezczynnosci po oczyszczeniu pamiêci //! z zakoñczonych tasków. } void vApplicationIdleHook(void){ //! Ta funkcja jest wykonywana podczas idle state. } */ static void prvSetupHardware(void){ //inicjalizacja na podstawie kursu forbota SystemCoreClock = 8000000; // taktowanie 8Mhz HAL_Init(); __HAL_RCC_GPIOC_CLK_ENABLE(); GPIO_InitTypeDef LedC13 = { // obiekt gpio bêd¹cy konfiguracj¹ portów GPIO GPIO_PIN_13, // konfigurujemy pin 5 GPIO_MODE_OUTPUT_PP, // jako wyjscie GPIO_NOPULL, // rezystory podciagajace sa wylaczone GPIO_SPEED_FREQ_LOW // nieskie czêstotliwosci przelaczania }; HAL_GPIO_Init(GPIOC, &LedC13); // inicjalizacja portu GPIOC }
×
×
  • Utwórz nowe...