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...
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....
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...
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...
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...
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...
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...
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,
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...
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.
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....
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ść...
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...
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...
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.
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...
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
Witajcie, siedzę i szukam błędu w bibliotekach do obsługi NRF24L01. Skopiowałem je z biblioteki, którą wykorzystuje w ATmega8. Działa nawet dobrze tam, niestety na STM32F0DISCOVERY już nie chce. Będę bardzo wdzięczny za pomoc. To najpierw kody, które wyrażają więcej niż tysiąc słów ;) : main.c http://obrazki.elektroda.pl/4732813300_1...
Myślę że to wszystko jest wytłumaczone w datasheecie do tego akcelerometru. 4\/3!!
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...
No to jednak pokuszę się o podsumowanie: Dyskusja nie zaczęła się od wydajności, a od poprawności logicznej różnych technik kasowania znaczników. Wskazałem, że &= wykonywane przez procesor jest błędne i przy okazji wolne, i że zwykły zapis słowa przez procesor jest bezbłędny i szybszy. Pojawiła się teza, że podobnie zachowa się zapis bitu przez BitBand...
Bez bibliotek zajmuje to jedną linię z jedną instrukcją - zapis wartości do rejestru AIRCR.
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,...
To akurat nie - w końcu to nie rejestry I2C, tylko RCC. 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.
Witajcie, właśnie się bawię pamięcią Flash w STM32F0DISCOVERY (chcę się nauczyć obsługi). Efekt? Chyba zablokowałem możliwość zapisu... Kod (dopiero się uczę, więc komentarze mogą zawierać błędy): [syntax=c]#include "stm32f0xx.h" #include "stm32f0_discovery.h" int main(void) { RCC -> AHBENR |= RCC_AHBENR_GPIOCEN;//LEDY GPIOC -> MODER |= GPIO_MODER_MODER8_0...
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ś...
To, co robi funkcja oswietl_kolumne da się łatwo zapisać w dwóch linijkach kodu bez switch(). Na rejestrach BSRR i BRR nie wykonuje się operacji logicznych - to jeden z poważnych błędów w programie. Tablice stałych należy definiowań ze słowem kluczowym const. I jeszcze ze 20 innych uwag, których nie chce mi się pisać. Skróć ten kod z 10 razy, to poanalizujemy.
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?
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!!
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ż...
A mi się najbardziej podoba pierwsza instrukcja, która włącza HSI. Bez niej procesor w ogóle nie mógłby działać, bo nie ma źródła zegara. Ciekawe, jakim cudem w ogóle ją wykonuje... :) Kod poniżej robi to, o ci Ci chodzi - jak widać, wystarczy 9 zapisów do rejestrów, żeby skonfigurować porty i timer. Nie przezsadzaj z tymi operacjami logicznymi... [syntax=c]...
Zawsze będzie o jeden bajt opóźnione. To że masz opóźnione o dwa bajty musi wynikać z jakichś operacji zapisu do rejestru DR. Przykładowo zauważ, że wszystkie operacje typu "SPI2->DR = 0;" powodują wysłanie DWÓCH bajtów.
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?...
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...
Witam Mam problem ze zmianą czasu w STM32F0Discovery. Konfiguracja i inicjalizacja modułu jest dobrze wykonana - w debugerze zlicza sekundy, ustawia flagi itd. Problemy zaczynają się gdy chcę załadować do rejestru czasu TR i daty DR aktualny czas. Podczas pracy krokowej wszystko idzie ładnie - flagi się ustawiają, rejestr ładuje i wartości się zmieniają....
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ć...
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...
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!!
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...
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...
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...
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...
Odczytaj w debuggerze wszystkie rejestry flash (szczególnie SR i CR), to zobaczysz co może być źle.
To Freddie jeszcze nie napisał, że w C++ można sprytnie zdefiniować dostęp równoważny w zapisie tablicy pól bitowych? No, zawiedziony jestem okrutnie... ;) Wystarczy zrobić klasę dla rejestru i przeciążyć operator indeksowania.
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ł...
Zapis i odczyt jest realizowany w tym samym cyklu. Odczytanie rejestru DR nie wymusi transmisji.
No Panowie, a ile faktycznie taki przetwornik potrzebuje sampli? O ile rozumiem, on ma jakieś częstotliwości minimalne - nie może działać statycznie. Aczkolwiek DCLK=144 MHz (taka jest minimalna) dla 8 kanałów oznacza 562,5 SPS, co chyba jest w okolicy minimalnej potrzebnej do pełnego przesłania sygnałów EEG (tu by się przydała informacja od Autorki,...
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...
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...
"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:...
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ę...
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".
Witam, W przypadku wykorzystywania przerwań EXTI trzeba włączyć zegar dla AFIO RCC_APB2Periph_AFIO. Cytat z STM100xx Referene Manual (RM0041, rozdział 7.4 pierwsza notka) To read/write the AFIO_EVCR, AFIO_MAPR, AFIO_MAPR2 and AFIO_EXTICRX registers,the AFIO clock should first be enabled. Więc aby poprawnie skonfigurować przerwania EXTI (zapis do rejestrów...
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...
(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...
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...
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.
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,...
Czy ten zapis jest koniecznie potrzebny: USART1->SR=0x80;. Powinno działać bez ingerencji w rejestr SR w przerwaniu.
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...
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----|...
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...
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...
Na linię danych wysuwa się zawartość rejestru przesuwnego, do którego dane są ładowane z FIFO co DS[3:0] taktów zegara. Jeżeli nie zapisujesz nic nowego do rejestru danych SPIx->DR, to zawartość FIFO również się nie zmienia. Myślę, że rysunek 358 w RM0316 dość dobrze oddaje działanie układu. Zwróć uwagę, że Slave musi wystawić dane już przy pierwszym...
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...
Inicjowanie UART to 2 lub trzy zapisy do rejestrów, przemieszczenie linii - po jednym zapisie na port (czyli jeśli zmieniasz z portu A na B to masz dwa zapisy). Czas tych operacji nie przekroczy ułamka mikrosekundy (kilkanaście cykli procesora), o ile nie będziesz korzystał z SPL ani HAL.
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.
Przy odczycie z DR jest dokładnie ten sam problem co przy zapisie - jak chcesz 8-bitów, to musisz się odwołać przez wskaźnik 8-bitowy (identyczny jak ten powyżej do zapisu). Twoja zmienna tmp i w tym przypadku nie ma żadnego znaczenia, bo "szerokość" odczytu/zapisu jest zdeterminowana tylko i wyłącznie przez źródło odczytu lub cel zapisu, a nie rozmiar...
Podczas obsługi modułu RTC DS3231 przy odczycie I2C danych z rejestru linia SDA pozostaje w stanie niskim, co uniemożliwia dalszą komunikację. Moduł posiada rezystory podciągające 4,7k. Mikrokontroler to STM32F103C8T6 . Zakładam, że moduł działa nadal, o czym świadczy obecności fali 32khz na odpowiednim wyjściu. Ponowne uruchomienie programu (mikronoktrolera)...
Witam, Po wielogodzinnej zabawie wreszcie udało mi się uruchomić I2C i nawiązać komunikację z akcelerometrem. Jednak mam mały problem - chciałbym w jednym adresowaniu w trybie do odczytu odczytać zawartość kilku kolejnych rejestrów z akcelerometru. Póki co udało mi się napisać działający program odczytujący tylko jeden rejestr, więc do odczytania trzech...
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....
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ę,...
Podejrzyj kod asemblera i zobacz czy na pewno wykonują się zmiennoprzecinkowe instrukcje. U mnie dodatkowo trzeba było włączyć optymalizację oraz podlinkować libm i libg z katalogu fpu kompilatora i tak zauważyłem, że sporo zależy właśnie od wersji kompilatora. Mnożenie wykonuje od razu sprzętowo ale do pierwiastkowania trzeba go zmusić. A pozwolę też...
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...
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...
Ź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ń...
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...
Muszę Ci powiedzieć, że ustawiałem bit STKALIGN w rejestrze CCR a także go resetowałem i wiele to dało... Podsumowywując: - kopiowanie (zapisywanie) z użyciem rozkazów STR i pochodne - nie działa - kopiowanie (zapisywanie) z użyciem rozkazów STREX - nie działa - kopiowanie (zapisywanie) przez DMA - nie działa - kopiowanie (zapisywanie) przez aliasy...
Faktycznie, rozwiązanie kwestii działania SPI było dosyć proste i po sprawdzeniu - SPI działa. Odczytuję zapisany wcześniej rejestr poprawnie. Teraz mam inny problem. Poniżej zamieszczam program z pliku main.c, w którym są dodane miejsca wysyłania kolejnych numerów przez UART i program zatrzymuje mi się po wysłaniu numeru 88. Nic więcej się nie dzieje,...
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. Od kilku dni próbuję obsłużyć RTC na procesorze STM32F051R8, dokładnie na płytce DTM32F0 discovery. O ile zegar działa w miarę dobrze, to mam problem z utrzymaniem zegara podczas zasilania z baterii (VBAT). Rejestry się zachowują, ale zegar nie działa. Po ponownym włączeniu zasilania jest zapisana godzina w której zostało ono wyłączone. Kod,...
[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...
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...
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? Czy jesteś pewien, że zapisywana wartość jest zgodna z parametrami pracy pamięci vs. częstotliwość taktowania rdzenia?
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.
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...
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...
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...
BlueDraco nie mieszaj, nsvinc nie daj się wkrecać, bo nie o tym mowa. DMA obsługuje transfery 8-, 16-, 32-bitowe. HardFault tak jak pisałem generuje np. próba zapisania do adresu "tylko do odczytu". W przypadku wciągnięcia śmieci ze zmiennej albo rejestru peryferium najczęściej dostajemy adres 0x00 lub z przedziału 16b i nie ma nic do rzeczy to czy...
rejestr stm32 stm32 rejestr stm32 zapis
symetryczny trójfazowy trójkąt podłączyć drugi dekoder wymagać sprzętowy
filtr dolnoprzepustowy telefunken vestel
Błąd 504 w kotle Ariston Cares - jak usunąć? Głębokość rowków w głowicy silnika OM457 LA