Nie piszesz o Cortex-M, a o STM32 - popraw temat. U innych producentów uC wygląda to zupełnie inaczej. Pamięć spod adresu 0x08000000 w normalnym trybie pracy STM32 zostaje odwzorowana również pod adresem 0 - jest dostępna do odczytu (tylko) pod dwoma adresami.
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
Witaj, Ja popełniłem w przesłości bootloader dla tego mikrokontrolera ale mój własny bootloader musiał być umieszczony w pierwszych sektorach flasha. Jak będziesz chciał go wykonać to pamiętaj o przemapowaniu wektorów przerwań no chyba, że ich nie używasz. U mnie bootloader zajął 1 sektor 8k ale to na styk było a program który wgrywasz musisz zacząć...
Ja bym dodał dodatkową sekcję i przy pomocy attribute w gcc jawnie umieścił zmienne i funkcje w tej sekcji. Potem tylko wywołując linker należy określić gdzie ta dodatkowa sekcja ma wylądować. Inne rozwiązanie wskazał już kol. (at)Freddie Chopin .
Tz że router próbował przydzielić adres 192.168.1.102 ? Tak! Aby DHCP działało, twoje oprogramowanie musi je obsługiwać! Widać, że router próbuje ci wepchnąć adres 192.168.1.102, ale płytka milczy. Proponuję wejrzeć w kod i zacząć od tego, czy płytka odbiera ramki (obserwować całość Wiresharkiem). W płytce po odebraniu ramki (czyli funkcja ETH_CheckFrameReceived()...
z tego co widzę to 19 przerwanie czyli moje prowadzi pod inny adres niż wszystkie No tak, tyle ze to przerwanie jest "19-te", tyle że przed nim jest kilka systemowych. Wg tabelki w manualu tych układów, adres wektora przerwań dla TIM14 to 0x8c, natomiast u Ciebie wektor jest pod 0x68... Błąd masz taki, że za bardzo w nią zaingerowałeś... Zwróć uwagę,...
po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
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
Poleceniami Column Address Set i Page Address Set można ustawić adres piksela, jeżeli wartości początku i końca obszaru są takie same. Tyle że jest to niesamowicie nieoptymalne. To właśnie jest optymalne, ponieważ rysując bitmapy lub fonty (też bitmapy) podajesz współrzędne początkowe (X,Y), podajesz szerokość (W) i wysokość(H), a następnie ładujesz...
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?
0. Skasuj flagi TCIE, HTIE, TEIE, DMEIE w rejestrze DMA_SxCR lub odpowiednim DMA_xIFCR. 1. Ustaw CCR1_EN w odpowiednim DMA_SxCR. Kolejna transmisja powinna zostać rozpoczęta. Poszczególne strumienie pozostają w ostatniej konfiguracji, łącznie z adresami.
A musisz te dane pchać cyklicznie co jakiś czas czy generalnie kiedy tylko się pojawią? Jak źle kombinuję to mnie poprawcie, ale nie lepiej byłoby wykorzystać tu FSMC i pisać po prostu pod odp. adres?
Możesz napisać coś więcej jaki STM32 dokładnie , jakie adresy ?
Witam STM32F103ZET +IS61LV256. (16 bitów) Pracuje na Bank 1 adres 0x600 0000 do 0x6FF FFFF. Jeśli FSMC_NE3 to jak jest adres w FSMC dla tej pamięci? Myślałem z jak Bank 1 ma "This bank is split into 4 regions with 4 dedicated Chip Select signals", to FSMC_NE3 (jak podzielę na 4 równe części ) będzie odpowiadać 0x600 0000 + 0x120 0000. Używam takiego...
W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz to wykluczyć, przed wysłaniem ramki do komputera wyślij cokolwiek do STM32, żeby ten zarejestrował adres IP i MAC w swojej...
Moja funkcja, po poprawieniu błędu (brak &) zapisuje wersję pierwszą powyżej.
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef?
Mój problem polega na ustawieniu MAC adresu układu STM32 komunikującego się z po łączu Ethernetowym. Wykorzystuje bibliotekę LWIP. Czy jest jakiś sposób aby ustawić unikalny MAC adres takiego układu, np. wykorzystując ID procesora aby bliźniacze układy w sieci nie miały konfliktu adresów?
Witam, problem polega na tym że utworzyłem trzy zmienne globalne typu const uint8_t i kompilator przypisuje dwóm pierwszym ten sam adres 0x80030D4 . Trzecia zmienna już miała inny adres. Utworzyłem więc dwie kolejne zmienne do testów aby sprawdzić jaki otrzymają adres: const uint8_t ZMIENNA_TEST1=3; uint8_t zmiennaTest2=10; lecz niestety debugger ich...
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Twierdzisz, że pisałeś z notką, a kod jasno pokazuje, że nawet do niej nie zajrzałeś. Kod ogólnie to same błędy, nie ma sensu ich wymieniać nawet. Całość do poprawki. Brak obsługi ACK. Niepoprawna obsługa wysyłania. Nawet jeśli przyjąć ze ilość danych zawsze będzie = 2. Na pewno nie odczytujesz z pod adresu 0x75.
Może masz jakieś przesunięcie w wektorze albo niezgodność nazw? Sprawdź jaka funkcja jest pod tym adresem..
Standard C nic nie mówi o kolejności zmiennynch w pamięci. Przyzwoity kompilator i linker będzie rozmieszczał dane w kolejności malejącego rozmiaru, a nieupywane będzei eliminował całkowicie. Chcesz mień znany rozkład danych - użyj struktury - kompilator nie ma prawa jej zoptymalizować, ale będzei stosował wyrównanie naturalne, czyli np. int32_t będzie...
Znaki zdefiniowane w CGRAM występują również pod adresami 8-15 (powtarzają się tam znaki 0-7).
Swego czasu aby STemWin działało, trzeba było w STM32 właczyć układ peryferyjny odpowiedzialny za liczenie CRC. Służyło to temu, że w STemWin był wkompilowany na stałe test czy owe CRC działa, co miało potwierdzić, że biblioteka używana jest z STM32, a nie np. z LPC17xx. Zobacz jakie wartości są w tych adresach 0x80069c2 i 0x80069ca.
Tutorial jest pisany dla LPC2xxx. Dla STM32 nie ma to żadnego znaczenia, ale pominięcie tej komendy nic nie zmienia w kwestii adresu ładowanego programu - adres jest definiowany przez skrypt linkera. 4\/3!!
Nie twierdzę, że M3 nie może być utożsamiany z STM32. Jak sam luc52 podkreśliłeś, setki i dwusetki posiadają M3. Ale już czterysetki i grupa F0 nie. Więc chyba nie tędy droga. Proszę, nie zamierzam się z nikim spierać która odpowiedź jest prawidłowa. Jeżeli chcesz, to Ci powiem: tak, masz rację, ślicznie podkreśliłeś. Dla mnie wskazanie któregokolwiek...
Funkcja, której używasz, sama przesuwa adres w lewo.
Nie używaj tej głupawej biblioteki to będziesz wiedział dokładnie Co zrobiłeś i jak to cofnąć. Zmiana wskaźnika stosu PRZED wywołaniem jakiejś funkcji (FLASH_Lock() ) też nie wydaje mi się szczególnie dobrym pomysłem. W ogóle proste zadanie, ale tak je zakręciłeś jakimiś dziwnymi konstrukcjami, że nie wiadomo o co chodzi... A tak przy okazji, to skoro...
Użyłem flash
"Rejestry GPIO" to nic innego jak adresy w pamięci. Operuj adresami, a nie nazwami. Makra najprawdopodobniej będziesz musiał napisać sobie sam.
Mam prawie identyczny przypadek. Sterownik to SSD1289. Biblioteka do niego to glcd w ktorej mamy #define LCD_REG (*((volatile unsigned short *) 0x60000000)) /* RS = 0 */ #define LCD_RAM (*((volatile unsigned short *) 0x60020000)) /* RS = 1 */ Jak to się wylicza i jak w tym przypadku działa FSMC?
Ogólnie dobrze kombinujesz. Wyrzuć ustawienie VTOR z aplkikacji - niech ustawia go bootloader. W bootloaderze zawołaj procedurę spod adresu pobranego z adresu 4 aplikacji, czyli o 4 dalej niż wartość VTOR. Jedyna potrzebna zmiana w skrypcie konsolidatora - to adres startowy (no i zmniejszony rozmiar dostępnej pamięci ROM)
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...
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")
to ja zmierz. Dodano po 48 Ale wcześniej podałem Ci jaki to bedzie na 99% adres.
czy przed wyjściem z bootloadera ustawiasz SP na wartość z adresu 0x08001000 ? Tak =========== update =========== - dodałem automatyczny reset po wgraniu FW - inne poprawki Mam już częściowo działający bootloader pod stm32f401 (usb otg). Szkoda tylko że pierwszy sektor ma 16kB i większość będzie pusta :(
OMG, ale po co ładujesz wciąż plik .bin... Załaduj po prostu plik .hex czy .elf - parametr offset nie ma wtedy żadnego znaczenia (jest ignorowany), bo pliki te zawierają adresy. Co do parametru "unlock" - jeśli masz układ z zablokowaną pamięcią, to ta komenda nie zadziała zawsze - jak widzisz - w niektórych układach po odblokowaniu pamięci konieczny...
A czy nie jest problemem że masz adresowanie 7 bitowe a adres "OwnAddress1" wynosi 0x99
Korzystam z przejściówki USART ->USB na FT232, podobno do 3MB/s. Docelowo chcę to zrobić na STM32F103, najwyżej zjadę z częstotliwości próbkowania do 4 kHz . Jak nie da rady to spróbuje wykorzystać interfejs USB w STMie, chociaż jeszcze tego nie robiłem. Zrobiłem teraz to samo co poprzednio ale tak aby transmisja się powtarzała, ustawiam zgodnie...
Poproszę na PW adres email.
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
1. Deinicjalizujesz RCC, PLL i pozostałe zegary 2. Resetujesz i wyłączasz Systick 3. Wyłączasz przerwania wcześniej zerując flagi 4. Ustawiasz wskaźnik stosu na początek pamięci bootloadera 4. Skaczesz do adresu pamięci bootloadera +4 Wszystko jest analogiczne do poniższego przykładu dla F4: https://stm32f4-discovery.net/2017/04/tu...
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
"WHO_AM_I dla LIS3DSH to [0x3f]" zgadza się to wartość rejestru o adresie [0x0f]
Sprawdź 65. linię kodu - tam zapewne masz błąd. Może to być też problem 7 linii skryptu linkera.
Dałem radę już cokolwiek zrobić, jednak nadal mam problem z odbiorem drogą radiową (wysyłania jeszcze nie sprawdziłem). Zaraz opiszę co dokładnie nadal nie działa. W załączniku dodaję cały projekt. Kody (obecne): main.c [syntax=c]/** ****************************************... * File Name : main.c * Description : Main...
Tego też próbowałem. Tyle że jak dam po to wszystkie wczesniej wpisane wartości do rejestrów zostały wyzerowane. Nie mogę dać włączenie przez wpisaniem ustawień, bo nie które rejestry nie mogą być zmieniane po włączeniu. Walcze nadal i teraz bawie się czasami, ale nadal to samo;/ Dodam, że na STM32F1 mi to działało.
Nie ma możliwości zapisywania poszczególnych BAJTÓW (w uproszczeniu), a wygląda że to próbujesz zrobić. Funkcje zapisują zwykle 2 bajty na raz, adres zapisu powinien być więc parzysty, a Ty powiększasz zmienną Address tylko o 1 między wywołaniami.
Samo się zapamiętuje - przerwanie zgłoszone jest "zgłoszone" dopóki go nie obsłużysz (albo ręcznie nie "skasujesz"), wcale nie musi być wciąż "fizycznie" w jakimś stanie. Ok, jakas flaga sie pojawia, ale jesli obsluguje takie z wyzszym priorytetem, to nizsze czeka. To nizsze niech bedzie czujnikiem zalania. Wody przybywa, czujnik ciagle to sygnalizuje,...
Cześć, Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void) { GPIO_InitTypeDef...
Witam Robię teraz testy na HardFault z STM32. "Skaczę" sobie pod jakiś adres, po kilku próbach. Jak jestem w while(1), sprawdzam rejestry. W R12 -zawsze jest adres w który skacze, hmmm... w LR - jest zawsze FFFFFFFD
Mam kolejne pytania: 1.Czy trzeba na początku ściągnąć ze stron producenta i instalować sterownik do tego programatora który jest na tej płytce(STLINKv2)? Jeśli tak to może ktoś znałby adres. 2.Freddie Chopin piszesz "Mój zestaw testowy to makieta z mikrokontrolerem LPC2103 (rdzeń ARM7TDMI-S) oraz JTAG-lock-pick. Aby połączyć się z układem w Wierszu...
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!!
Witam Rozumiem, że chcesz aby cały kod wynikowy został umieszczony w pamięci RAM. Żeby tego dokonać należy zmienić adres sekcji ROM w skrypcie linkera: "rom (rx): org = 0x08000000, len = 128k" na pamięć RAM(zaczyna się od adresu 0x20000000 dla stm32). Pamięć RAM również należy przesunąć o odpowiedni adres. Jeżeli masz w kodzie przerwania to nie zapomnij...
No bez przesady, ile tranzystorów wymaga? Zestaw 8 bramek dla &= i 8 bramek dla |= (może nie prostych bramek, ale bramek z przerzutnikami itd.). Tylko jeden zestaw dla |= i jeden dla &= dołączany odpowiednio do wybranego rejestru przez szynę adresową w regionie bitband. Nie potrzeba przecież takich zestawów oddzielnie dla wszystkich rejestrów procesora,...
A gdzie wybór kanału? Dodano po 2 A gdzie wybór kanału? I dlaczego skaczesz z adresem co polslowo?
Witam, Po wielogodzinnej zabawie wreszcie udało mi się uruchomić I2C i nawiązać komunikację z akcelerometrem. Jednak mam mały problem - chciałbym w jednym adresowaniu w trybie do odczytu odczytać zawartość kilku kolejnych rejestrów z akcelerometru. Póki co udało mi się napisać działający program odczytujący tylko jeden rejestr, więc do odczytania trzech...
OK! FatFs działa, dzięki za pomoc. Okazało się, że faktycznie FatFs wskazywał odczyt sectora 0x800, ale moja funkcja SD_ReadBlock czytała z określonego offsetu (0x800), a nie z 0x800*512, na co zwrócił mi uwagę Grzegorz. Po dodaniu mnożenia adresu razy 512 w funkcji SD_ReadBlock wszystko zaczęło działać i poprawnie komunikować się z komputerem. Powstaje...
Użyj memory view z adresem który podaje wskaźnik.
Zmieniłem na podane przez Ciebie funkcje: [syntax=c]#include "stm32f4xx.h" #include <stdio.h> #include "stm32f4xx_spi.h" #include "main.h" #include "gpio.h" #define CS_0 GPIOE->ODR &= ~(1<<3); #define CS_1 GPIOE->ODR |= (1<<3); void spi_init( void ) { RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;...
char *s = 0; sprintf_(s,"Moj stryj ma %d lat",liczba);//przykladowy tekst Przecież sprintf nie przydziela dynamicznie pamięci - jeśli wywołasz tą funkcję w ten sposób, to sprintf_() zaczyna pisać pod adresem 0 (aktualna wartość wskaźnika i koniec. Do tej funkcji musisz podać prawidłowy bufor, który pomieści cały text wynikowy. Zadeklaruj...
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...
- po co było rzutowanie *(__IO uint32_t*) i dlaczego adres wyliczał się błędnie Nie wiem czemu to usunąłeś, ale to jest KONIECZNE. A to dlatego, że ty nie masz skoczyć pod adres (tablica_wektorów + 4), tylko pod adres który jest zapisany w (tablica_wektorów + 4). I właśnie po to było tam rzutowanie i dereferencja wskaźnika. 4\/3!!
Witam Jak w temacie chcę połączyć dwa stm32 przez Ethernet ale bez PC, ustawić adresy statycznie, i wymieniać między nimi dane. W uip też ten ból występuje, a problemem jest przekazanie gotowej ramki IP do ARP, ARP nie mając adresu IP w swojej tablicy rozpoczyna procedurę pozyskania adresu MAC, a ramkę z IP odrzuca. Może w tym jest problem. Jeśli chcesz...
Zawsze możesz próbować grzebać na stosie i w rejestrach (adres "powrotu" powinien być w LR), ALE... HardFault wyskakuje jak pojawia się inny - krytyczny - problem, który jest nieobsługiwany. 4\/3!!
A jak daję w f_read & przed zmienną to nic nie zmienia? Zastanów się nad tym sam... Funkcji każesz odczytać 480 bajtów. Gdzie ona je niby ma zapisać, skoro podajesz jej adres zmiennej o rozmiarze 2 bajty? To że wpisujesz tam '&' nie sprawia że nagle zmienna uint16_t staje się workiem bez dna... 4\/3!!
Dodanie podstawowego wsparcia dla innych układów jest porównywalne z postawieniem projektu na FreeRTOSie - ot po prostu musisz mieć tablicę wektorów i skonfigurowane rozmiary/adresy pamięci i dokładny typ układu. We FreeRTOSie przecież wsparcie dla STM32 czy dla LPC tak samo nie istnieje - tablicę wektorów, skrypt linkera, startup, Makefile (czy konfigurację...
[syntax=C] unsigned int ADRES=0x.......; unsigned int zmienna; *((volatile unsigned int*)ADRES)=zmienna; //zapis pod "ADRES" zmienna=*((volatile unsigned int*)ADRES); //odczyd spot "ADRES" [/syntax]
Witam, Nie mogę się dogadać z tym układem. Widzałem już dużo przykładów ale nic mi to nie daje już sam nie wiem. Kod: *Ini [syntax=c] void czujnik_spi_ini(void) { RCC->APB2ENR|= RCC_APB2ENR_SPI1EN ; //wlacz spi1 taktowanie RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN ; //aktywuj i w porcie A RCC->AHB1ENR |= RCC_AHB1ENR_GPIOEEN ; //aktywuj i w porcie...
Zmień pierwszy oktet adresu MAC na 0x00.
BlueDraco nie mieszaj, nsvinc nie daj się wkrecać, bo nie o tym mowa. DMA obsługuje transfery 8-, 16-, 32-bitowe. HardFault tak jak pisałem generuje np. próba zapisania do adresu "tylko do odczytu". W przypadku wciągnięcia śmieci ze zmiennej albo rejestru peryferium najczęściej dostajemy adres 0x00 lub z przedziału 16b i nie ma nic do rzeczy to czy...
Nie musisz być członkiem organizacji JEDEC. Wystarczy że zarejestrujesz się tam a jak utworzą ci konto to możesz pobrać pdf, np.: JESD84-B51.pdf gdzie znajdziesz wszystkie potrzebne ci informacje.
Cortex, po resecie, odczytuje adres stosu i początku programu z początku pamięci. I tego nie przeskoczysz. Przesuwanie tablicy wektorów przydaje się np. jeśli na początku flasha masz kod bootloadera (z własną tablicą wektorów) a potem przechodzisz do właściwej aplikacji, która ma swoją osobistą tablicę wektorów pod innym adresem.
Faktycznie w datasheet zakres pamięci flash dla tego STM'a to 0x4002 3C00 - 0x4002 3FFF. Gdzie można zmienić ten adres w eclipse ?
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!!
No a może tam jest więcej przerwań ze złymi nazwami? Sprawdź co wywołuje HardFaulta, potem obsłuż to przerwanie i jeśli będzie to zapis pod nieistniejący adres, to można zrobić breakpointa na zapis pod adres. 4\/3!!
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,...
Witam, Dzieki za pomoc. Jesli chodzi o brak konsekwencji to jest fragment wiekszej calosci, chcialem tylko pokazac jak inicjalizuje UARTy. Znalazlem blad. Robie funkcje dosc mocno generyczne i okazalo sie, ze inicjalizacji i przy wysylaniu/odbieraniu, mam funkcje translacji numeru UARTa na adres zamienilem ze soba parametry w definicji i deklaracji...
No dobra, czas tWC musi w moim przypadku trwać minimum 70ns. Na wejściu WE musi pojawić się stan niski po czasie minimum 0ns (czyli w tym wypadku nawet od razu?) po zmianie adresu, ale nie później niż na 60ns przed.. no właśnie, przed czym? Przed kolejną zmianą adresu? Skoro tHA ma minumum 0ns?
RCC->APB2ENR=0x00000008; 0x00000008; - jak nazwać tą wartość, czy to nie jest adres rejestru? Nie, to jest wartość którą zapisujesz do rejestru który znajduję się pod adresem RCC->APB2ENR. GPIOB->CRH=0x33333333; LDR R0, =0x40010C04 LDR R1, =0x33333333 STR R1, Masz czarno na białym że wartośc 0x33333333 jest zapisywana do adresu 0x40010C04, czyli do...
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...
Może wbiję kij w mrowisko: Po co właściwie Ci ten bitbanding? Programuję Cortexy na codzień i nie zauważam praktycznej potrzeby użycia BB. Nie to, żeby w ogóle jej nie było, ale jest ona tak marginalna, że nie opłaca się w to bawić. Tam, gdzie są potrzebne operacje bitowe, są one zaimplementowane w sprzęcie lepiej i bez potrzeby użycia BB i szybciej...
Sterowniki znajdziesz pod tym adresem: [url=http://www.st.com/internet/com/SOFT... USB driver for Windows 7, Vista and XP. Inny użyteczny program: [url=http://www.st.com/internet/com/SOFT... ST-LINK utility.
Plugin do automatycznej generacji Makefile jest dostępny normalny (GNU ARM Eclipse Plugin), a automatyczne generowanie skryptów linkera nie ma sensu... Jeśli ma się przykład dla danej architektury (czyli np dla Cortex-Mx), to naprawdę wystarczy w nim zmienić kilka cyferek, bo jedyne czym się różnią te skrypty to rozmiary i adresy pamięci (w obrębie...
A może zacznijmy od bardziej podstawowych podstaw. Rozumiem, że kolega podpina kabel sieciowy między układ z uC a komputer, bez żadnego routera po drodze? Jeśli tak to tu mamy problem. Otóż zwykle tego typu kontrolery sieciowe (oparte na sofcie z internetu) są przystosowane do łączności za pośrednictwem routera i w 99% przypadków bez modyfikacji oprogramowania...
a jak to dokładnie jest z takimi bootloaderami, jak te co podesłałeś i prawdopodobnie te od Arduino? Czy one za każdym wgraniem projektu muszą być dokompilowane do mojego programu? Czy też siedzą sobie grzecznie w specjalnym zakresie pamięci i kolejne flashowania ich nie ruszają? Tak długo jak wgrywasz wsad "przez nie", nie musisz nic robić. Kompilując...
czysta amatorszczyzna Biorąc pod uwagę fakt, że w niektórych STM32 pomiędzy drugim a trzecim elementem jest "dziura", to owszem - takie makro to czysta amatorszczyzna.
Ale... float to przecież bity w pamięci! To co one przedstawiają, powinno cię mało obchodzić, gdy chcesz to zapisać w pamięć nie ulotną... Jeśli float ma 4 bajty (a chyba ma), to wystarczy dobrać się do tych czterech bajtów intem... [syntax=C] float ulamek=54.75701; unsigned int *ple=(unsigned int*)&ulamek; ZapiszZmienną([adres],*ple); //tu wlasnie...
instrukcja BLX oznacza Branch with Link and Exchange. Kluczową kwestią jest owe Exchange. Chodzi o to, że instrukcją tą można zmienić tryb instrukcji z ARM na Thumb (lub odwrotnie) lub go nie zmieniać. Jeśli ostatni bit adresu (czyli twojego rejestru R3) jest zapalony, to rdzeń skoczy pod adres ignorując ten bit (traktując go jako zero, bo PC i tak...
Witam! Potrzebuję przesyłać na zewnątrz po cztery bity. Żeby było szybko sprawnie i nie męcząco dla rdzenia pomyślałem o dma. Ale minimalny rozmiar przesyłanych danych, a więc i inkrementacji adresu jest 8 bitów. Nie ma tyle ramu, żeby rozrzutnie darować sobie cztery starsze bity i po prostu zwiększać wskaźnik o 8 nie ignorując połowę. Pomyślałem, że...
No ale zrozum, że w każdym module w którym includujesz ten plik tworzy się kolejna kopia tej zmiennej a linker podczas linkowania próbuje ustalić adres takiej zmiennej i stwierdza, że ma kilka o takiej samej nazwie więc zgłasza błąd. Do tego co ty chcesz uzyskać służy słowo kluczowe extern
Witam kolegów, mój znajomy wykonał poradnik dotyczący konfiguracji środowiska do STM32. Informacje o tym znajdują się pod adresem: [url=http://www.elektroda.pl/rtvforum/to...
Podsumowując... Loader umieszczony jest we flash od adresu 0 i nie ma od tego odstępstw. Aplikacja umieszczona jest pod dowolnym adresem we flash z wyrównaniem do 512. Żadne biblioteki nie maja kodu na stałe przypisanego pod konkretny adres, nawet SPL, wszystkie startupy i tak zależą od linkera, no chyba, że ktoś sobie coś udziwił i coś na stałe przypisał....
Żeby dowiedzieć się, gdzie byłeś wcześniej, to po prostu podejrzyj LR (jedno słowo wcześniej niż PC) i będziesz miał tam odłożony adres powrotu do funkcji wywołującej. 4\/3!!
Stawiam na różne adresy kodu w pamięci Przecież adresy są takie same. Adresy używanych zmiennych zresztą też.
Porównuje inicjalizację , którą wrzuciłeś z moją i nie mogę zrozumieć jednej rzeczy. Mianowicie co to za rejestr o adresie e7? Pytam, bo zastanawiam się czy ja coś źle zrozumiałem. W pdf który wrzuciłem w rozdziale 7 przy nazwie rejestru w nawiasie podana jest wartość którą interpretowałem jako adres rejestru i nie widzę tam rejestru o adresie e7.
Czy w tym przypadku , muszę ustawiac bramę, ip, maskę na PC? Wystarczy, że tylko ustawisz adres IP i Maskę.
Korzystam z STM32 ST-Link Utility, program ładuje sie pod adres 0x20000000 potem z menu MCU Core ->reset system, próbowałem wszystkie kombinacje, dla ładowania do flash'a działa..
Witam Jeśli nie mam bootloadera, to aby działał Marlin 2.x musisz zmodyfikować platformio.ini i wgrywać program przez ST-linka. Marlin z gotowych skryptów tworzy binarkę pod adres 0x08007000 i tak ją wywołuj bootloader którego już nie masz. Musisz więc wgrać program pod adres 0x08000000 zamiast 0x08007000, najprościej pominąć linijkę w platformio.ini...
stm32 adres flash automapa adres adres flash
mondeo klimatyzacja radio przestaje nadawać kostek zamek
Kod BIOS 5D - Problemy z inicjalizacją sprzętu N82S192 - Schemat, Charakterystyka i Zastosowanie