Skorzystaj z rejestru GPIO->BSRR
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...
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....
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...
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...
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...
3-4 zapisy do rejestrów, faktycznie poczujesz to,
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...
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...
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...
Po co funkcja? - wystarczy prosty zapis do rejestrów BSRR / BRR - krótszy zapis w kodzie, szybsze wykonanie.
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...
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.
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...
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
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ść...
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...
Może nie akceptuje tak wysokiego napięcia zasilania. Sprawdź jaki ma dopuszczalny zakres napięcia zasilania w rejestrze OCR (CMD58).
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....
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...
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.
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,...
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
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!!
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.
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!!
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ś...
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...
Bez bibliotek zajmuje to jedną linię z jedną instrukcją - zapis wartości do rejestru AIRCR.
To akurat nie - w końcu to nie rejestry I2C, tylko RCC. 4\/3!!
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?
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...
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...
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...
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.
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ę...
"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...
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...
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...
To szkoda. Czyli jednak lepiej poprowadzić ścieżki z jednego poru... Wtedy jedna instrukcją mogę ustawić wszystkie 16 bitów, chyba? (btw. czemu nie zrobili wszystkich 16bitów koło siebie na obudowie...?). Skąd wynika różnica aż kilku cykli? I jeszcze ciekawiej skąd wynika to "około (~)? To nie wiadomo dokładnie ile zajmie? Wydawało mi się, że przypisanie...
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!!
Przykład dla DMA [syntax=c]void Init_DMA_TFT(uint16_t nofData) { // DMA2 Init Stream 0 from SRAM to FSMC DMA2_Stream0->CR &= ~(DMA_SxCR_EN); while ((DMA2_Stream0->CR & DMA_SxCR_EN));// wait for disable and clear all flags DMA2->LIFCR |= DMA_LIFCR_CTCIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CFEIF0; //0b----|...
TIM1->SR = ~TIM_SR_CC1IF; - to "skasuj znacznik CC1IF" TIM1->SR &= ~(TIM_SR_CC1IF); - to "skasuj znacznik CC1IF oraz znaczniki innych przerwań timera, które zostały zgłoszone po odczytaniu rejestru SR, a przed jego zapisem".
(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...
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...
Zapis i odczyt jest realizowany w tym samym cyklu. Odczytanie rejestru DR nie wymusi transmisji.
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...
(at)kubamiszkiewicz Do takich rzeczy potrzeba jakiś program do debugowanie ramki i symulacji mastera/slave modbus. Potrzebujesz konwertera RS485/USB i np. programu ModbusViewTCP. Tutaj może być masa nakładających się błędów np. niewłaściwe parametry komunikacyjne, błędnie zarobiony przewód komunikacyjny, zapis/odczyt nieprawidłowych rejestrów ( trzeba...
W sumie ciekawa sprawa. Z tego by wynikało że później można wyłączyć taktowanie a opcja remapowania powinna pozostać taka jaką ustawiliśmy. Wartość zostanie, zegar jest potrzebny do zapisu i odczytu z rejestrów oraz napędzania maszyny stanów (której AFIO brak). Wyłączenie zegara uniemożliwi zmianę, czyli zapis. Ponownie włączenie pozwoli na odczyt,...
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...
Tak, te funkcje sa do odczytu z zapisu rejestrow, jednak jak mnie przekonales ( nie w 100% do poki nie zobacze jakiejs dokumentacji :P ), na rejestrach usb stm32 a nie phy.
Czy ten zapis jest koniecznie potrzebny: USART1->SR=0x80;. Powinno działać bez ingerencji w rejestr SR w przerwaniu.
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.
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,...
Nowa wersja Poradnika gotowa do pobierania. Najważniejsze zmiany: - poprawiony rysunek pokazujący wyjścia w konfiguracji push-pull/open-drain - natchniony Reference Manualach ST zmieniło nazwy "prędkości" wyjść GPIO (zrobili High Speed i Very High Speed zamiast Fast Speed i High Speed ) - nowe nazwy zostały uwzględnione w Poradniku - w przykładowych...
/* Podaje na piny danych, index rejestru do którgo zapisujemy */ Modyfikując przy tym 8 pozostałych bitów. /* Ustawiam PIN CS w stan niski */ ILI9325_CTRL_GPIO->BSRRH |= ILI9325_CS; Rejestry BSRR nie wymagają używania operacji logicznych. LCD_DATAPIN_IN; Skąd mamy wiedzieć co robi to makro? 4\/3!!
Powodem może być niepoprawna konfiguracja rejestrów sterownika. poza tym nie pokazałeś jak wygląda funkcja zapisu do ramu i ustawienia kursora. Ja używam takich funkcji: [syntax=c] typedef struct { vu16 REG; vu16 RAM; }LCD_TypeDef; #define LCD_BASE (0x6c000000) #define LCD (( LCD_TypeDef *) LCD_BASE) void LCD_WrReg(u8 reg, u16 data) { LCD->REG =...
Witam wszystkich Jestem w trakcie realizacji projektu STM32 F4 + kamera MT9D111, który zakłada odczyt ramki z kamery i zapis na kartę SD. Rejestry kamery programuje się poprzez interfejs I2C. Chciałbym sprawdzić czy mam dobrze ustawioną tą komunikację i w związku z tym mam pytanie czy bez DCMI oraz DMA da się ustawić rejestry kamery tylko podłączając...
[syntax=arduino] void loop() { // ------------------- jeszcze na LCD ... //-------------------- jeszcze 8 pomia... //-------------------- jakaś pamięc do... switch (key) ... } [/syntax] To Ci działa? Bo on chyba nie bardzo wie co to "key". Nie widzę ani deklaracji, ani żeby się cośtam wpisywało....
Co do modułów NRF24 - nie mają one komendy resetu programowego, dlatego trzeba albo zapisać WSZYSTKIE rejestry modułu oczekiwanymi wartościami albo po strcie systemu zrobić power cycle modułu radiowego używając tranzystora do odcięcia zasilania.
Na przykład otwieramy manual na stronie, gdzie znajduje się opis rejestru MODER i czytamy, co oznacza jaka wartość pola bitowego w tym rejestrze - co trzeba wpisać, żeby dana linia portu była przypisana do peryferiala (np. UART), a nie do GPIO. Przed zapisem do MODER ustawiamy dla odpowiednich linii portu funkcje RX i TX odpowiedniego UARTa w rejestrze...
Dodajmy, że jak już ktoś musi zmieniać stan portu programowo, to w STM32 służą do tego raczej rejestry BSRR i BRR, a w innych uC albo analogiczne rejestry pod innymi nazwami (np. FIOSET, FIOCLR w LPC17xx) albo zapisu maskowany (np. w LPC11xx). W każdym razie nie robi się tego przez programowe operacje logiczne na portach.
Jakbyś nie zauważył to inna rodzina procesorów ;-) W użyciu jest lepsze. Inaczej po co w tamtych procesorach stosowano by bit band? Albert W STM32 też taki zapis można wykonać jedną instrukcją. Mimo, że są oddzielne rejestry do ustawiania i kasowania bitów. Porty są 16bitowe a jeden z tych rejestrów jest 32bitowy. Zapis do starszych 16b powoduje kasowanie...
Masz zaj***ty kwarc skoro: 1) potrafi podjac sam decyzje na jakiej predkosci wstanie (inteligentny, nie?) 2) ma wbudowanego PLLa (??) 3) Szybki ten twoj kwarc... Rozroznij ZEGAR mikrokontrolera od KWARCU na podstawie ktorego generowany jest ten zegar... Skoro twoj mikrokontroler WSTAJE, ale czasami na 8MHz a czasami na 72MHz, to HSE rusza zawsze, ale...
[syntax=c] RCC->APB1ENR |= (3<<27); //Włączenie CLK dla PWR i BKP PWR->CR |= 0x0100; //ZEZWOLENIE na zapis do BKP registers BDP =1 //RCC->BDCR |= (1<<16);//Reset rejestrów Backup na to trzeba uważać //RCC->BDCR &= ~(1<<16); RCC->BDCR |= (1<<0); //LSE ON (33...kHz) while(!(RCC->BDCR & (1<<1)));//External...
atom1477 napisał: No jak dla mnie to każda operacja na SPI to jest jednocześnie zapis i odczyt. Zapis to zapis, odczyt to odczyt. To że sprzętowo odbywa się to jednocześnie, nie znaczy że korzystając z komunikacji jednokierunkowej, trzeba bezwzględnie odczytywać rejestr DR. Najlepszym tego przykładem jest to, że tak mam zrobioną właśnie komunikację,...
Zaraz będzie, że krytykuję albo się naśmiewam, ale widzę tutaj poważne braki w wiedzy. Zacznę od końca: SSD1289 to jakieś nieporozumienie. Nawet jeżeli uzyskasz dobre wyniki przy wypełnianiu całego ekranu, to wszystko się wysypie przy malowaniu ikon czy dowolnego obszaru innego niż cały ekran. Ten kontroler potrafi w jednej transmisji wypełnić tylko...
Nie napisałeś z którego dokładnie wariantu MAX7300 korzystasz. Pokazałeś konfigurację UART, a nie I2C. To są różne interfejsy i nie są zamienne. Pokazałeś infomrację o udanym zaprogramowaniu układu. To nic nam nie daje. Pytając o to co pokazuje debugger miałem na myśli zawartość rejestrów GPIO, I2C czy wartości zwracane przez funkcję wysyłającą dane....
Czy one kiedykolwiek są "dualne" tzn raz słowowe, raz bitowe ? Owszem, są takie architektury, w których jest wymagany specyficzny dostęp do rejestrów. Przykładem może być moduł SPI w nowszych STM32. Dane do transmisji zapisuje się do rejestru danych, który może mieć 8 lub 16 bitów szerokości. Operacja zapisu wyzwala przepisanie zawartości rejestru...
Źle popatrzyłem w twój kod i wygląda na to że miałeś inne literki do zapisu BSRR. Rozejrzę się z ciekawości po dokumentacji i może coś wymyślę. Na razie olej pętle i delaye, wpisz do ODR same jedynki i zakończ while(1); Zobacz diodę, ale zmierz też woltomierzem co się tam dzieje. Zastanów się też czy linker Ci nie nie dodaje jakiś wstępnych ustawień...
1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To kwestia wyrównania. Gdyby nie te int-y wcześniej nie byłoby problemu. A że są, to kompilator stara się by każda zmienna 32bitowa była umieszczona pod adresem podzielnym przez 4 - tak by się dało ją odczytać/zapisać w jednym cyklu. Wielkość całej struktury...
Ta linia : LCD_WriteReg(0x0011,0x60B8/*58 0x6070*/); LCD_Delay(5); wyglada inaczej niz u mnie, tzn wszystkie linie u ciebie z komentarzem w nawiasie , u mnie zawieraja wlasnie ta wykomentowana wartosc. linie powyzej (te z komentowana zawartosci) nie maja jako tako wplywu na kolory tak ta linia wyrozniona przeze mnie ustawia sposob zapisu...
Do ustawienia typu pinu potrzebne są 2 bity, a więc jak ustawić wejście/wyjście jeśli bit MODERx Masło maślane. Sam napisałeś, że moder jest wartością 2-bitową a później temu zaprzeczasz. Moder jako wartość 2-bitowa przyjmuje wartość z zakresu 0-3: 0 - wejście 1 - wyjście 2 - funkcja alternatywna 3 - wejście analogowe i tak go programujesz. Przykładowo...
Czy proponujesz zatem taki zapis: ... Jeśli w tym rejestrze wcześniej jest coś co chcesz zachować to może zostać, ja proponuje użyć operacji przypisania "=" zamiast sumy bitowej "|=" - używając sumy zakładasz że wcześniej jest tam "znana wartość", co niekoniecznie jest prawdą i czasem można się nieźle przejechać na takim założeniu... Widocznie przekroczenie...
Mógłbyś pokazać ten kod z opóźnieniem o którym piszesz? Dobra zaskoczyłem, masz racje. Jakbyś mógł mi jeszcze pomóc w BKP. Prosta funkcja zapisująca do rejestru BKP [syntax=c]uint8t_t Licznik; RCC->APB1ENR |= RCC_APB1ENR_BKPEN | RCC_APB1ENR_PWREN; PWR->CR = PWR_CR_DBP; BKP->DR1 = Licznik++;[/syntax] Potem to co zapisałem odczytuje na lcd. To działa...
Rozsądek, rozsądek, Panowie, a nie magia. Autor prawie odpowiedział sam - dobrze kombinując, a Freddie czaruje "na wszelki wypadek". Podstawowe pytanie: Czy zachodzą okoliczności, w których nieaktualna zawartość bufora/kieszeni kodu czy danych może być użyta? Potrzebujemy dwóch odpowiedzi: jednej dla danych, drugiej dla kodu. W przypadku odpowiedzi...
Poza tym to, co chcesz definiować samemu, jest już od dawna zdefiniowane w plikach nagłówkowych mikrokontrolera. Z kolei programowanie SysTick znajdziesz w pliku nagłówkowym rdzenia - wystarczy przepisać treść nibyfunkcji SysTick_Config. Zmianę priorytetu przerwania, która w tej funkcji jest, możesz pominąć. No i zapis: (uint32_t) 0x00000007 to to samo,...
Witam, pozwolę sobie na wykopaliska archeologiczne, ale myślę, że to może się jeszcze komuś przydać. Większość przypadków Hard Fault podczas działania DMA w STM32F1 powstaje przez błędną konfigurację kanału DMA przy użyciu biblioteki standardowej. Błędny fragment kodu: hlayer.c:167:43: warning: assignment makes integer from pointer without...
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......
Ta flaga RXNE jest w tym trybie chyba wystawiana po prostu po 8 cyklach zegara i tyle, czyli w zasadzie zawsze razem z flagą TXE. Nie prawda, ponieważ rejestr DR nie jest rzeczywistym rejestrem przesuwnym używanym do transmisji - możliwe jest więc, że flaga TXE ustawiana jest od razu po zapisie do DR, natomiast RXNE dopiero gdy faktycznie zostanie...
Odczytaj w debuggerze wszystkie rejestry flash (szczególnie SR i CR), to zobaczysz co może być źle.
Dzieki Panowie, udało mi sie uzyskać zamierzony efekt kierując sie zaleceniami kolegi Sareph , dobrze wiedzieć jak sie ustawia poszczególne bity rejestrów, jednak mam pytanko: https://obrazki.elektroda.pl/4282252600_... właśnie zrobiłem to w taki sposób jak powyżej, bo nie wiem jak ustawić bit25 jeżeli pod nazwą SWJ_CFG Piotrus_999...
W sumie to mam pytanie czy dobrze rozumiem jak to ma działać. Tak skonfigurowany DMA wykonuje transfer raz, w momencie ustawienia bitu ENABLE. Kod z moimi komentarzami (wypisane z DSa). [syntax=c] void DMA_Conf(void) { RCC->AHBENR = RCC_AHBENR_DMA1EN; /* Procedura konfiguracji kanałów DMA 1. Ustawić adres rejestru peryferiów w rejestrze DMA_CPARx Dane...
jesteś pewien? Moim zdaniem to co już uzyskałem mim zdaniem jest szybkie. Ale że atmega może szybciej to mnie zdziwiłeś.. Jedna klatka ma 153 kB danych. Przy czasie na ramkę 19 ms w moim wypadku daje to transfer danych 8MB/s na magistrali o szerokości 8 bit (czyli dane są wysyłane 8MHZ razem z toglowaniem pinu write) STM32 wybrałem ze względu na relację...
Tak tytułem uwago flagę sie kasuje zapisem do rejestru IFCR nie ISR. I przy okazji do tego rejestru się tylko pisze (czyli żadnych |=). Ja przy okazji użył mym bitu CGIFx. Po porawieniu flag zobacz jakie flagi masz ustawione.
Witam, na początku dodam, że od dawna piszę w języku C, na AVR, od niedawna na ARM Atmela, oraz od kilku dni na STM32. Jako, że 2 pierwsze nie sprawiały mi większych trudności, mam kilka pytań dotyczących procesorów ST, na początek zamieszanie z bit-bandem, może ktoś mi wytłumaczyć na jakiej zasadzie to działa? podaje przykład #define bitband_t *(volatile...
Cześć :) W związku z tym, że w miejscu w którym pracuję istnieje potrzeba programowania pamięci SPI których wsad jest taki sam, stwierdziłem że zbuduję urządzenie, które będzie kopiowało zawartość jednej kości do drugiej. Niby nic, ale z czasem chciałbym zająć się zawodowo projektowaniem oraz programowaniem mikrokontrolerów, więc jako pierwszy projekt...
Ok, dzięki, fakt. Mam problemy z czujnikiem przyśpieszenia/żyroskopem MPU6050. Niby komunikacja działa, zapisuję wartości do rejestrów, potem je odczytuję dla sprawdzenia i jest ok. Ale... cały czas wartości przyśpieszenia i żyroskopu są równe 0. Nie potrafię tego uruchomić. W przykładach widzę że wystarczy tylko skasować bit SLEEP, który jest ustawiany...
Hard Fault jest podczas czytania czy podczas zapisu? Jakoś trudno mi uwierzyć w błąd podczas czytania. A próbowałeś rozbić operację na odczyt do zmiennej tymczasowej i zapis do rejestru? Wg mnie źle poustawiane zegary albo prefech czy też flash latency i wtedy w debugerze będzie miał faulty losowo. Bez jakichkolwiek fragmentów kodu to pewnie niewiele...
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 Mam pytanie wydrukowałem sobie cały poradnik kolegi z forum chodzi o wiadomy kurs bez bibliotek. Mam pytanie odnośnie IDE, używam tego [url=http://forbot.pl/blog/artykuly/prog... Czy sposób zakładania projektu będzie odbiegać od tego, jeżeli nie piszę przy użyciu bibliotek tylko...
Witam. Pozdrawiam szanownych forumowiczów! Potrzebuję odebrać przez moduł btm222 do procesora konkretne dane. Dane zapisane są do pliku w postaci ciągu cyfr np. 345675534999888432 ( tu może być ich więcej ale będzie to wielokrotność. 3*6*X ). Teraz wysyłam ten plik programem realterm. Nie umiem ich odebrać uP w pożądany sposób: Aby rozdzielił te dane...
Wszystkie informacje na temat parametrów karty powinno się dać odczytać z jej rejestrów. Specyfikacja karty SD np. tutaj: [url=http://www.sdcard.org/developers/te... Czy na pewno używasz blokowego zapisu (CMD25 WRITE_MULTIPLE)? Czy próbowałeś przed zapisem skasować całą kartę? Pozdrawiam JarekC
Rejestry BSRR i BRR są tylko do zapisu więc nie trzeba nic innego tylko wpisać 1 na odpowiedniej pozycji. Napisane jest, że BSx ma priorytet przed BRx, czyli jeśli dla tego samego pinu ustawisz tam 1 to w rezultacie pin zostanie ustawiony. Ponieważ są to rejestry tylko do zapisu to modyfikacja wyjść z ich użyciem jest szybsza niż przy użyciu bit bandingu,...
Jeżeli chodzi o podmianę wspomnianej funkcji uruchamiającej transmisję DMA w miejsce starej to niestety ale wyświetlacz nie reaguje. Zakładając, że w STM32CubeMX dobrze skonfigurowałem SPI+DMA Moze zle skonfigurowales DMA. A i jeszcze jedno jest may bug w cubeide przy generowaniu kodu ( nie zawsze wystepuje), polega on na tym ze inicjalizacja SPI i...
Ponieważ nie zdradziłeś tajemnicy jakiegoż to STMa używasz to poniższa funkcja może być błedna (np L4 programuje się podwójne słowa a można też programować sekwencje 32 podwójnych słów za jednym zamachem). Czasami RM sugeruje odczytanie zapisanie słowa a czasami tylko sprawdzanie EOP. Zakładam że już właczyłeś w rejestrach programowanie i wykasowałeś...
rejestr stm32 stm32 rejestr programować stm32 rejestr
hamulce polonez połączenie szeregowy grzałka różnice attiny atmega
Sharp R634 – talerz nie obraca się podczas grzania, silnik talerza, sprzęgło, naprawa Teka HX-790 SB Oven Demo Mode: Exit Procedure and Heating Issue