Zacznijmy od tego, że powinieneś podać konkretny model procesora. W przypadku wątpliwości powinieneś czytać manual zamiast eksperymetować z ustawieniami. Przykładowo w STM32F030 masz rejestr BSRR który odpowiada zarówno za kasowanie jak i ustawnienie bitu IO. https://obrazki.elektroda.pl/5898146400_... https://obrazki.elektroda.pl/3378724200_...
No myślę, że rozwiązaliśmy problem dostatecznie go podsumowując, także zamykamy. A ja dziękuję za zagorzałą :) dyskusję. Pozdrawiam. Temat okazał się być niedostatecznie rozwiązany gdzyż funkcje nie działały poprawnie. A oto 100% działające kody do obsługi flash: Wyłączenie zabezpieczenia zapisu wybranych oczywiście grup stron : [syntax=c]if((GPIOA->IDR...
Witam, W kodzie nie udaje mi się ani odczyt, ani zapis. Mam STM32 128kB. Dopiero zaczynam z nim. Program działa w ten sposób, że po odczycie naliczone w danej sesji pracy motogodziny mają się zapisać do jakiejś zmiennej wraz z odczytaną liczbą z flasha i razem ponownie zapisane na końcu po wyłączeniu zapłonu. Korzystam z wcześniej napisanego na tym...
Ogłoszenia! Uwzględniając uwagi Czytelników z wątku "wywiadowego" ( errata v1_2 ) otrzymuje oznaczenie 1.1. 6. Poradnik w wersji 1.1, po dodaniu najnowszych zmian (patrz plik errata v1_2a ) otrzymuje numerek 1.2 (jest świeży i jeszcze ciepły). 7. Poradnik w wersji 1.1 nie był publikowany. Ta "wirtualna" wersja została wprowadzona jedynie dla zachowania...
Witam :) Chce zapisać zmienną do pamięci EEPROM w procesorze. Testuje peryferia dynamicznie i nie wiem co się z nimi dzieje w trakcie działania. Wysyłają do mnie dane po USARCIE i chciałbym je zapisywać w wewnętrznej pamięci. Znalazłem realizacje zapisu, lecz wszędzie bazuje się na bibliotekach HAL, których nigdy nie używałem i się przekonać nie mogę....
Cześć, Kilka dni próbuję coś zapisać jak i odczytać z eeprom at24c256. Problem polega na tym że program zatrzymuję się na [syntax=c]while (!(I2C1->SR1 &(SR1_ADDR))){}[/syntax] w funkcji i2c1_burst_write. Sprawdzałem rejestr DR i adres jest dobry. Pamięć eeprom ma adres 0x50 sprawdzałem skanerem i2c. Dodałem nawet przerwy czasowe pomiędzy inicjalizacja,...
Dzień dobry Po wielu dniach podchodzenia jak do jeża zabrałem się na serio do zapisu paru danych (siedmiu liczb uint32_t (słownie 7) ) do pamięci flash. Ponieważ bez Was by się to nie udało postanowiłem się podzielić moim "osiągnięciem". Muszę zapisać jasność ekranu i skalowanie ekranu dotykowego. Wyszło tak : [syntax=c]/* * 6 wspolczynnikow kalibracji...
Staram się zrobić tablice zmiennych Word w pamięci 24c64. Do tej pory używałem wewnętrznego EEPROMu ATMEGI32 ale teraz mi jej nie wystarczy. Pytanie czy moge zapisać 20 byte danych ciągiem zaczynając od adresu 1 a następnie 2 byty zaczynając od adresu 5000 i z powrotem zapisać 20 byte zaczynajac od adresu 21. Oczywiście wiem o konieczności sprawdzania...
Bazując na https://obrazki.elektroda.pl/4178510200_... https://obrazki.elektroda.pl/8769073400_... main.c [syntax=c] /* Virtual address defined by the user: 0xFFFF value is prohibited */ uint16_t VirtAddVarTab[NB_OF_VAR]={0}; uint16_t Virtval[NB_OF_VAR]={0}; uint16_t VarValue= 0; int main(void) { HSE_init(); //systick_init();...
Witam, Mam problem z obsługą zewnętrznego SRAM(CY62167DV30-55) w STM32F7. Problem pojawia się, gdy chcę zapisać powyżej 1kB danych. Poniżej funkcja której używam do testowania zapisu: [syntax=c] #define SRAM_PATTERN 0x55 #define SRAM_SIZE1024ull //uint16_t sram_buffer[SRAM_SIZE] __attribute__ (( section(".sram"))); void Test_SRAM(void) { uint32_t i,...
Czy ten zapis jest koniecznie potrzebny: USART1->SR=0x80;. Powinno działać bez ingerencji w rejestr SR w przerwaniu.
Nie, no pewnie że bez sensu, tu chodziło mi raczej o sam zapis i możliwość A ten stos sprzętowy czy jednak nie to dotyczy tego że rdzeń sprzętowo odkłada a am stos to RAM, czy tak?.
Mnie się udało do tej pory znaleźć tylko jeden przypadek w którym bit-banding nie działa z takimi specyficznymi rejestrami, ale to na LPC1769 akurat, choć też w I2C - jest tam jeden rejestr write-only do którego zapis na jakimś bicie powoduje wyczyszczenie bitu w innym rejestrze (w tamtym rejestrze można znów tylko dokonać przestawienia 0->1, odwrotnie...
Witam, męczę się z prawidłowym ustawieniem tego modułu do odebrania pakietu danych, który jest prawie 2x większy niż pojemność FIFO. Kombinuję na wszelkie sposoby, aby ze wskazanego DIO tego modułu odebrać właściwe przerwanie i je obsłużyć w callbacku EXTI w STM32. Nie mam większego problemu z odebraniem danych z pierwszej raty tego pakietu w locie,...
A moim zdaniem obie instrukcje są sobie równoważne. Nieważne czy ustawię rejestr z zerem w miejscu, w którym znajduje się bit do wyczyszczenia, czy zamaskuję rejestr i wstawię zero. Obie instrukcje działają tak samo, obie dają ten sam rezultat w debuggerze jak i z prostej obserwacji. To, że zapis jedynki jest ignorowany, to faktycznie zapomniałem o...
OK. Udało się wreszcie. Problem tkwił w funkcji do zapisu danych. Wydawało mi się że zapis był realizowany poprawnie. Zapisywałem zmienną 16 bitową naraz a wolno tylko po pół słowa, jednak po zapisie zbyt dużej ilości danych sprawdzałem tylko jedną komórkę i wyświetlałem na wyświetlaczu i się zmieniała - więc myślałem, że jest wszystko z zapisem porządku...
Specyfikacja architektury mówi, że jeśli bit STKALIGN nie jest zaimplementowany, to procesor wyrównuje stos przy wyjątku. Jak jest zaimplementowany, to programista może wyłączyć wyrównanie. Domyślna wartość - to 1 (czyli włączone wyrównanie, ale ja nie dotarłem do jednoznacznego potwierdzenia, że tak musi być wg. ARM - tak JEST w tych procesorach, które...
Witam Ja bym to zrobił tak że nalazł bym rejestr w CC1120 który można zapisać i odczytać. Następnie zapisywał do niego wartości (najlepiej w pętli) a następnie ja pobierał z rejestru. Jak wartości wysłane i odebrane są równe to z dużym prawdopodobieństwem można przyjąć, że SPI działa poprawnie.
Po pierwsze, w SPI zawsze nadajesz i odbierasz bajt. Jeśli nadałeś dwa i odebrałeś jeden, to odebrałeś ten, który przyszedł po nadaniu pierwszego, a drugi zignorowałeś. Musisz zawsze odczytywać tyle bajtów, ile zapisałeś. Po drugie, chcesz nadawać bajty, a rejestr DR w STM32 ma 16 bitów, więc jednym zapisem do DR nadajesz 2 bajty. Musisz wykonywać bajtowe...
Witam wszystkich Przychodzę do Was z problemem, z którym borykam się już tydzień może dwa. Chcę móc sterować sterownikiem DRV8711 (na PCB od Pololu) przez BluePill (STM32F103C8T6). LINK: Płytka Pololu z DRV8711: https://www.pololu.com/product/3730 Dokumentacja DRV8711 Texas Instruments: https://www.ti.com/lit/ds/symlink/drv871... BluePill: https://sklep.msalamon.pl/produkt/plytka...
W tym samym rejestrze (AFIO->MAPR) znajduje sie bity konfiguracyjne JTAG/SWD. Dokumentacja mówi, że są one tylko do zapisu, a odczyt tych bitów daje wynik niezdefiniowany. Może warto sprawdzić bezpośredni zapis do rejestru [syntax=c]AFIO->MAPR = AFIO_MAPR_TIM4_REMAP; // bez |[/syntax] albo z maską na te bity [syntax=c]AFIO->MAPR |= AFIO_MAPR_TIM4_REMAP...
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...
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...
Rada praktyczna: ustaw preskaler tak, żeby podzielony zegar timera miał jakiś "okrągły" okres, np. 1, 10 lub 100 us, wtedy nie będziesz musiał pracowicie wyliczać wartości okresu timera, np. preskaler 7200 -> okres zegara 100 us; w celu uzyskania jednej sekundy ładujesz do ARR 10000-1. Twój problem, jak napisano wyżej, wynika z braku kasowania znacznika...
1. Jak chcesz odpowiedź, to podawaj WSZYSTKIE dane. Skąd mamy wiedzieć co jest pod LCD_RWPORT? Może jest zdefiniowane jako "("? 2. Nie wiem po co te magiczne kombinacje. W przypadku STM32 to w ogóle nie ma sensu, bo wystarczy jakbyś sobie zdefiniował LCD_RWPORT jako "GPIOA", a nie samo "A" (jak zapewne planujesz) i już cały pomysł sklejania makr jest...
Plik nagłówkowy mikrokontrolera można wyłuskać np. z paczki SPL pobranej ze strony ST. Dla Twojego STM32F103VBT6: [url=http://www.st.com/web/catalog/tools... (przycisk download na dole strony). Po rozpakowaniu archiwum: Libraries -> CMSIS -> CM3 -> DeviceSupport -> ST -> STM32F10x -> stm32f10x.h...
Co do instrukcji barierowych to tylko wiem ze są takie i mają coś pożytecznego robić np zmusić proca do wykonania zalegających w cachu instrukcji np zapisu STM32F0 nie mają żadnego cache. Punktem wyjścia jest program bez tych instrukcji który też nic nie wpisuje do rejestrów. Widzisz tą podświetloną na żółto linijkę? Tam właśnie zatrzymał się układ....
odczyt rejestru - modyfikacja - zapis do rejestru . Nie powinno cię dziwić, że jeśli między tymi operacjami wystąpi przerwanie, w którym modyfikowane są ODR bitbandingiem i nie tylko to cała operacja z przerwania zostanie anulowana.
Wrzuć kompilowalny przypadek + wywołanie kompilatora. Moim zdaniem nie ma możliwości, aby nie działało, ponieważ akurat to pola ADC_TypeDef są volatile. Jest pewna drobna szansa, że natrafiłeś na ciekawy błąd kompilatora, dlatego chciałbym, abyś wrzucił tu kod tej klasy najlepiej z przykładem użycia w main(). I napisz jaką masz dokładnie wersję kompilatora....
Chodzi o to co pisze NAD opisem bitów z rejestru RCC_BDCR. Można tam znaleźć takie oto info: The LSEON, LSEBYP, RTCSEL and RTCEN bits in the RCC backup domain control register (RCC_BDCR) are in the Backup domain. As a result, after Reset, these bits are write-protected and the DBP bit in the PWR power control register (PWR_CR1) has to be set before...
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...
Myślę że to wszystko jest wytłumaczone w datasheecie do tego akcelerometru. 4\/3!!
Zastanawiam się tylko po co sprawdzać to: [syntax=c]USART3 -> CR1 & USART_CR1_TCIE[/syntax] nie rozumiem powodu. Przecież to jest "This bit is set and cleared by software." Programista nie wie czy ustawił to przerwanie czy nie? Dodatkowo ten zapis: [syntax=c]if(( USART3 -> CR1 & USART_CR1_TCIE) && (USART3 -> SR & USART_SR_TC ))[/syntax] wygląda dość...
Ale twój program składa się tylko z tej jednej linijki, to gdzie ma stawać? No i czy naprawdę zapis do każdego rejestru musi się składać z 3-4 linijek? Fajnie że używasz definicji, ale poskładanie w głowie tego co chcesz osiągnąć jest mocno utrudnione, zwłaszcza że w rejestrach które tak modyfikujesz NIC NIE MA, więc po co te całe kosmiczne operacje...
Proszę bardzo! Wersja minimalna - zapamiętywanie jednej zmiennej na F0. No fakt, aż 36 wierszy. Nie no błagam... nie rozśmieszaj mnie. Chodziło o kod który dla DOWOLNEJ ilości zmiennych (oczywiście w granicach rozsądku tak aby wszystkie mieściły się w emulowanym EEPROMie) pozwala NA ŻĄDANIE odczytać/zapisać WYBRANĄ zmienną. A ty wrzucasz tu jakieś...
Dzięki, wszystko oczywiście działa. Chciałbym poruszyć jeszcze jedną kwestię dotyczącą bilioteki do obsługiwania peryferiów do STM32. Dopiero zaczynam, więc sam jej używam, jednak da się zauważyć, że produkuje ona obszerny kod wynikowy. Myślę, że podobną funkcjonalność można stworzyć używając samych dyrektyw preprocesora, które nic nie zajmują. Napisałem...
Dzięki wielkie! wałkowałem to ładne parę dni a takiej głupiej pomyłki nie zauważyłem ;) za to poznałem dość dobrze kod fatfs ;) ... oprócz zapisu TRZEBA także odczytać rejestr SPI...
Ale dlaczego instrukcja PIN_x_y = z miałaby sterować konkretnym pinem? Proszę o definicję. Bo PIN_x_y jest makrem operującym bezpośrednio na pinach za pomocą bit-bandingu, czyli czegoś o czym użytkownicy biblioteki nie wiedzą i raczej się nie dowiedzą, bo w bibliotece nie ma takich możliwości, a po co szukać więcej info niż w manualu do biblioteki?...
z tego co rozumiem żeby dokonać jakiejkolwiek zmiany w rejestrze AIRCR należy tam również wpisywać 0x5FA po to by zapis nie został odrzucony. Chyba że źle kombinuje:P Dobrze kombinujesz, wcięło mi ten zapis :P SCB->AIRCR = AIRCR_VECTKEY_MASK | (3<<8); gdzie: #define AIRCR_VECTKEY_MASK ((uint32_t)0x05FA0000) Chociaż...
Co do pól bitowych to mam Je odbierać i wysyłać więc nie mam wyboru. To nie jest prawda. Odbierane i wysyłane są bajty, odczyt i zapis zazwyczaj realizuje się poprzez maskowanie wartości i przesunięcia (czyli operacje bitowe a nie pola bitowe) Chciałem ułatwić rzycie osobie która nie jest programistą w składanie ramki do wysłania. Po to się tworzy...
Generalnie w AVR-ach nawet mających te nowoczesne rejestry nie da się tego zrobić jedną operacją. Musisz zapisać rejestr ustawiający i zerujący (będą to dwa zapisy) albo musisz odczytać wartość, dokonać operacji logicznych i następnie zapisać. W STM32 da się jako że jeden rejestr zawiera część zerującą i ustawiającą i da się jedną operacją zapisu można...
Po pierwsze, nie w żadnej pętli, tylko w przerwaniu timera, zgłaszanym z częstotliwością np. 2400 Hz Po drugie, w każdym przerwaniu timera należy: 1. W rejestrze GPIOD->CRL/CRH ustawić wszystkie używanie linie portu jako wejścia lub Analog. 2. Do rejestru ODR zapisać jedynkę na linii wyboru kolumny, zera na pozostałych. 3. Do rejestru CRL/CRH zapisać...
Ale modyfikacja znacznika przerwania timera w sprzętowym rejestrze timera przez sam timer "transakcją" chyba nie jest, bo nie zachodzi od strony szyny. Mamy dwa bity znaczników dwóch przerwań timera: 01 (nie zgłoszone, zgłoszone) Po stwierdzeniu, że pierwsze jest zgłoszone, kasujemy znacznik przez zapis 0 przez bitband, co skutkuje wykonaniem przez...
Może nie akceptuje tak wysokiego napięcia zasilania. Sprawdź jaki ma dopuszczalny zakres napięcia zasilania w rejestrze OCR (CMD58).
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
Po co funkcja? - wystarczy prosty zapis do rejestrów BSRR / BRR - krótszy zapis w kodzie, szybsze wykonanie.
Witam, Jako że jestem początkujący w dziedzinie STM32 napotkałem problem nie do przejścia. Moim zadaniem jest wysyłanie inkrementowanej zmiennej "Dane" która jest wysyłana przez USART i odczytanie jej przez terminal. W konsekwencji wyrysowując otrzymane wartości powinienem uzyskać coś podobnego do piły o amplitudzie od 0 do 255. Bez DMA wszystko pracuje...
Przykładów można szukać w SPL - można się w ten sposób dowiedzieć, w których rejestrach i co trzeba wpisać. Powoli szykuję tutorial do STM32 bez biblioteki, ale to jeszcze trochę potrwa. Kłopoty z bibliotekami są wielorakie. Ostatni kłopot - to to, do czego nas zachęcają przykłady z użyciem bibliotek, czyli deklarowania struktur jako zmiennych i pracowitego...
3-4 zapisy do rejestrów, faktycznie poczujesz to,
dioda LED na PC8 razno miga I tak ma być. Ta funkcjonalność dotyczy tylko blokowania rejestrów konfiguracyjnych danego pinu, czyli dokładniej rejestrów GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_AFRL i GPIOx_AFRH. Po prostu zablokowana jest możliwość przeprogramowania wejścia na wyjście czy odwrotnie, przełączenia na inną funkcję...
Jak program jest zintegrowany z Pythonem to otwiera się wiele możliwości. Można poprzez moduł "requests" wysyłać na serwer dane z debugera, a inne moduły umożliwiają zapis do bazy dany, wysyłanie na email, do pliku, do socket-a, etc. Po stronie odbiorczej może być jakaś aplikacja graficzna renderująca np. wyświetlacz ledowy czy inne urządzenie sterowane...
(at)toch88 Nie ma powodów, aby nie stosować takiego zapisu. Np. Atmel w swoich nagłówkach dla ARM daje możeliwość korzystania z pól bitowych, lub składania wartości z masek i przesunięć. Przy czym jeśli korzystasz z pól to wygodnie jest użyć compund literals: http://mikrokontrolery.blogspot.com/2011...
GPIOx_BRR i GPIOx_BSRR są tylko do zapisu a nie odczytu - GPIOx_BRR służy do kasowania stanu portu poprzez ustawienie odpowiedniego bitu. GPIOx_BSRR służy do kasowania i ustawiania portów. Oba rejestry dają funkcjonalność atomowego dostępu do poszczególnych bitów portów. Rejestr GPIOx_ODR jest standardowym rejestrem do odczytu i zapisu do portów.
O ile makra masz poprawne.... To BRR i BSRR to nie rejestry do stosowania RMW. Czysty zapis bez andów czy orów. Gdzie włączone zegary Dla GPIO i SPI? Co debuger na to wszystko?
Ciężko odpowiedzieć na tak zadane pytanie. To tak jakbyś zapytał jak sprawdzić wartość jakiejś komórki pamięci RAM (czyli powiedzmy jakąś zmienną). No po prostu odczytując ją :D Tak samo różne opcje zabezpieczeń. One są zapisane w pamięci, tyle że FLASH. Żeby je sprawdzić to trzeba je odczytać. No inaczej się nie na napisać. Ale mała podpowiedz: Option...
Ostatnia rzecz jaka przychodzi mi do głowy, to zabezpieczenie pamięci przed zapisem. Do odbezpieczenia może być konieczne ustawienie pinu WP w stan wysoki, po czym zapisanie do rejestru statusu (instrukcja WRSR) wartości 0x00 (cała pamięć odbezpieczona, brak zabezpieczenia rejestru statusu pinem WP) [zapis musi być poprzedzony przez WREN]. Innych firmwareowych...
rejestr stm32 stm32 rejestr stm32 zapis
przepływowy stiebel młotek gumowy kamera cofać monitor
patrol podciśnienie archer mr600
Citroen C5 III 2010 – zmiana języka komunikatów z niemieckiego na polski, RD4, RNEG, NG4 Denver WCM-8010 / MK2 FWF900.bin Firmware – Update, Download, and GSM/MMS Fixes