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...
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.
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...
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...
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...
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...
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...
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,...
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ż...
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ść...
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.
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?...
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...
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...
Myślę że to wszystko jest wytłumaczone w datasheecie do tego akcelerometru. 4\/3!!
Może nie akceptuje tak wysokiego napięcia zasilania. Sprawdź jaki ma dopuszczalny zakres napięcia zasilania w rejestrze OCR (CMD58).
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...
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...
1. Co to jest dokładnie to wyrównanie stosu do 8 bajtów i do 4 bajtów, standard API zaleca 8 jak to wygląda w pamięci Chodzi o to, że w momencie "wejścia do dowolnej funkcji" wartość rejestru wskaźnika stosu (SP) ma być podzielna bez reszty przez 8. Do "wejścia do dowolnej funkcji" wlicza się również wejście do przerwania, a ponieważ kod tego w sposób...
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
Czyli jak chcesz zmienić pierwszy i drugi bit w np. PORTC to wartość 0b00000011 zapisujesz do portu PINC i to spowoduje zanegowanie atomowo w jednym cyklu pierwszego i drugiego bitu w porcie wyjściowym PORTC. No nie, nie ma czegoś takiego jak rejestr PIN, więc i nie da się tam nic zapisać. zdaje się że nie znasz architektury AVR. Pod adresem 0x06 jest...
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...
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?
Witam Pierwsza spraw to sprawdź czy faktycznie zapisują się dane do RFM12. Część rejestrów jest typu R/W. Zapisujesz wartość do rejestru, a następnie ją odczytujesz. Jak są takie same to komunikacja jest ok.Najczęstszy problem to konfiguracja SPI. Jak wygląda schemat połączenia układu do kontrolera ? Pozdrawiam W.B.
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...
Nie neguję dokumentacji. Nawet więcej, nigdy nie odpalam bez niej. Nawet gotowca konfrontuję z datasheetem. Po prostu mi chodzi że z przykładem jest prościej i szybciej. Nie ma co popadać w skrajności. Czyli też w uruchamianie wyłącznie na podstawie datasheeta. Bo czas też kosztuje. I szkoda na nowo odkrywać koło. Niektórych rzeczy wręcz bym nie odpalił...
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...
Jeżeli chcesz do szyny wykorzystać np. połówkę portu (8 bitów) to najszybciej BSRR. Najszybciej wtedy wykonywać 8-bitowy zapis do rejestru ODR. 4\/3!!
To akurat nie - w końcu to nie rejestry I2C, tylko RCC. 4\/3!!
Witam, Mam problem z zapisem rejestrów z poziomu biblioteki j2mod (Java) w STM32 (FreeModbus). Problem polega na tym, że przy użyciu funkcj i WriteMultipleRegistersRequest a następnie wywołaniu metody execute() na ModbusSerialTransaction . Dane dobrze się wysyłają do STM32 (sygnalizacja diodami) ale w metodzie execute jest oczekiwanie na odpowiedz i...
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ę...
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:...
rejestr stm32 stm32 rejestr stm32 zapis
p0087 peugeot optymalizacja system komputer sygnał dzwonić słuchawka
spawarka majster antena mistral
Fuego 32EL610ANDT USB SW Firmware Flashing Guide – TP.MT5510S.PB803, TP.SK506S.PB802 Analiza algorytmu programatora Vilab