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!!
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...
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...
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ą...
jak się do nich dostać Tak samo jak do każdego innego rejestru - przecież rejestr to rejestr. 4\/3!!
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?
Ć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....
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:
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. :)
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...
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!!
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...
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.
Prawdopodobnie są zdefiniowane jako tablica.
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...
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ć...
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 =...
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...
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...
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)...
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....
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 ----------------------------------------...
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.
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.
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...
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.
Cocox na pewno obsługuje STM32F4, gdyż sam używam tego środowiska i wszystko działa bez zarzutów (testowane z płytką discovery, zewnętrznym ST-LinkV2 i ST-Link). W obecnej wersji brakuje tylko zdefiniowanych rejestrów peryferiów (dla F1 i F2 są), ale pewnie w kolejnych wersjach będzie to uzupełnione.
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...
Tak, ja również korzystam z Keila i z funkcji inicjującej zegary system_stm32f4xx.c (teraz wyszedł nawet fajny wizard do ustawiania zegarów). Reszta standardowo na rejestrach, ale na razie posprawdzałem tylko czas wykonywaniu kodu na floatach, i pomrugałem diodami. Wrócę do tego uC po skończeniu aktualnego projektu.
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....
Nie przy C, gdzie zanim zaczne cos robic, to zuzywam pare kilo flash-a :( To włącz optymalizator. C wcale nie jest AŻ TAK CIĘŻKI jak to ciągle piszesz, tylko programiści są ciężcy. Przecież jest tłumaczony na assemblera i optymalizowany w celu np reużycia wartości wpisanych w rejestry etc. W większości przypadków nie ma sensu pisać w asemblerze.
Sporo osób ma problemy więc proszę. Lista plików które trzeba umieścić w czystym przykładzie stm32f4_blink_led aby wyświetlacz ożył. (na płytce STM32f429disco) (UWAGA DZIAŁA BEZ SPLa) W pakiecie: -zaktualizowane pliki nagłówkowe od st. -zmodyfikowane pliki inicjalizacyjne SDRAM na bazie projektu ze strony en.radzio.dxp.pl (działają na bibliotekach GPIO...
Zauważyłeś że coś jest nie tak? Owszem. To co napisałem Ci ja i BlueDraco zaraz przedemną. W ramach podpowiedzi, dodam, że wartość rejestru GPIOA->AFR[1] po tych dwóch linijkach to `7<<2*4`, a nie spodziewane przez Ciebie `(7<<2*4) | (7<<1*4) | stara_wartość_rejestru`. Zastanów się sam dlaczego.
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...
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ą...
wgrywanie stm32f4 stm32f4 przetwornik stm32f4 discovery
krótkie pranie obsada pierścień matrix kabel
sterownik biezni suszarki haier
Schemat instalacji elektrycznej Ford Kuga MK1 Sinclair AMC-14P – instrukcja serwisowa, Service Manual, schematy, kody błędów, R290