Do SPI wpisujesz dwa bajty, odczytujesz tylko jeden. Kontrolerowi się to nie spodoba... [syntax=C] while( !( SPI2->SR & SPI_SR_TXE )); SPI2->DR = 0xD7; // // TUTAJ dodać "niby" odczyt SPI - choćby tak: // czekaj_na_dane(); // np poprzez sprawdzanie SPI_SR_RXNE // (void)SPI2->DR; // while( !( SPI2->SR & SPI_SR_TXE )); SPI2->DR = 0xFF; while( !( SPI2->SR...
I nie rozumie a = ADC_GetConversionValue(ADC1); dlaczego z ADC1 ? Myślałem że argumentem tej funkcji powinien być raczej kanał ? Co jeśli dopiszę konfigurację ADC dla PB0 czyli kanał 8 ADC1 ? jak wtedy odczytam wartość z PB2 ? ADC1 - to ADC1 bo F4 ma do 3 oddzilenych adc. Kanał definiujesz w sekwencji odczytów - tu masz tylko jedna i jest to ujete...
W AVR bym po prostu na czas "składania" zmiennej m w funkcji read_us wyłączył globalnie przerwania - cli() i po zapisaniu wartości do zmiennej m włączył - sei(). Czy tutaj trzeba wykonać podobną operację? Ale to Ci nic nie da, bo przecież timer chodzi nadal (; Oraz czy mógłbyś Freddie opisać jeden ze sposobów jak uzyskać "sparowany" odczyt. Zrób to...
Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
Hmmm to ciekawe. Czyli NVIC jest elementem wspólnym rodziny ARM7 i jego dokumentacja jest umieszczona poza specyficzną dokumentacją danego procka? Czy dobrze rozumiem? Generalnie dobrze, pozatym że ARM7 a ARMv7 to coś zupełnie innego (; NXP w dokumentacji do swoich Cortexów daje opisy rzeczy specyficznych dla rdzenia, ST nie i tyle. W takim razie chciałbym...
..znalazłem coś takiego dla F4 bez biblioteki. ..nie wiem czy przedstawia jakąś wartość bo nie analizowałem
Regulamin wymaga aby dodać poradę w celu ogrzania archiwalnego tematu. Więc.... Nie traćcie czasu na próbę zrozumienia konfiguracji tego urządzenia bo bez ustawiania rejestrów "Reserved" i tak nic nie da się zrobić. Rejestry o których mowa, nie są nigdzie opisane i jest ich chyba nawet więcej niż te, których mówi dokumentacja. Zanim kupiłem sobie tą...
Bity rejestrów sterujących są ponazywane w pliku definicji rejestrów uC, który już włączyłeś do projektu - pooglądaj jego zawartość. Łatwiej czyta się program, gdy ustawiasz cały rejestr sterujący jedną instrukcją podstawienia, a nie zmieniasz po jednym bicie długą serią operacji logicznych.
Oprócz tego przy kompilacji wyskakiwał błąd: error: 'GPIO_TypeDef {aka struct <anonymous>}' has no member named 'BRR'; did you mean 'BSRR'? więc zmieniłem: SSD1963_CTRLPORT->BRR = SSD1963_PIN_CS | SSD1963_PIN_WR; na SSD1963_CTRLPORT->BSRR = SSD1963_PIN_CS | SSD1963_PIN_WR; I właśnie tu jest błąd, bo BSRR to nie jest to samo co BRR (co zresztą...
Tak jak pisałem w pierwszym poście IMO zachowanie normalne. Tak samo w STM32F4 nie ma żadnego FIFO w SPI. Teoretycznie ma bo masz rejestr przesuwny i DR. Dostajesz dlatego 2 TXE raz na poczatku a drugi jak przesunie z DR do tego rejestru. Aż sobie płytkę z 429 odpaliłem i nie widzę żadnego nieprawidłowego działania. FCh słusznie zauważył że akurat tu...
Nie jest moją intencją przerywać Waszej dyskusji, bo mi nie przeszkadza, ale nie skorzystam tak czy siak z tego timera, bo nie mam dostępu do tego proca. Proszę w międzyczasie tylko o odpowiedź na moje pytanie czy jest możliwe 8bitowym transferem DMA zapisać poprawnie 16bitowy rejestr compare timera?
Wybacz ale myślałem, że załapiesz tą drobną ironię :) PWR_CR_DBP to jest zdeiniowana stała a nie rejestr więc twój warunek wygląda dla kompilatora tak : while( 0x100 != 1) ) ; czyli wynikowo while(1); pętla nieskończona; Rozumiem, że chodziło ci raczej o : while(PWR->CR & PWR_CR_DBP); Cóż nie wiedziałem, że nie znasz podstaw C :roll:
http://www.freddiechopin.info/pl/downloa... Ściągnij sobie przykład dla STM32F4 i możesz spokojnie pisać na rejestrach, bez żadnych wstawek assemblerowych oraz bez zastanawiania się nad "listą rozkazów", jak mylnie określasz HAL/SPL.
Ćwiczę na STM32F4 Discovery. Diody mają reagować na wciskanie przycisku. Kiedy wciśnięty zapala się jedna, kiedy zwolnimy - zapala się druga a pierwsza gaśnie. Kiedy stosuję zapis do rejestru ODR wszystko działa jak należy. Kiedy jednak stosuję sterowanie pinami wyjściowymi przez rejestr BSRR diody się zapalają ale nie gasną po zwolnieniu przycisku....
No właśnie - w końcu dla nieznanego mechanizmu modyfikującego zmienne nieznany rejestr procesora nie jest ani trochę bardziej nieznany niż nieznana lokacja na stosie. :)
Dostęp atomowy w STM32: - bit-banding - rejestr BSR - wpisywanie gotowej wartości do rejestru ODR (czyli nie "|=" i nie "&=~") W innych układach, np. LPC17xx, dochodzą jeszcze inne możliwości. 4\/3!!
W funkcji odczytu zerujesz ACK, ale nigdzie go nie ustawiasz. Jeśli jest zbędne ZAWSZE, to po prostu skonfiguruj odpowiednio rejestr podczas konfiguracji. Jeśli jednak czasem musi być zmieniane, to w funkcji odczytu przywróć poprzednią wartość. 4\/3!!
I ostrożnie z tym podglądem rejestrów, bo on generuje (a przynajmniej może, zależnie na jaki rejestr patrzysz) nadmiarowe odczyty. Nie pamiętam jak czy odczyty SR czy DR generują flagi, ale zwróć na to uwagę, bo odczyt przez debuger też zostanie zauważony przez procesor tak samo jak dowolny inny.
No tak, ale czy debugger po prostu odczytuje błędną wartość, czy poprzez odczyt już zmienia rejestr DR? Bo zwykły odczyt rejestru w programie powinien z tego co wiem wyzerować rejestr, a tak się nie dzieje. Edit: No tak, ale czy rejestr jest pusty w debugu też nie sprawdzę... Tak czy siak w debugu czy mie w debugu śladu komunikacji na liniach MISO,...
Dlaczego? Wpisuję 0 na zerowy bit rejestru CR czyli Disable? Skoro mówisz, że nie, to pewnie masz rację, ale nie wiem co źle tu robię Operacja którą pokazałeś robi dokładnie... nic. No może nie do końca nic - odczytuje rejestr i zapisuje do niego dokładnie to samo co odczytała. Do kasowania bitów zwykło się używać "&=~". W tym przypadku jednak prościej...
Dziękuję za uwagi i w najbliższym wolnym czasie postaram się to poprawić. W dalszym jednak ciągu nie rozumiem jaka jest różnica między ustawianiem bitów ODR a BSRR. Rozumiem, że rejestr BSRR pozwala na ustawianie i resetowanie bitów w ODR więc dlaczego nie powinno się robić tego bezpośrednio? Przyznam, że wcześniej stosowałem BSRR ale gdy się dowiedziałem...
Generowanie liczb losowych to bardzo ciekawy temat. Niektóre mikrokontrolery np. STM32F4 mają wbudowany sprzętowy generator liczb losowych w tym wypadku 32 bitowych oparty o oscylator pierścieniowy oraz rejestr przesuwny ze sprzężeniem zwrotnym(nazywają go true hardware). Trochę się nim bawiłem. Jeżeli chodzi o generowanie programowe( nie wiem w jaki...
Opcja może i jest, tylko sensu w tej opcji brak. Procedura przerwania w pratktyce jest jedna dla każdego źródła i nie podmienia się jej w czasie pracy, więc dynamiczne podpinanie nie ma sensu. Funkcje timerów w ST;32F też nie są wymienne, więc rzadko zdarza się, by można było użyć do czegoś dowolnego timera - każdy jest ciut specjalizowany. Poszczególne...
Tylko pytanko - czy wystarczy opcja : ./configure --enable-stlink przy konfiguracji? Raczej niezbyt. Konieczne jest jeszcze włączenie trybu "maintainer-mode" przy kompilacji źródeł z repozytorium. Jak z obslugą USB? ? EDIT: Rozwiązanie zostało znalezione, oczywiście błąd u mnie - nie czytać tego co pisze niżej! (; Ja natomiast mam pytanie do was, dotyczące...
Witam Spróbuj włączyć zegar według poniższego (w Twoim kodzie nic podobnego nie widziałem) ========================================... * How to use this driver * ========================================... * * 1. Enable peripheral clock using the following functions * RCC_APB2PeriphClockCmd(RCC_APB2Periph_SP...
Dzięki Wam jestem o krok dalej :-) Teraz próbuje odczytać 6 rejestrów zawierających dane o przyśpieszeniu z każdej z osi (dla każdej z nich po 2 bajty. Funkcja odczytu: [syntax=c] void i2c_read(uint8_t adres, uint8_t reg_adres, uint8_t * dane, uint8_t len ) { uint32_t dummy; I2C1->CR1 |= I2C_CR1_START; while( !( I2C1->SR1 & I2C_SR1_SB )); I2C1->DR =...
Daje Ci mój działający kod, porównaj sobie co i jak. [syntax=c]#define CS_0 GPIO_ResetPin( GPIOE, 3 ) #define CS_1 GPIO_SetPin( GPIOE, 3 ) void spi_init( void ) { RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; gpioa_init(); gpioe_init(); gpio_pin_cfg( GPIOA, 5, GPIO_AF5_PP_50MHz ); // sck gpio_pin_cfg( GPIOA, 6, GPIO_AF5_PP_50MHz ); // miso gpio_pin_cfg( GPIOA,...
Dodano po 17 Także problem rozwiązałem sam metodą prób i błędów. Wszystko było w porządku, poza deklaracją push-pull'a i floating :D Prawidłowy kod main.c dla potomności: [syntax=c] #include "main.h" #include "stm32f4xx_gpio.h" int main(void) { #ifdef DEBUG debug(); #endif GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP...
A w STM32F4 są już liczniki min. godz. dni itd...? Tak, są. Jeżeli chodzi o definicje, to staram się wpisywać dla czytelności, ale zawsze przed użyciem sprawdzam czy jej wartość zgadza się z numerem bitu w rejestrze, przeważnie najpierw zaczynam od (1<<15); a potem sprawdzam czy definicja którą użyję = 15 bit. Własnie dlatego że mogę czasem użyć...
Witam, Mam STM32F4 i on ma 16-bitowe GPIO - problem w tym, że na obudowie 8bitów portu A jest na jednym końcu, a na drugim końcu jest kolejne 8bitów tego portu. Trochę to utrudnia prowadzenie ścieżek, zachowanie ich równej długości itd. Znacznie wygodniej było np. skorzystać z dwóch 8bitów z dwóch portów leżących koło siebie na obudowie (dajmy na to...
Funkcja gpio_pin_cfg() ustawia odpowiednie wartości a rejestrze AFR[].
SPI 3-wire to ma być half-duplex SPI, dobrze rozumiem? Troche inaczej sie to robi ;] 1) nie łącz MISO i MOSI. Jeśli procek jest masterem, podłącz tylko linię MOSI - w trybie half duplex ta linia potrafi również odbierać dane 2) Ustaw bit BIDIMODE w SPI->CR1 3) Kierunek narzucasz bitem BIDIOE - Jeśli chcesz coś nadać, to ustaw BIDIOE i wykonaj zapis(y)...
0. Jeżeli słyszysz nie więcej niż 1s dźwięku, to program działa ok. Najpierw otwierasz plik, odczytujesz 31600 bajtów i zamykasz plik. Nic więcej nie odczytasz. Następnie przesyłasz dane do dekodera w paczkach po 32 bajty. Jeżeli masz bitrate rzędu 256kbit/s, to masz tam ~964ms dźwięku. Inna sprawa czy słyszysz ten fragment zapętlony, czy tylko raz...
Witam, otóż mam problem, a mianowicie chciałbym obsłużyć przerwanie z pinu ALRT z przetwornika ADS1115 w celu wyeliminowania opóźnienia które teraz stosuje przy odczycie każdego z kanału (delay(20)) dokumentacja: https://cdn-shop.adafruit.com/datasheets... z góry dziękuję za pomoc mój dotychczasowy kod: [syntax=c] /* Includes ----------------------------------------...
Witam ponownie Na początek sugerowałbym przetestować samą poprawność działania SPI, można np. zapętlić MISO z MOSI. Albo odczytywać z peryferiala rejestr ID. Dopiero w następnym etapie uruchamiać obsługę właściwą. Nie analizowałem Twojego programu ale podeślę mój 'bliźniaczy' i działający na STM32F429_DISCO, odczytuje on i wyświetla rejestry GYRO L3GD20....
Czy ktoś wie gdzie może być problem? Na pewno w tym, że nie czekasz ani na ustabilizowanie się zegara HSE, ani na ustabilizowanie się pętli PLL. Te operacje są obowiązkowe zarówno przed użyciem HSE jako źródła dla PLL jak i przed użyciem PLLa jako źródła dla rdzenia. https://github.com/DISTORTEC/distortos/b...
Chyba trzeba jeszcze wykonać update, czyli przepisać wartości z rejestru tymczasowego do rejestru sprzętowego. TIM2->EGR = TIM_EGR_UG;
Wez pierwszy kod i popatrz na niego uważnie. To jest kilka linijek. Jeżeli nie znajdziesz błędu, to odpuść. Nie ma in nic wspólnego z procesorem, rejestrami itp.
I tutaj pojawia się problem. Otóż rejestry RTC są kasowane przy każdym resecie procesora oraz przy zaniku napięcia. Byłem pewien, że system sam wykryje brak napięcia VDD i podtrzyma odpowiednie rejestry, ale teraz już sam nie wiem czy może programowo nie trzeba czegoś ustawić. Szukałem w dokumentacji i niestety nic pasującego nie mogę znaleźć. Może...
http://obrazki.elektroda.pl/5221349300_1... Witam wszystkich Tym razem chciałbym zaprezentować kolejny programowy projekt czytnika kart SD uruchomiony na płytce STM32F4Discovery. Programowy, gdyż również wejdzie on w skład większego projektu sprzętowo-programowego. Poprawność funkcjonowania tego czytnika sprawdziłem na dwóch kartach...
Kamery zwykle mają wewnętrzny PLL. Częstotliwość sygnału XCLK i wartości wpisywane do rejestrów kamery muszą być odpowiednio dobrane.
Hehe. Wiem że to dziwne ale robiłem to na szybko. Cały czas eksperymentuje a mam mało czasu wiec mam nie mały bajzel. To ja jeszcze zwrócę uwagę na to, bo w Twoich kodach z innych tematów aż się rzuca w oczy: [syntax=c]USART1->CR1 = USART_CR1_UE; USART1->BRR = 168000000/9600 ; USART1->CR1 |= USART_CR1_TE | USART_CR1_RE; // RX, TX enable[/syntax] Po...
Myślę że przesunięcie rzędu czas trwania jednej konwersj nie było by problemem więc pytanie nadal aktualne A dlaczego nie wykorzystać możliwości. Jeżeli nie znasz HALa to najpierw zainstaluj sobie przykłady w Cube (ale nie mx) i przeanalizuj je. Wtedy domyślisz się jak zaincjalizować porty, ADC, DMA i timer aby trygierzował konwersje w odpiednim czasie....
Postaram się dziś podesłać demonstacyjne źródła dla tej płytki z obsługą wyświetlacza po SPI, ale od razu informuję że ja nie korzystam z bibliotek od ST więc wszystkie operacje wykonywane są na rejestrach.
Biblioteka STDPeriph jest martwa, więc lepiej ją zostaw i zainteresuj się HAL i CubeMx. Gdy program uruchamiam krokowo i jestem w petli for to dane się wysyłają. Za szybko ta pętla działa i dane za szybko są "wypychane". Należy odczekiwać odpowiedni czas za każdym razem. Regułą jest uprzednie sprawdzanie rejestru statusowego przed zapisem do rejestru/odczytem...
Zacznę od tego, że nie znam SPLa. O ile konfiguracja takich peryferiów jak UART się pewnie nie zmieniła i być może zadziała, to na pewno GPIO, RCC i NVIC jest do przepisania. Nie masz tego wiele, więc otwórz sobie reference manuala i sprawdź poszczególne rejestry.
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy. Ja robię to tak: I. Potrzebne narzędzia: 1. System Workbench for STM32...
Bit ADC_SR_EOC jest u Ciebie kasowany z automatu, bo pewnie w debuggerze podglądasz sobie rejestr DR, co oczywiście liczy się jako jego odczyt, kasujący automatycznie flagę.
Udało mi się uruchomić program tak by odpalał z Ramu. Wszystko działa jak powinno nic się nie zakłóca. Jednak nie udało mi się wyłączyć Flasha. Nie znalazłem odpowiedniego rejestru najbliższy był. FLITFLPEN: Flash interface clock enable during Sleep mode Ale jak widać służy on tylko do pracy podczas uśpienia. Co do Coocoxa niestety te problemy występują...
Błąd masz w każdym obliczeniu. Ustawienie rejestru PSC na wartość x powoduje podzielenie zegara przez "x + 1". Ustawienie rejestru ARR na wartość x powoduje odliczenie "x + 1" taktów zegara. Z tego względu tego typu rejestry zawsze ustawia się na "x - 1" względem tego co sobie obliczyłeś. 4\/3!!
wgrywanie stm32f4 stm32f4 przetwornik stm32f4 discovery
vectra dmuchawa transformator fazowy philips ciemny
reset konto google huawei bateria guzikowa
Dioda LED CQC39: różnice w pomiarach Uf i pojemności Komunikat o nadmiernej prędkości w Peugeot - przyczyny i rozwiązania