Jak uruchomić STM32 z FLASH by działał później w pamięci RAM. Dedykowane dla Keil: - plik startup_stm32f10x_xx.s Ułatwię niektórym czasu i szukania w necie rozwiązań flashowania z poziomu własnego bootloadera pamięci programu. Ja przyznam szczerze nie znalazłem żadnego opisu w necie, wobec czego napisałem własne rozwiązanie. Jako że asembler ARMów to...
GPIOA->BSRR |= GPIO_BSRR_BS5; To nie źródło problemu ale tak się tego rejestru nie używa. To jest write only rejestr czyli tylko samo przypisanie Zgadza się, dzięki :) Co do głównego problemu, punkt 1. Użyj debugera okazał się bardzo pomocny :) Założyłem, że skopałem coś w Makefile (np. brakuje jakiejś flagi) i podczas debugowania nic ciekawego...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
Witam. Od pewnego czasu bawię się STM32. Starając się przejść na nieco wyższy poziom niż klepanie w C na AVRach a przy okazji zrozumieć 'bebechy' SMTów - nie używam bibliotek - trochę korzystam z poradnika szczywronka, trochę z przykładów Freddiego, trochę z innych rzeczy znalezionych w sieci, wydrukowanego RM i tak dalej. Mam takie pewnie trywialne...
Wygenerowany jest bezpośrednio z CooCoxa Linkera tutaj nie ma chyba jest zaszyty w środowisku. Wersja CoIDE to: Version: 1.7.8 [syntax=c] /** ****************************************... * (at)file startup_coide.c * (at)author Coocox * (at)version V1.0 * (at)date 20/07/2010 * (at)brief M0 M3 Devices Startup code. *...
Ok, wydaje mi się że przewalczyłem ten problem. Tzn teraz mam plik *.ld (sam zedytowałem jakiś znaleziony w bibliotekach STM32) i dodałem tablicę wektorów znajdującą się w w pliku stm32f10x_it.c. (chodzi mi o to by wykorzystać biblioteki bez przeróbek). Wszystko się teraz ładuje do Flasha z tym że jak debuguję to procesor skacze po programie. Tzn wchodzi...
Witam temat podobny do http://www.elektroda.pl/rtvforum/topic23... Lecz sprawa wygląda troszkę inaczej. Z racji tego, że atollic udostępnił wersję litte postanowiłem przesiąść się z keila. Dotychczas korzystałem z example usb hid na keila. W Atollicu skonfigurowałem sobie nowy procesor, wrzuciłem kod z uvision i po małych przeróbkach (dostosowanie...
Witajcie, Pracuję na STM32 CL i do końca nie rozumiem zachowania się openocd. Plik mam poprawnie skompilowany (z przkładów freddiego ). W eclipsie sekcje GDB_Hardware Debugging mam ustawiona następująco: main->C/C++ Application: {wkazanie pliku: stm32_blink_led.elf} Debugger -> GDB command -> arm-none-eabi-gdb.exe Debugger...
Cześć, Projekt zaraz będę konfigurował od początku. Fakt, podałem za mało danych, wybaczcie, skrajna nerwica mnie na to wzięła. Od początku: Używam SW4STM32, ale chciałbym od tego odejść mocno, bo za dużo automatów i za mało szczegółów, może dlatego, że nie potrafię tego wszystkiego ogarnąć. Kompilatora używałem poprzez naciśnięcie "build". W ustawieniach...
Witam Wysyłam przykładowe ramki z terminala do STM32 przez driver MAX3485 i cały czas sypie mi błędami w odpowiedziach. Nie mam też pewności czy to co wysyłam z terminala do STM32 dociera bez błędów. Poniżej fragment kodu oraz zrzut ekranu. Powinienem otrzymać to co wysyłam. Czarny kolor to odebrane ramki. Proszę o pomoc http://obrazki.elektroda.pl/7456669500_1...
No wiec tak, te dwie rzeczy są takie same w obu twoich przykładach i ich nie zmieniałem: __main_stack_size = 0; __process_stack_size = 1024; Przedstawiam poniżej to co teraz mam w moim projekcie: STM32F103RC_rom.ld [syntax=c]/*****************************... * author: Freddie Chopin, http://www.freddiechopin.info/...
Hej Freddie, tym razem to już mam poważny problem i proszę Cię o pomoc. Problem mam cały czas z przerwaniami. Nigdy mi w sumie tak naprawde nie zadziałaly na tym projekcie od stm. Przerobiłem Twoją tablice wektorów przerwań: /** \file vectors.c * \brief STM32 (STM32F101 - STM32F103) vector table and __Default_Handler() * \details STM32...
Poczytałem manuala do JTAga i spróbowałem wgrać kod przez OCD. Wywołuje go z parametrami: -f scripts/interface/ftdi/jtag-lock-pick_ti... -f target/stm32f1x.cfg -c "adapter_khz 1000; reset_config trst_and_srst; init; reset init; flash write_image erase C:/ARM/project_eclipse/stm32_timer/out/s... reset run; shutdown;" Otrzymuje błędy:...
Debugger coś mieszał. Podłączyłem ulinka i zaczelo śmigać... Ale mniejsza - teraz trafilem na znacznie gorszy error ;/ Mianowicie napisałem sobie ISRa który daje semafor funkcją xSemaphoreGiveFromISR(). Konfiguracja priorytetów 4:4. configMAX_SYSCALL_INTERRUPT_PRIORITY = 9 ISR ma priorytet 10 Grzebanie w NVICu jest w sekcji critical. Niestety funkcja...
Witam Posiadam oryginalnego JLinka firmy Segger + sterowniki libusb-win32 1.2.2. Mam problem z połączeniem z targetem w OpenOCD. Używam mikrokontrolera STM32. Takie błędy mi wyskakują: C:\>openocd -f interface/jlink.cfg -f target/stm32.cfg Open On-Chip Debugger 0.4.0 (2010-02-22-19:05) Licensed under GNU GPL v2 For bug reports, read...
michalko12: Zmieniłem xHandleTaskLED1, xHandleTaskLED2 na static, ale nic to nie pomogło. xLastFlashTime nie można: error "initializer element is not constant". W keilu żadnej tej zmiennej nie miałem jako static a program działał więc podejrzewam, że nie tu jest problem. Dodano po 4 Smashing: Jak wrzucam Twój program do Eclipsa to się nawet nie kompiluje...
Jakieś dziwne zjawisko. Wszystko działało tz. w pętli pytałem urządzenie po modbusie a teraz jakieś dziwnie zachowanie . Tak jakby zawieszony procesor nic się nie wykonuje w pętli . Co może być przyczyną ? Całość poniżej : [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h"...
[syntax=c]RCC->CFGR &= (uint32_t)0x88FFC00C; RCC->CR &= (uint32_t)0xEEFEFFFE; RCC->CR &= (uint32_t)0xFFFBFFFF; RCC->CFGR &= (uint32_t)0xFF02FFFF;[/syntax] Brawo i kto będzie to czytał? Ale mało ambitnie podszedłeś do tematu bo kopiuj wklej z HAL-a. Napisz sam, bo na razie to taki Twój "własny" szablon, jak cesarza Japonii. Gdzie jest reset handler?
No ale jak zrobisz takie przyporządkowanie o jakim piszesz (bez podziału) to funkcja Reset_Handler ma adres w RAM, więc w tablicy wektorów będzie adres w RAM. Oczywiście zanim ten Reset_Handler się uruchomi, to w RAM nic nie ma - tak więc to nie ma prawa działać... 4\/3!!
(at)_lazor_ Reset Handler Raczej ciężko nazwać to przerwaniem.
Ten fragment skryptu linkera jest "ciekawy": DISCARD : { libc.a(*) libm.a(*) libgcc.a(*) } Flagi na które zwrócił Ci uwagę (at)GrzegorzKostka nie są żadnym problemem, wiec możesz je zostawić. Dodaj do skryptu linkera (gdzieś na początku) coś takiego: OUTPUT_FORMAT("elf32-littlearm&... "elf32-bigarm",...
Istnieje szansa że tak - program po prostu postarał się przypisać adresom odpowiadające im rozkazy no i wyszedł taki oto mix [; Widać tutaj, że tablica wektorów raczej jest dobra, teraz podejrzyj Reset_Handler, a konkretnie adresy które ładuje on do "czyszczenia" .bss i inicjalizacji .data - wg pliku map Reset_Handler był pod adresem 0x08015128 4\/3!!
Ekhem, mój błąd ;] Przysięgam, że widziałem HardFault_Handler zamiast Reset_Handler... Co nie zmienia faktu, że spacerek do reset handlera nie powinien występować na dowolny zonk z serii hardfault, a jeszcze tym bardziej, przy wyłączonym watchdogu. Najwidoczniej, występujący tutaj fault jest jeszcze bardziej 'hard' niż standardowy hardfault. Chyba że...
Tak rzeczywiście zauważyłem właśnie, że main_stack_size był wyzerowany, więc przerwania nie miały prawa działać poprawnie. Jednak spróbowałem wpisywać jedną z kilku różnych wartości i w to miejsce i nie pomogło. Jak patrzę na tą tablicę wektorów w pliku vectors.c, to pierwszym elementem jest adres końca stosu, a potem jest reset handler itd. A jak patrzę...
Oczywiscie tak. Dodam ze uzywam programu System Workbench [syntax=c] /** ****************************************... * (at)file startup_stm32.s dedicated to STM32F103C8Tx device * (at)author Ac6 * (at)version V1.0.0 * (at)date 2018-04-06 ****************************************...
Generalnie jak wyskakuje Ci double fault, to raczej możesz w debuggerze klikać co chcesz, sesja debuggowania jest "zepsuta" - to tak jakbyś wcisnął podczas debuggowania reset. 4\/3!!
Pokaż cały kod - inicjowanie, main, Reset_Handler i tablicę adresów wyjątków. Im dłużej patrzę w te kawałki, które podsyłasz, tym więcej mam podejrzeń.
Program się tam nie zaczyna. Tam programator ładuje Twoją binarke i tam zaczyna się tablica wektorów. Ale zdecydowanie nie program :) Taki trochę skrót myślowy ;) Jeżeli chcesz tablica wektorów była zgodna z wpisami w elf-ie to musisz (przykład ze startupu STM-a gdzie tablica jest w pliku asemblerowym) Skrypt linkera: /* ENTRY(Reset_Handler)...
Spróbuję w tą stronę co mówisz, ale chciałem użyć najprostszego przerwania od przycisku, żeby się tego trochę nauczyć. Tym niemniej, trudno mi zrozumieć dlaczego flaga się resetuje poza wyjściem z handlera przerwania. Może źle to rozumiem, ale jak zastawiam breakpoint na wejściu do przerwania to drgania styków chyba nie powinny mieć dla mnie większego...
To samo - za mały stos. Czy tylko to może kierować program akurat w te maliny ( default handler)? (wystarczy w nim zakomentować/usunąć ze 3 linijki). Po takiej zmianie w skrypcie linkera nieużywany stos może mieć rozmiar 0. Czyżby te poniżej niniejszego opisu: "Thread mode uses process stack (PSP) and is privileged" ?
Wywal w jasną cholerę tą bibliotekę! Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __use_two_region_memory ;wlaczamy wszystkie zegary :] ldr r0,= 0x00000557 ;r0: data ldr r1,= 0x40021000 ;r1: base addr: rcc reg ldr r2,= 0x14 ;r2: offset: rcc_ahbenr str r0,[r1,r2] ldr r0,= 0x000059fd ;data ldr r2,=...
Koniecznie i niezależnie od aplikacji, i jest to zarówno ogólna zasada (żeby zmniejstzyć szansę na zgubienie kolejnego przerwania) jak i specyfika STM32 (z powodu opóźnienia w samym kasowaniu i możliwości błędnego powtórnego wejścia w obsługę).
Witam, a więc działam sobie na płytce ZL31 z kamami, w wersji z odłączonym st-linkiem, za programator i debugger służy mi jtag-arm z andtechu, jest to urządzenie na bazie ft2232. Soft to toolchain skonfigurowany podług tutka freddiego chopina. Wszystko ładnie działało jak trzeba do dzisiaj, gdy w którymś momencie zauważyłem, że skompilowany program...
Zmieniłem program i dodałem opóźnienia. Tak teraz wygląda funkcja wysyłająca dane (i grupujące je w bloki po 250 bajtów) w STM32: [syntax=c]#define MAX_TRANSFER = 250[/syntax] [syntax=c]void wyslijDane ( uint8_t *wskaznik_poczatku_danych, uint8_t *wskaznik_konca_danych) { uint32_t dlugosc_danych; //okresla liczbe danych do przeslania int calkowite_transfery...
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
Kod: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
Witam. Jestem w trakcie pisania bootloadera po magistrali CAN dla STM32F103VE. Opieram się głównie na publikacji AN2557 zamieszczonej na stronie ST. Potrafię przesłać aplikację użytkownika po magistrali CAN do uC i zaprogramować pamięć Flash od wybranego adresu w górę. Na wstępnie odblokowuje pamięć Flash (FLASH_Unlock(); ) następnie podgrywam aplikację...
Problem wynika z tego, że w Cortexach jeden ze stosów jest inicjalizowany SPRZĘTOWO, po resecie, tak samo pobierany jest adres funkcji Reset_Handler(). Problem o którym piszesz jest znany i polega na tym, że procka resetujesz, on w tym momencie wczytuje sobie SP oraz adres funkcji Reset_Handler(), a następnie programujesz do niego coś nowego, zupełnie...
Z całym szacunkiem ale jestem przeciwnego zdania. Zdarza mi się bowiem używać skoku na 'reset handler' np. przy błędach assercji. Wystarczy nie robić tak ryzykownych rzeczy, tylko po prostu zresetować układ za pomocą odpowiedniego rejestru w NVIC. Zajmie to dokładnie tyle samo pamięci, tyle że w odróżnieniu od takiego skoku na pewno będzie działać...
próbuje uruchomić openocd i rlinka na targecie stm32 primer (circle). Komunikacja z Ride7 działa, ale chciałem skonfigurować eklipsa tak jak radzi Freedie. Skompilowałem openocd 0.4.0 odpalam: G:\arm\openocd\tcl>openocd openocd -d 3 -l openocd.log -f interface/rlink.cfg -f board/stm3210e_eval.cfg lub G:\arm\openocd\tcl>openocd openocd -d 3 -l openocd.log...
Dodano po 31 Kiedy debuguje program, krokowo, zaraz po a = 124; z linii b = log10(a); wskakuje do nieskończonej pętli - void HardFault_Handler(void). Tak jakby sam adres procedury wywoływał błąd sprzętowy.
target halted due to breakpoint, current mode: Handler HardFault Skup się na tych dwóch rzeczach. Sprawdź czy napięcie zasilania nie narasta zbyt wolno. Albert
Gdzie tablca jest zdefiniowana zależy od toolchaina. Możesz mieć np coś takiego w pliku vectors..... [syntax=c]__attribute__ ((section(".isr_vector"),used)) pHandler __isr_vectors[] = { // Cortex-M Core Handlers (pHandler) &_estack, // The initial stack pointer Reset_Handler, // The reset handler NMI_Handler, // The NMI handler HardFault_Handler, //...
Macie racje az trudno uwierzyc :) Tablica jest w asemblerze i jest prawie pusta :) Srodowisko mam zainstalowane ale nie używam. To jest dopiero pułapka dla poczatkujacych (zresztą nie tylko) [syntax=armasm] .section.isr_vector,"a",%progbits .typeg_pfnVectors, %object .sizeg_pfnVectors, .-g_pfnVectors g_pfnVectors: .word_estack .wordReset_Handler .wordNMI_Handler...
Operacje jakie masz do wykonania przy skoku do swojej aplikacji to: - Ustawienie wektora tablicy przerwań na Adres Bazowy Aplikacji (nazwijmy to ABA) - przepisanie z ABA+0x0 wskaźnika stosu do MSP (główny wskaźnik stosu) - pobrania z ABA + 0x4 wektora resetu i skok pod ten wektor - nie skaczesz pod ABA +0x4 tylko pod ten adres który znajduje się w ABA+0x4...
Temat mocno nieaktualny, ale sprobuje odpowiedziec. Moze przyda sie, jesli ktos bedzie mial podobne symptomy. Wg mnie przerwanie przychodzi, ale brakuje procedury obslugi, czyli ISR. Wtedy wykonuje sie domyslny handler, jesli takim masz wypelniona tablice wektorow przerwan lub wystepuje HardFault jesli nie. Zalezy w czym projekt jest napisany. Przykładowy...
Tak na szybko to powinieneś mieć plik prawdopodobnie o nazwie startup, w którym umieszcza się wektory obsłygi przerwań wyglądający jakoś tak: [syntax=c] //Interrupt vector table __attribute__ ((section(".isr_vector"))) void (* const exceptions_vectors[])(void) = { &_estack, // The initial stack pointer reset_handler, // The reset handler unused_vector,...
A jednak nie działa poprawnie i problem nie był w moim roztargnieniu. Sytuacja jest taka, że pierwsza transmisja kończy się przedwcześnie, kolejne są w porządku. W pierwszej ucina się trochę ponad jeden bajt na końcu, tzn. przesyła się fragment przedostatniego i potem już nie. Wysyłanie: void startUSARTDMATransferTx(uint8_t * buffer) { DMA1_Channel4->CCR...
No więc przeczytałem to co w tych linkach było do przeczytania i nie znalazłem odpowiedzi. Wpisałem coś takiego w wierszu poleceń: openocd -f interface/parport.cfg -f target/stm32.cfg -c init -c reset i dostałem coś takiego: Open On-Chip Debugger 0.4.0 (2010-02-22-19:05) Licenced under GNU GPL v2 For bug reports, read http://openocd.berlios.de/doc/doxyge...
Witam Jak wyliczyć coś takiego za pomocą preprocesora ? Criterion for valid user code: The reserved Cortex-M0 exception vector location 7 (offset 0x 0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The bootloader code checksums...
reset handler reset stm32 stm32 reset
awaria alternatora peugeot grzechotka elektryczna brother brudzić kartka
Regulacja szybkości odtwarzania w Unitra MDS432 Czy WD-40 jest odpowiedni do czyszczenia potencjometrów głośności?