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.
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...
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?.
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...
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...
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...
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...
wydaj 50 zł i kup sobie jakiś najtańszy chiński analizator logiczny. Podłącz i zobacz co siętam dzieje na tym SPI. https://obrazki.elektroda.pl/5220450300_... Chyba tak się właśnie to skończy... Liczyłem, że popełniam jakiś błąd, którego łatwo pominąć i go niedoświadczony ja pomijam :( Taka drobna uwaga: Jak już używasz Arduino to...
Po drugie, chcesz nadawać bajty, a rejestr DR w STM32 ma 16 bitów, więc jednym zapisem do DR nadajesz 2 bajty. Tutaj się mylisz. Akurat w F103, możesz wysyłać pojedyncze bajty bez bajtowego dostępu. To co opisujesz jest w nowszych STM32, np. L4, F4, F7. W każdym przypadku lepiej użyć do tego DMA.
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....
http://obrazki.elektroda.pl/5020904800_1... Witam Tym razem chciałbym zaprezentować programowy projekt zegarka i datownika uruchomionego na sprzęcie: STM32F4Discovery oraz LCD TFT DEM240320E TMH-PW-N(A-Touch) na sterowniku Renesas R61580 (kupiony swego czasu w TME. Obecnie nie mają na stanie, można próbować kupić go tutaj:http://www.soselectronic.pl/?str=3...
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...
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...
Akurat nie, bo w portach z maskowanym dostępem operacja logiczna jest wykonywana w samym rejestrze portu, a nie w sterowniku szyny, więc nie ma tu r-m-w. Nigdzie nie pisałem, że BitBand jest zły. Napisałem tylko, że niekoniecznie nadaje się do zerowania znaczników przerwań w rejestrach peryferiali, tym bardziej, że ten sam efekt można osiągnąć przez...
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...
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...
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...
wojlej: ADC trzeba skalibrować przed włączeniem go do pomiarów. Zobacz, które bity NIE mogą być ustawione podczas kalibracji - jest o tym w manualu. Podpowiem - ADEN, czyli enable. Co do Twoich obaw dot. rejestrów - jeśli potrafisz "ogarnąć" pola struktur, to potrafisz i rejestry. Dla mnie pierwszy argument za nieużywaniem bibliotek - to ilość kodu,...
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...
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.
Data packing When the data frame size fits into one byte (less than or equal to 8 bits), data packing is used automatically when any read or write 16-bit access is performed on the SPIx_DR register. The double data frame pattern is handled in parallel in this case. At first, the SPI operates using the pattern stored in the LSB of the accessed word,...
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ć...
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...
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.
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?...
Różnica nie polega na zamianie miejscami movs i strh, tylko na tym, że w jednym kodzie zapis jest wykonywany _PRZED_ ustawieniem bitu PG w rejestrze CR (to jest to "str r3, [r5, #16]"), a w drugim _PO_. Bez "volatile" kompilator może sobie przestawić ten zapis gdzie mu się podoba, natomiast w odwrotnym przypadku zostanie on wykonany w takiej kolejności...
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ż...
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ę...
W pliku stm32f10x.h jest to trochę inaczej niż w dokumentacji. Np. dla PSRAM1 - rejestr BCR1 odpowiada: [syntax=c]FSMC_Bank1->BTCR[0][/syntax] - rejestr BTR1 odpowiada: [syntax=c]FSMC_Bank1->BTCR[1][/syntax] - rejestr BWTR1 odpowiada: [syntax=c]FSMC_Bank1E->BWTR[0][/syntax] Według tego powyżej mam ustawiony LCD i zewnętrzny RAM i działa.
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.
"Domyślne wartości rejestrów CRx jest co w takim razie? Chodzi o to, że domyślnie na bitach 1,3,5,... jest jedynka? " oznacza to, ze jest tam cokolwiek i nie jestes tego w stanie przewidziec. GPIOD->CRH=GPIO_CRH_MODE8_0; oznacza ze do rejestru CRH wpisujesz liczbe: ((uint32_t)0x00000001) a teraz GPIOD->CRH=GPIO_CRH_MODE8_1; dziala tak ze wpisujesz tam:...
Po co funkcja? - wystarczy prosty zapis do rejestrów BSRR / BRR - krótszy zapis w kodzie, szybsze wykonanie.
3-4 zapisy do rejestrów, faktycznie poczujesz to,
Ok, zajrzałem do tego i przeoczyłeś kilka rzeczy: Adres to nie 0x4A tylko 0x94. Właściwie jest to 0x4A przesunięte o 1 bit w lewo (0x94) a ten LSB to jest bit R/!W. Czyli jak chcesz coś zapisać do kontrolera to trzeba wysyłać na adres 0x94, a jak czytać to 0x95 (czytać noty dokładnie! Poza tym jest to na schemacie napisane). Druga sprawa - kontroler...
Sposób mam bardzo prosty - po kolei ładuję rejestry sterujące każdego peryferiala i dzięki temu kod inicjujący wszystkie peryferia w dużych projekstach nie przekracza kilkudziesięciu linii. żadna pseudowuniwersalna biblioteka nie obejmie wszytskich potrzeb projektu, a inicjowanie peryferiów potworkami typu SPL wychodzi wielokrotnie (np. 8x) dłuższe...
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....
(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...
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...
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...
rejestr stm32 stm32 rejestr stm32 zapis
pomiary odbiorniku radiowym rezystancja wirnik agregat error booting phone
bateria parkside styki bateria parkside
Sony KDL-32S5600 - słabe podświetlenie, HDMI, pilot Brak dźwięku przez światłowód - jak rozwiązać problem?