Moja funkcja, po poprawieniu błędu (brak &) zapisuje wersję pierwszą powyżej.
W EP03'2018 był artykuł z przykładami. Po co kopiować tablice do RAM, jeśli możesz się do nich dostawać bezpośrednio (po adresach) przez QSPI?
Użyłem flash
Kontroler flasha to nadal tylko peryferial memory-mapped, wiec SFR w ktorym ustawiasz protekcje niczym sie nie rozni od SFRów od np. SPI, i dokladnie tak samo mozna go zapisać przez SWD/JTAG . A to juz wprost odpowiedz na twoje pytanie. SWD/JTAG pozwala na rw dowolnego 32bitowego adresu w losowym momencie, niezaleznie od tego, czy rdzen wykonuje kod,...
Zacznijmy od tego, że OpenOCD nie uruchamia się poprawie, wiec warto byłoby dochodzić do sprawy "krok po kroku". Przede wszystkim plik lpc2xxx.cfg NIE JEST przeznaczony do uruchamiania bezpośredniego, należy ZAWSZE użyć któregoś z konkretnych plików. Tymczasowo możesz użyć pliku lpc2148.cfg, ale najlepiej przerób go sobie na lpc2146 - komentarze w środku...
A tak na marginesie ... wg. DS jakiego kawałek pokazałeś (memory map) to FLASH zaczyna się od adresu 0x0 do 0x00003FFF natomiast w pliku do jlinkdevices wpisujesz BaseAddr="0x08000000" ? Zgadza się. Flash jest widziany pod adresami 0x0800xxxx i 0x0000xxxx. 0x0000xxxx bootowanie, 0x0800xxxx programowanie. W STM32 pod 0x0000xxxx jest przełączany RAM/FLASH/ROM....
To sprawdź pod jaki adres ładujesz kod do flash'a, bo do tego adresu: Flash Programming: File : F:\STM32\workspace\\HelloWorldSTM32\Rele... Address : 0x00008000 mam wątpliwości.
Być może to kwestia preferencji, być może ma to jakieś znaczenie. Zaproponowanym przeze mnie format jest - moim zdaniem - bardziej czytelny i bardziej "oczywisty". Dzieki, czyli generalnie nie ma jakiegos wpływu na sposób linkowania (w tym przypadku kiedy mamy ten sam obszar "MEMORY")
Bootloader przestawia wektory przed skokiem do softu użytkownika więc wydaje mi się że nic dodatkowo nie trzeba robić poza kompilacją pod 0x08001000. Niestety. CubeMX robi to tak że ustawia na początku rejestr VTOR (funkcja SystemInit): [syntax=c] SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ [/syntax]...
Witam, Żadne rozwiązanie z innych tematów nie działa. Posiadam płytkę STM32VLDISCOVERY, zasilam ją z portu USB. Dodatkowo posiadam konwerter na FT232, konwerter działa poprawnie, echo jest przesyłane. Korzystam z programu Terminal v1.9b. Program na odebranie 49 ma zapalać diodę LED a po odebraniu 50 ma gasi diodę. Proszę o pomoc w znalezieniu błędu....
Pamiętaj, że w STM32 Flash tak naprawdę jest na adresach od 0x8000000, a że można się do niego dostać poprzez adresy od 0 to jest już inna - konfigurowalna przez zworki BOOTx - sprawa. 4\/3!!
Proszę o sprawdzenie kodu konfiguracyjnego, Na razie dla STM32VLDiscovery. Skonfigurowałem Timer, ADC i DMA. Nie mam jeszcze skonfigurowane przerwania od zakończenia DMA. Funkcja Board(); [syntax=cpp] #include "stm32f10x.h" #include "Board.h" void RCC_Config(void) //konfigurowanie sygnalow taktujacych { ErrorStatus HSEStartUpStatus; //zmienna opisujaca...
Witam, Czy ktoś się spotkał z takim zagadnieniem: Debugowanie działa poprawnie w przypadku wartości we FLASH zawartość pokazywana jest poprawnie a w przypadku zmiennych w RAM pokazuje zwykle wartości 0 jak dam komendę "info mem" w konsoli debugera to wg mnie nie pokazuje poprawnych danych: info mem Using memory regions provided by the target. Num Enb...
Nie. Architektura ARMv7-M obsługuje niewyrównany dostęp 16 i 32bitowy. Tylko dostęp na słowa większe niz 32bity (LDRD/STRD, LDM/STM) z niewyrównanym do 4 bajtów adresem rzucają fault. Inna sprawa, że w STM32 SFRy ogólnie nie lubią niewyrównanych zapisów lub zapisów o szerokości innej niz sam SFR. Ale to się nie kończy faultem, tylko dziwną wartością...
Nie wiem dlaczego to nie działa. Mam oryginalnego j-linka, chińskiego j-linka, i ulinka2, i na każdym da się programować, debuggować i kasować różne STM32 bezzonkowo. Keil 4.03, MDK-ARM 4.10. Nie podoba mi się RAM for algorithm. W STM32 RAM zaczyna się pod adresem 0x20000000 a nie 0x10000000, to spora różnica... Popraw to, i powinno chodzić. Loader...
i oczywiście WinnerMicro W80x może być również zrzucony w tej aplikacji, jeśli adres startowy jest poprawnie ustawiony https://obrazki.elektroda.pl/1290401300_...
Witam, mam układ z oferty AVT ,w którym zastosowano takiego STMa . Sam z ARM w zasadzie zaczynam , przeczytałem trochę dokumentacji i nie jestem pewien stąd pytam Was Koledzy. Czy STM32F100C6T6B można bez przeróbek softu zastąpić innym modelem ? czy model z większą ilością flash jest kompatybilny jeśli chodzi o adresy i peryferia , jeśli tak to co mogę...
Odpowiedź na Twoje pytanie jest dosyć prosta - protokół SWD nie ma rozkazu zapisu do flash i tego się po prostu nie da tak zrobić jak zapisu do RAM. Oprogramowanie na PC, które się komunikuje przez SWD z układem (np. program do ST-Linka, OpenOCD) wgrywa do RAMu specjalną procedurę, która fizycznie realizuje zapis (poprzez odpowiednią sekwencje zapisów...
ja to tak rozumiem, że ten firmowy bootloader siedzi w zwykłym ROMie (a nie Flash-ROMie), i jest zaprogramowany w fabryce na stałe.
Dzięki za odpowiedź, ale to chyba nie jest w HAL... Zgadza się. Nie jest. Ale STM przepisał te algorytmy również na HAL i te źródła znajdują się np. w repozytorium CubeMx w ścieżce: Repository\STM32Cube_FW_F1_V1.6.1\Projec... To jest akurat dla tego typu uC który jest na tym Nucleo, ale jeśli potrzeba...
Twój program jest źle skompilowany, bo nie używasz skryptu linkera, który jest zasadniczo niezbędny. Jakbyś go zdezassemblował, to zapewne kod będzie pod jakimś abstrakcyjnym adresem. W przykładach masz dobry skrypt linkera i Makefile, który skompiluje również Twój plik assemblerowy - proponuję wtedy jednak nazwać funkcję "Reset_Handler". Poza tym przed...
to tablicy unsigned charow w flashu stm32 juz nie mozna trzymać? sprawdzilem na tablicy uint8_t zarówno zapis jak i odczyt działa bez zarzutów. W takim razie nie wiem co mogło być przyczyną problemów w przypadku pojedynczych zmiennych. To, że ci nie działa tak jak trzeba to jest wina twojego softu, nie flasha ani kompilatora. Sprawdź jak zmusić GCC...
Dlaczego w zasadzie nie wolno wykonać skoku do adresu resetu(a sprzęt wykonuje tą operację w przypadku startu z drugiego Flasha), skoro chcę w zasadzie zasymulować takie zdarzenie? Dlaczego musi to być skok do samej procedury RESETU? Bo to nie jest AVR. Rdzeń robi tak samo, sprzętowo pobiera wektor procedury startowej i skacze do niej! Zarówno w urządzeniu...
Dziwny ten Twój F103. Te, które ja znam, mają strony po 1024 B. Strona_127 + i da adres kolejnego bajtu na stronie. To, co ja pokazałem - dostęp do kolejnego słowa 16-bitowego
O adresy kodu chodzi, a nie danych. Adresy kodu mają wpływ na akcelerację dostępu do Flash. Pętla zaczynająca się od adresu podzielnego przez 16 ma szansę wykonywać się szybciej, niż taka od adresu np. 16x + 14.
Nie do końca umiem wyjaśnić, dlaczego C++ różni się tutaj od C, ale mam inną propozycję, rodem z ANSI C :) Przykładowy kod można przepisać: #include <stddef.h> typedef struct { int first; int second; int third; } type_t; #define ADDRESS 0x12345678 const int data = (ADDRESS + offsetof(type_t, second))*2; int main(void)...
Proponuję się zwrócić do producenta kompilatora którego używasz, bo zapewne nie jest to GCC. Swoje przypuszczenie opieram na tym, że w GCC twój kod działa (sprawdziłem teraz), a coś podobnego działa od lat (bo od lat sam używam makr do parsowania __DATE__ i zamiany tego stringa na wartości liczbowe). ... SYMBOL TABLE: ... 002001f8 l O .ARM.__at_0x08001F00000000004...
Tak BTW w przypadku tego akurat obiektu "constexpr" nie ma sensu - skoro używasz jego adresu (referencja w innym obiekcie), to i tak obiekt ten zostanie umieszczony w programie - zwykłe "const" miałoby taki sam efekt.
No tak, bez funkcji HAL i LL nijak nie dałoby się odczytać trzech słów z pamięci Flash. Zresztą takie czytanie pamięci bez wywołania funkcji wygląda niepoważnie i nieprofesjonalnie. Weźmy np. taki kod: #define UID ((uint32_t *)0x1FFFF7AC) idhash = UID[0] ^ UID[1] ^ UID[2]; - czysta amatorszczyzna. żeby go napisać, trzeba wiedzieć, że UID jest trójelementowym...
Hmm... Przez "niektóre komórki" rozumiesz tak totalnie jakieś arbitralne adresy, czy całe strony? Dziwne trochę, bo przecież flash da się kasować tylko stronami... Masz w swoim programie funkcje zapisu do flash'a? 4\/3!!
płytke NUCLEO-F303RE (STM32F303) Najszybciej chyba, moim zdaniem, było by wejść w ten czujnik przy pomocy MBED. Twoja płytka jest obsługiwana pod MBED , jest tam biblioteka do VL53L0X (firmowa od STM, w C++) i są przykładowe aplikacje, w tym proste demka. Np: https://developer.mbed.org/teams/ST/code... Jeśli masz tylko czujnik (a nie...
Tak, zależy mi na stałym umieszczeniu we flash, a wgrywane programy nie przekraczałyby 64kB. Wymyśliłem jeszcze taką wersję ;) żeby program kompilować do pliku binarnego i potem składać całość w "ręcznie". Choć wolałbym nauczyć się pracować na linkerze i poznać więcej informacji o nim. Jak dokładnie (krok po kroku) np.umieścić dane w oddzielnej sekcji...
Witam i dzięki za odzew! Znaczy mam coś innego niż FF wpisać pod adres? Linijką w programie, żeby przy każdym starcie to pisał czy jakoś inaczej? Taka wątpliwość-czy to nie zakłóci "emulacji eepromu"?
Mam również problemy z układem STM32F030 (obudowa TSSOP20). Główny problem polega na tym, że ST-Link (wykorzystuję ST-Link na płytce discovery) łączy się prawidłowo z układem ale nie programuje go. Nie działa również programowanie option bytes. Za każdym razem wyskakuje błąd weryfikacji już na pierwszym adresie flash (0x08000000). Natomiast odczyt pamięci...
Witam Chciałem umieścić tablice pod stałym adresem w pamieci flash, ale nie na koncu flasha. Do tej pory robiłem to tak: wycinek z pliku linkiera dla GCC [syntax=c] MEMORY { rom (rx): org = 0x08000000, len = 192k var (rx) : org = 0x08030000, len = 64k ram (rwx): org = 0x20000000, len = 64k } .... SECTIONS { .dane : { KEEP(*(.dane)) *(.dane*) } >var...
1. Nie słyszałem żeby dało się tak zrobić, głównie ze względu na przemapowanie przerwań. Jednakże mógłbyś zaimplementować sobie taki skok pomiędzy aplikacjami (wliczając w to przemapowanie przerwań) po naciśnięciu przycisku itd. Jednak jeżeli ładujesz do flash bootloader a potem aplikację to nie licz na to że będziesz mógł debugować obie na raz. Ładujesz...
Z kolei modyfikacja skryptu linkera ma tą wadę, że jeśli przeniosę kod na inny MCU to znowu bedę musiał ten skrypt modyfikować. Emulacja oparta na czystm C po prostu zadziała. No... bo każdy mikrokontroler ma dokładnie ten sam rozmiar strony i dokładnie ten sam kontroler pamięci, więc z pewnością zadziała Ci ten kod bez żadnych zmian... Ehe... Kupę,...
Nie ma właśnie nic więcej wspomniane o tym, przewija się raz jeszcze na początku ta fraza, ale żadnego objaśnienia Jest w DS objaśnienie (koło strony 500, "Theory of Operation" ) The EEPROM operates using a traditional Flash bank model which implements EEPROM-type cells, but uses sector erase. Additionally, words are replicated in the pages to allow...
Wpadłem na pomysł jak to "obejść". - w bootloaderze przekierować tablice na RAM; - "skoczyć" pod adres Reset_Handler w aplikacji użytkowej; - podczas inicjalizacji przekopiować adresy wektorów z flash do RAM (sekcja .data); Na razie próbuję: 1. umieścić wektor przerwań w sekcji .data; 2. umieścić startup.S na początku aplikacji użytkowej; Jak ktoś ma...
Nie lepiej skoczyć pod adres początku pamięci programu ? typedef void (*pFunction)(void); // ADRES POCZATKU PAMIECI PROGRAMU: #define ApplicationAddress 0x40006000 /* Flash user program offset */ // A w kodzie gdzie chcesz reset: Jump_To_Application = (pFunction) ApplicationAddress; Jump_To_Application();
Witam ! Jestem w trakcie pracy nad serwerem FTP , problem mam już na początku. Otóż wysyłam do klienta kod 220 (Service ready for new user) i klient powinien odpowiedzieć ale tak sie nie dzieje. Może zapomniałem o wysłaniu czegoś ? Oto zrzut z Wireshark: najbardziej mnie ciekawi, dlaczego to co idzie od PC nie ma wyliczonej sumy kontrolnej(=0) http://obrazki.elektroda.pl/9463538000_1...
Jak sprawdzić gdzie kompilator Keila umieścił tablice? Zadeklarowałem jedną zwykłą w RAM a drugą jako static do Flash. A chciałbym się przekonać że tak na prawdę jest. Przeglądałem plik .map ale jak wyłowić z niego potrzebne informacje? Ctrl+F w pliku map i sprawdzasz czy tablica jest pod adresem 0x08xxxxxx (flash) lub 0x20xxxxxx (RAM). Zresztą zobacz...
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ę...
Co ja mam mysleć na temat telnetu w kontekscie dogadania się z tą czarną kostką z nóżkami? W wielkim skrócie. Openocd po uruchomieniu z poprawnie skonfigurowanymi skryptami target oraz interface po wykryciu procesora uruchamia na portach ustawionych w skrypcie interface(domyślnie telnet:4444 gdb:3333) dwa serwery. Jeden z którym można się połączyć...
(at)michalko:"Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera. " No właśnie nie. Zmienna FLASH_BASE w tym wyrażeniu, to nie adres bazowy programu, ale adres bazowy całej pamięci FLASH 0x80000... (sprawdziłem). Najmniej inwazyjna zmiana, to właśnie podmiana w tym wyrażeniu FLASH_BASE na jakiś PROGRAM_BASE (celniej...
A przyczyna była błacha. Albo to przeoczyłem bo zdublowałem trochę kodu z aplikacji st u siebie - albo tego tam nie było. Nie był ustawiony adres bazowy tablicy wektorów przerwań - a powinien być na flash. A przed wywołaniem kodu st była u mnie pozostałość (z wcześniejszych aplikacji) która ustawiała adres bazowy tablicy wektorów na ram. no i przerwania...
Robiłem już tak. To znaczy w Keilu wykrywa mi SWD. Jak wejdę w opcje projektu -> "Debug" i tam dam ustawienia programatora, to daje właśnie SWD i te resety i nie ma błędu, coś odczytuje (pojawia się w tym polu po prawej jakiś adres, typ SWD i takie czarne kółeczko - więc chyba tutaj ok). Ale jak daje Flash -> Erase, to wywala mi błąd i nic się nie dzieje...
Napisałem sobie poniższy testowy kod i Flash jest modyfikowany: [syntax=c]int main() { HAL_FLASH_Unlock(); NVIC->ICER[((uint32_t)(SysTick_IRQn) >> 5)] = 0x55AA55AA; while(1); } [/syntax] Obszar NVIC jest pod adresem 0xE000E100, a rejestr ICER pod 0xE000E180. Jak się do tego doda offset wynikający z przesunięcia bitowego w prawo liczby -1 o 5 pozycji,...
już wiem czemu działa [; myślałem, że w STM32 jest tak jak w ARM7 - że jedynie kawałek pamięci jest remapowany w obszar wektorów przerwań. Doczytałem właśnie, że jednak cały FLASH jest dostępny zarówno pod adresem 0 jak i adresem 0x8000000. Właśnie dlatego całość działa. Cofam więc to co powiedziałem - układ będzie działał poprawnie, bo inicjalizacją...
HardFault wynika z błędu oprogramowania - niewyrównane dane, zły indeks tablicy albo błędna wartość wskaźnika. Trzeba zapolować na ducha (ja przedwczoraj polowałem na takiego ducha 3 godziny). Na początek zrób obsługę HardFault, która wyświetli lub gdzieś zapamięta jakieś 20 słów z wierzchołka stosu. Przejrzyj 6..8 słów za pierwszym o wartości zaczynającej...
Mam w takim razie pytanie jaki programator jtag jest najtańszy, a zarazem oczywiście umożliwi mi w miarę bezproblemowe zaprogramowanie/debugowanie układu. To zależy, czy masz LPT - jeśli tak, to patrz wyżej, jeśli nie, to patrz np tutaj - http://www.elektroda.pl/rtvforum/topic11... Po drugie potrzebuję procesor, do którego będę mógł podłączyć...
Coś tak przypuszczałem. Mógłbyś mi jeszcze powiedzieć dlaczego mi program nie zostaje w stm-ie po zaniku zasilania ? piny odpowiedzialne za uruchamianie są tak ustawione żeby bootwał się z flasha. Program zaczyna się od adresu 0x08000000 i zapewne dlatego tak jest. Jednak zmiana tego adresu na wartość 0x0 nie przyniosła spodziewanego efektu :) -- flash...
Może raczej odpowiedz, z jakiego to powodu chcesz dane umieścić w pliku .h ,a nie .c? Ja tego zupełnie nie rozumiem. Jedyny powód - to łamanie na siłę konwencji przyzwoitego pisania programów (kompilacja samego pliku nagłówkowego nie powinna powodować utworzenia ani bajta kodu ani danych). Wkompilować dane pod określony adres możesz tylko drugim sposobem...
Właśnie przed chwila przeprowadziłem pewien test: Dziś wpisałem nowy adres MAC(tzn. taki który wczoraj nie działał), różniący się od tych przy których wczoraj miałem poprawnie zestawiane połączenia. Okazało się, że dziś dla nowego adresu MAC połączenie zostało nawiązane. Więc rozłączyłem się i zmieniłem jeszcze dwa razy MAC. Udawało się za każdym razem....
Do edukacji jak działa, dobry jest taki kawałek: To jest zapis "czegoś" na jednej stronie flasha, żadnych innych "bajerów". #define Page_63 0x800FC00 uint8_t test_str[64]={"to jest test zapisywania w pamięci flash 1234567890"}; void savetoflash(){ uint16_t d; uint16_t i; // odblokuj pamięc flash FLASH->KEYR...
Cześć Od razu nadmienię, że jestem w tym początkujący. Posiadam mikrokontroler STM32F100C4T6B oraz moduł GY-50 L3G4200D. Próbuję nawiązać połączenie za pomocą interfejsu I2C i wyświetlić informację na komputerze kominukując się po UART, który na pewno działa. Jeżeli chodzi o połączenie to jestem na 99% pewny, że jest dobrze. Korzystam z programu STM32CubeMX...
Witam, czytając nieco ze źródeł angielskich o procesorach Cortex M natnalem się na wątek który nie bardzo rozumiem. Mowa o pojęciach przemapowania i aliasingu. Rozumiem że program jest wgrywany do pamięci Flash pod adres 0x0800 0000 , następnie następuje aliasing czyli mapowanie fizyczne. Zastanawia mnie czy fizycznie program zostaje przeniesiony pod...
Jechałem debugerem i nie wchodziło w SysTick_Handler... Kod poniżej: [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 72000000...
tmf napisał: w końcu standard C nigdzie nie definiuje, że stałe muszą być we FLASH. Standard C nie wie nic o FLASH, ale to nie powód. To oświeć mnie, co jest powodem. Rzeczywiscie - plik .c z taką tablicą skompiluje w ciągu pewnie 0.2 sek (a stanie się to raz o ile coś się w tym pliku nie zmieni), zlinkuje w ciągu kolejne 0.05sek. Pitolenie z ar i...
Prawdopodobnie adres przekazywany w argumencie src jest nieparzysty. Co jest bez znaczenia, bo ARM Cortex-M3 (i M4 oraz M7) obsługują niewyrównany dostęp do RAMu (choć niekoniecznie atomowo i niekoniecznie szybko, co nie ma znaczenia w tej akurat sprawie). Używasz w ogóle czegoś innego niż ARM Cortex-M0? One od innych układów nie różnią się jedynie...
Witam Robię prototyp płytki pod STM32L151 i zatrzymalem się przy zewnetrznym kwarcu. Nie mialem go zamiaru użyć, ale jak wyczytałem w "STM32™ microcontroller system memory boot mode" AN2606 str 39 "The external clock is mandatory only for the DFU bootloader and must be in the following range..." , wynika że jak chcę użyć DFU bootloader to muszę...
Pytanie 1: http://infocenter.arm.com/help/index.jsp... CORTEX nie koniecznie wykonuje czynności w spodziewanej kolejności czy w spodziewany sposób, przekonałem się o tym dobitnie po kilku dniach nieustającej próby napisania tego w c/c++ bez podglądu na wygenerowany kod (tzn algorytm działał jednak występowały jittery...
Czy poprzez podanie adresu zmiennej która jest we flash'u rozumiesz podanie adresu zmiennej utworzonej w ten sposób? volatile short int d; volatile short int *c = &d; Jak mam się dowiedzieć jaki numer strony muszę podać do skasowania? Po podaniu 50 strony program nie wychacza ale to przypadek. FLASH->AR = 0x08028800;
Umieszczam pojedyńcze funkcje w pamieci ram za pomocą __attribute__((section(".data"))) i funkcje te ładnie lądują w pamięci ram. Jak teraz sprawić, żeby procesor poprawnie skakał pod ich adres w ramie? Do puki funkcja main jest w ramie i wszystkie inne też to jest ok ale gdy z funkcji main znajdującej się w pamięci FLASH skoczę do funkcji znajdującej...
FTDI+Flash Loader Demo(v2.80)+wgrywam boot20_pc13.bin Aaaa. Czyli przez UART, zworki itd. . Tej informacji mi brakowało. To ok. W STM32 wgranie bootloadera jest identyczne jak każdego innego samodzielnego programu, bo w zasadzie niczym się od nich nie różni. Wgrałeś, wystartował i chodzi tak jak go autor napisał. Trudno mi się wypowiedzieć w kwestii...
Witam, wcześniej napisałem tu głupoty, usunę. Faktycznie, u mnie po pierwszym wywołaniu EE_Init jest 0x0000 pod adresem początku pierwszej strony, tj. 0x0801000. Rozumiem, że PAGE0_BASE_ADDRESS, PAGE0_END_ADDRESS itd pozmieniałeś na takie jak u mnie ( uwzględniając wielkość strony )? Pozdrawiam, QuadMan. DOPISANE: Jedyne, co mi przychodzi do głowy to...
To za mało - w RAM musiałaby się znaleźć tablica adresów procedur obsługi wyjątków oraz wszystkie funkcje wołane z procedury przerwania (np. SPL). Moim zdaniem problem leży gdzie indziej, np. w źle napisanej obsłudze przerwań UART lub w grubszym błędzie koncepcyjnym.
Szukam programu do programowania STM32F103 z opcją zaprogramowania w dowolnym adresie flash swojego numeru seryjnego. Chodzi o to, aby przed programowaniem, można było wpisać numer i adres i został ten numer zapisany pod wskazany adres wraz z kompletnym programem. Potrzebne coś na wzór opcji "Serial Number Config" w PonyProg.
Adres pamięci ROM jest ustawiony zgodnie z notą katalogową uP. Po zmianie adresu w zakladce target i ucillities z 0x8000000 na 0x0H pojawia się komunikat "No algorithm found for: 00000000H - 0000033FH" Płyta jest nowa i nie rozumiem dlaczego flash mógłby być zablokowany, ale spróbuje Flash Loader Demonstrator.
Z racji że STM32 ma liniową pamięć oraz możliwość zapisu do flasha danych z poziomu aplikacji postanowiłem wykorzystać go do symulacji eeprom. Zapis danych do flash działa OK. Natomiast mam problem z zainicjowaniem struktury pod konkretnym adresem. const D DFLASH __attribute__ ((section(".variables&q... = { {{40,20},26},...
W dalszym ciągu nie rozumiem dlaczego reset miałby nie zadziałać. Na przykład w STM32 program startuje z flash-a, ładuje nowy kod do RAM i ustawia zewnętrzny sygnał na pin BOOT, tak by RAM był mapowany na adres 0x00000000. Jeśli damy reset i program załadowany do RAM będzie dobry (tablica wektorów też), układ zadziała prawidłowo. Ale po błędzie i przemieleniu...
Chciałbym ulepszyć pewien produkt zbudowany w oparciu od STM32F101. Udało się zrzucić pamięć FLASH procesora, nie był zablokowany. Zawartość pamięci wygląda na poprawną, widać napisy wyświetlacza, można wyodrębnić funkcje. Mam problem ze zrozumieniem wektora startu. Obszar pamięci FLASH zaczyna się następująco: 0x08000000: 0x20000400 0x08000004: 0x080586F5...
Wcześniej program mi się ładował a nic w opcjach kaila nie grzebałem. Oczywiście również przeleciałem po forach. Sprawdziłem adresy pamięci/algorytmy programowania i zdają się one być ok. Próbowałem wgrać program z odpalonego bootloadera, ale również nic. Rozwiązanie z forum kaila również przetestowałem, z marnym niestety rezultatem.
Witam, Czy ktoś słyszał o projekcie aby uruchamiać procedury z pamięci flash_spi w ramie procesora. Temat podobny jak moduły DLL w windows. Interesują mnie problemy/konfiguracja takiego środowiska, najlepiej pod eclipse. Generalnie procesor ma wewnętrzny flash tam siedzą funkcje związane z komunikacją po spi oraz inne procedury reszta jest w pamięci...
cześć takie dwie sprawy. 1. Zakładając że mam zadeklarowane dwa takie ciągi znakowe [syntax=c]char *str1 = "string numer 1"; char str2[] = "string nr 2";[/syntax] oraz jakąś funkcję która wysyła przekazany ciąg znaków dla przykładu na RS choc może być to jakiś LCD [syntax=c]void wyslijRS(char * ciag);[/syntax] z tego co rozumiem to str1 jest ZMIENNĄ...
Niestety obecnie mam bardzo słabe łącze (bluconnect) więc swoich plików nie "przepchnę". Zresztą nigdy nie napisałem żadnego programu do migania diodą na LPC'ka.:D a obecnie mój projekt kompiluje się do ponad 100kB. Jedynie co mogę poradzić na już to poszukaj gotowych przykładów dla Keila. W tych przykładach startup jest pisany w C , jedynie co to podstaw...
To sugeruje pomieszanie adresów RAM/Flash: Error: MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x8000004 Podejrzewam(nie jestem orłem w ARM), że load_image jest do ładowania do SRAM.
Wszystkie muszą być const - to chyba logiczne, skoro będą znajdować się we flash, to nie da się ich modyfikować przez standardowe "x = y;". Mogą być "const volatile", choć nie wiem po co - chyba tylko po to, żeby sobie dołożyć problemów (; Muszą być const tylko z punktu widzenia użytkownika (żeby kompilator nie pozwalał skompilować kod w którym ktoś...
Masz rację, że szkoda całego tygodnia na taki problem:). Oto cały kod: Main: http://obrazki.elektroda.pl/2257364500_1... podłączenie do STM'a wygląda nastepująco: RxD do PA10, TxD do PA9. Więc nadal stoję w miejscu, ale nie poddaje się;).
W F030 strona ma wielkość 1kB co oznacza, że zmieści się tylko 256 zmiennych Jak to obliczyłeś? Pewnie 1024/4 bajty = 256, ale tutaj tak to nie działa. Strona 1024 bajty to 1024 bajty, inaczej 512 półsłów. Zapis do stron pamięci w STM32F0 wymaga zapisywania półsłów, do jednej strony oczywiście można zapisać 512 półsłów. W poniższym przykładzie zapisuję...
Zastosowanie miałoby być takie: Robię komputer na obd2 i opisy kodów błędów chcę mieć w pamięci flash i teraz tak. Chciałbym przechowywać opisy w postaci plików txt. otwieram plik o danej nazwie błędu i mam opis. Jednakże dużo prościej i bardziej optymalnie będzie chyba jednak rezerwacja określonej liczby bajtów w pamięci na opis i odnoszenie się do...
Dziękuję kolegom za cenne uwagi. Co do wersji z os.mbed.com, to próbowałem ją do siebie przeportować ale niestety efekt był podobny. Poprawiłem kod według wskazówek kolegi Freddie Chopin, przerwanie SysTick jest generowane co 10 us oraz wydłużyłem czasy dla półbajtów, ale efekt jest dalej taki sam. Pojawiło się też słówko volatile. Kod wygląda teraz...
Jak procesor wykonuje kod już nie ma tam linkera, jak przekopujesz do tablicy kod działającej funkcji i ją wywołasz to ona się wykona, jak będzie w niej jakiś błąd to procesor to wyłapie Tak, tylko linker łączy pliki i tak powstaje kod maszynowy. Więc według Ciebie mogę wziąć funkcję z innego projektu (innej kompilacji) i też ma się poprawnie wykonać?...
Pamięć NAND nie jest mapowana w przestrzeń adresową FSMC. Pamięć NAND wymaga wysyłania jej durnych rozkazów, i jest to ekwiwalentnie pokręcone jak obsługa kart SD/MMC (tyle że prościej). Dodatkowo zapomnij, że będziesz sobie w stanie tą pamięć ot tak zapisywać jak słowo pod wskaźnik do RAMu czy FRAMu. FSMC definiuje ci tylko adresy pod które mozesz...
Dostałem płytkę z zablokowanym prockiem STM32F103C8T6, niestety nie mogę się dostać do niego ani JTAGiem(loader failed) ani przez serial bootloader - nie widzi procka. Poprzedni użyszkownik twierdzi, że zaznaczył wczystkie opcje dotyczące: - read protection, - user option bytes - flash memory write protection option bytes w programie Flash Loader Demonstrator....
Ok działa, ale tylko jak wgrywam plik bin. Komendą load nie chce się flash poprawnie zapisać, ponieważ pod adresem wskazanym przez sekcję "bootlader" dostaję same 0xffffffff (gdb komenda "mdw 0x0801A000"). Jak wgram plik bin dostaję również błąd w chwili gdy debuguje ( debuger nie widzi kodu np. z obsługi przerwania No source available for "USART4_Handler()...
Witam Mam pytanie (wcale nie hipotetyczne): Mam własny program + zamknięte biblioteki (format *.LIB - ok 18kB!) z których on korzysta. Przyszła potrzeba wykonania bootloadera. W związku z tym, że zarówno bootloader, jak i aplikacja wymagają do działania właśnie tej (nie małej jak widać) biblioteki dobrze byłoby umieścić ją w stałym miejscu pamięci Flash....
Nie zrozumiałeś, o co chodzi, a chodzi o ograniczenie liczby operacji kasowania. Nie wiem, jak to robi ST, ale typowo robi się to tak, że Flash przechowuje wartości elementów wektora, który może być unią "narzuconą" na strukturę. Przy każdej modyfikacji pola struktury do pamięci Flash zapisuje się indeks zmodyfikowanego elementu wektora i jego nową...
Piszę aplikację na STM32F103 i muszę umieścić niektóre skompiowane pliki pod konkretnym adresem we Flash (a właściwie od konkretnego adresu). Uzywam środowiska Ride7 i kompilatora GCC Wiem, że można to zrobić w pliku skryptu linkera ale za nic nie udaje mi się tego wykonać. Do tej pory nie miałem takiego problemu z innymi kompilatorami. Szukałem jak...
Witam Zaczynam swoją przygodę z STM32 (nie chce rozmawiać dlaczego nie atmega itp). Zakupiłem zestaw STM32F429- DISCO. Postanowiłem pracować z książką "STM32 Aplikacje i ćwiczenia w języku C". Programy od producenta działają bez problemu. Jednak podczas przepisywania szkieletu programu z książki występują problemy z biblioteką stm32f4xx.h (tak, jest...
Ta tablica nie jest potrzebna - ona jest tylko do celów demonstracji (jak zwykle w przypadku ST bardzo głupiej). Nieprawda. Tablica ta jest kluczowym elementem przy przepisywaniu zmiennych z jednej strony FLASH do drugiej, gdy pierwsza z nich jest już pełna. Procedura EE_PageTransfer() musi wiedzieć apriori ile najbardziej aktualnych wartości zmiennych...
Jak więc tego dokonać? Jak to zrobić w CooCox czy w Keilu - no idea (; CooCox: Menu Project->Configuration, panel "Memory Areas", radiobutton "Debug in RAM" zamiast "Debug in Flash". Będzie widać, jak zmienią się adresy w polach powyżej radiobuttonów. Pozdrowienia, MKi
Nadal nie działa. Czy po wgraniu docelową aplikację ze zmienionym ofsetem dla wektora przerwań powinna ona działać? Chodzi mi o to, jak sprawdzić, czy wgrywana aplikacja ma dobre ustawienia, takie aby przenosząc ją na kartę SD można było ją wgrać przez bootloader? EDIT: W końcu się udało - musiałem zmienić adresy w opcjach konfiguracyjnych w sekcji...
Witam można to zrobić tak? Dwa projekty w jednym boot w drugim program wykonywalny. 1. projekt z bootem rom (rx) : org = 0x08000000, len = 16k // akurat 16k ma sektor// linker w tym projekcie mam tylko dwie opcje : - konfiguracja zegara+ czytanie programu np przez spi + zapis do flash - lub skok do adresu 0x08004000 2 projekt z programem. rom (rx) :...
Witam, Bawię się zestawem ZL27ARM i robię ćwiczenia z książki "STM32. Aplikacje i ćwiczenia w języku C" Jestem przy ćwiczeniu 18 i mam problem z DMA (pierwszy raz mam styczność z DMA). Zgodnie z przykładem wypełnienie PWM powinno zmieniać się od 0 do 100%. U mnie jest cały czas 50%. Dane z tablicy bufor_PWM nie są przekazywane do TIM1->CCR1 http://obrazki.elektroda.pl/9548353800_1...
Witam, Mam problem z którym już chwilę się borykam. Do STMa mam podłączony czujnik BAR180 z którym już się komunikuje po I2C. Dodatkowo skonfigurowałem ADC w trybie pomiaru jednokrotnego wyzwalanego przez Timer1 co 500µs. Dane z ADC chcę przerzucić do bufora przez DMA. Utworzyłem bufor jako tablicę o 256 pozycjach, ponieważ tyle chciałbym pomiarów....
Generalnie adres w PC wskazuje na kilka instrukcji "po" faktycznym problemie, bo zanim problem "dojdzie" do wykonywania, to PC jest już nieco dalej. Przed PC na stosie masz odłożony też LR - możesz sprawdzić też tam czy czegoś dziwnego nie ma wcześniej. Generalnie ciężka sprawa zwykle jest z tymi HardFaultami... Sprawdzam stos -> w chwili wystąpienia...
Już poprawiłem, czytam na temat tego co napisał BlueDraco Dodano po 47 BlueDraco wertuje dokumentację AN2606 ale z tego co widzę to Boot mode to własnie bootloader o który mi chodzi, więc jeśli go wyłączę to stracę możliwość aktualizacji software. Ogólnie jeśli dobrze rozumiem, to aby wyjść z tego trybu należy dokonać sprzętowego restartu procesora...
Zauważyłem dziwną rzecz, W pamięci ROM znajduje się zakładamy prawidłowy kod który jest kopiowany do RAMu. Zauważyłem różnice między kodem we flashu i w ramie która najprawdopodobniej jest problemem (skąd ta różnica jeszcze nie wiem). W pliku *.lss pod adresem 0x20000010 jest prawidłowy skok do system_init(). W pamięci flash pod adresem (0x08000000...
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);...
stm32 adres adres flash flash stm32
pw3015 unitra przetwornica xenon działać problemy lumia sieć
domofon hikvision liebherr zamrażarka
Vermona Regent 1020 – dane techniczne, schemat, moc, tranzystory, NRD EMTEL FX3000 – przegląd techniczny, kalibracja, testy bezpieczeństwa, serwis roczny