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...
Witam, Mam problem z odblokowaniem pamięci Flash do zapisu. sekwencja: FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB; Działa na pewno dobrze, na co wskazuje Lock (FLASH->CR & 0x80). Pozwala mi to na przeprowadzenie tylko jednej operacji na flash'u, na przykład mogę skasować jakąś stronę czy zapisać jakąś daną. Problem pojawia się gdy...
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...
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...
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.
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...
Może wbiję kij w mrowisko: Po co właściwie Ci ten bitbanding? Wyjmę kij z mrowiska i odrzucę - świat nie składa się tylko z jednowątkowych programików, a w mikrokontrolerach zwykle trzeba zrobić więcej niż machanie GPIO i kasowanie flag przerwań.
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...
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.
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...
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...
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...
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.
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.
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.
Więc, doszedłem do tego, że mam źle skonfigurowany Timer. Jak wrzuciłem kod z użyciem bibliotek to ruszyło, zaczął przesyłać w nieskończoność jakieś losowe wartości. Po pierwsze w NVICu muszę odblokować przerwanie od Timera: Tak na początek - rejestr danych USART ma 8 bitów, nie 16. Zaprogramuj transfer DMA 8 bajtów, a nie czterech słów. Liczby transmitowanych...
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?...
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...
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ż...
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.
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 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,
(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?
To akurat jedyny niefart tego podejścia. 2 oznacza szerokość pola bitowego a np 5 numer pinu. Stąd te mnożenia. a to : [syntax=c]RCC->AHBENR |= 1 << 19; [/syntax] lepiej zapisać jako [syntax=c]RCC->AHBENR |= RCC_AHBENR_GPIOEN; [/syntax] Pomijając konfigurację pinów. Do konfiguracji pinów polecam skorzystać z przykładów Freddiego. Wielobitowe...
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ść...
Witam, ....Wiem że to dziwne, ale proszę żeby QuadMan to sprawdził u siebie zanim jakieś wnioski ktoś będzie wyciągał. W załączniku wszystkie ważniejsze pliki z kompilacji moim kompilatorem dla obu wersji. atom1477 sprawdziłem przykład z tablicą wypełnioną tylko kilkoma wartościami, jak u Ciebie i ciekawostką jest fakt, że u mnie pliki .lss i .map są...
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...
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ę...
To akurat nie - w końcu to nie rejestry I2C, tylko RCC. 4\/3!!
Bez bibliotek zajmuje to jedną linię z jedną instrukcją - zapis wartości do rejestru AIRCR.
przerwanie przeciez jest wlaczone, bo sie wykonuje handler. chyba ze nie wiem co to znaczy wlacz EXTI... problem jest w tym zapisie do rejestru EXTICR
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...
"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:...
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 tej funkcji jeżeli dobrze pamiętam jest tylko while który czeka na jakąś flagę, nie pamiętam jaką, Ale powtórzę że problem jest że kolega nie resetował poprawnie REJESTRÓW BACK_UP i cześć zapisów do rejestrów które kolega robi lecą w kosmos.
Niebardzo - STM32 jest bardzo bezproblemowy w debuggowaniu, więc nie tutaj szukałbym problemu. Może podczas debuggowania (ze względu na nieco inne "okoliczności") nie wyskakują Ci errory, które w normalnych warunkach się pojawiają i blokują transmisję? Sprawdź, czy nie są poustawiane flagi od błędów w rejestrach SR. 4\/3!!
rejestr stm32 stm32 rejestr stm32 zapis
zmierzyć pojemność akumulatorek zwierać dioda naprawa układu scalonego zmywarka
naprawa udaru makita electrolux mruga start
Połączenie kolumn 4 Ω i 8 Ω równolegle - co zyskam? Maksymalne tłumienie filtra CL dla 100 Hz i C=0,092 F