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!!
arm.com: Cortex-M4 Technical Reference Manual ARMv7-M Architecture Reference Manual Co do timera: prawdopodobnie chodzi o opóźnienie kasowania zgłoszenia przerwania. Jeśli skasujesz pod koniec procedury, to po jej zakończeniu znacznik będzie jeszcze ustawiony i spowoduje powtórne zgłoszenie przerwania. Do sterowania NVIC proponowałbym jednak użyć pseudofunkcji...
while(!(I2C3->SR1&I2C_SR1_ADDR)); program nie wychodzi z drugiej pętli Drobna rada - jeśli robisz to krokowo w debuger to nie zatrzymuj się w pętli while tylko przeskakuj za nią, naciąłem się na tym ostatnio. Nawet przy działający programie jeśli się zatrzymasz w while to się posypie. Prawdopodobnie spowodowane jest to tym, że rejestr statusowy wcześniej...
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ą...
Ja robiłem to samo ćwiczenie na STM32F0Discovery i w ogóle nie włączałem taktowania dla BKP. Na początku konfigurujesz IWDG, przed główną pętlą sprawdzasz bit RCC_CSR_IWDGRSTF w rejestrze RCC->CSR , a w głównej pętli odświeżasz rejestr IWDG->KR . Do tego tworzysz dodatkową pętlę, w którą jak wpadniesz to rejestr KR nie jest odświeżany, więc program...
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ą...
Prawdopodobnie są zdefiniowane jako tablica.
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...
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.
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:
Ć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...
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 =...
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...
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)...
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 ----------------------------------------...
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 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...
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.
Chyba trzeba jeszcze wykonać update, czyli przepisać wartości z rejestru tymczasowego do rejestru sprzętowego. TIM2->EGR = TIM_EGR_UG;
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...
A gdzie jest ten TC bit? W którym rejestrze? Jakoś nie widzę.
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....
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...
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.
W Reference Manual, rozdział o pinach GPIO, na samym końcu jest zawsze rozpiska rejestrów i pod kazdym rejestrem jest info o tym jaka jest domyślna wartość pod resecie. Przykładowo dla STM32F4: https://obrazki.elektroda.pl/2313071500_...
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!!
Hej. Może ma ktoś z Was jakiegoś gotowca na 401/407 lub 411 z obsługą USB typu HID? Najlepiej na rejestrach, ale jak będzie HAL to też przyjmę z dobrodziejstwem inwentarza. Z góry dziękuję za pomoc.
[syntax=c]while(!(SPI1 -> SR & SPI_SR_TXE)); SPI3->DR = data; //zapis danych do rejestru SPI while(!(SPI1 -> SR & SPI_SR_TXE)); while(SPI1 -> SR & SPI_SR_BSY); SPI3 -> CR1 &= ~(SPI_CR1_MSTR | SPI_CR1_SPE); [/syntax] Jeżeli to jest procedura wysyłania danych przez SPI3, to dlaczego sprawdzasz rejestr statusowy SPI1? Trochę to nielogiczne :/ Nauka przez...
/* 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!!
Teraz moje pytania którą bibliotekę lepiej poznawać czy może one są praktycznie takie same? "Biblioteki" te lekko się od siebie różnią, ale obydwie są równie beznadziejne (; Czy na armach mogę sobie programować tak jak na avr?tzn dodam sobie jakiś plik nagłówkowy jak to tam było avr/ io.h z definicjami rejestrów wejść/wyjść i mogę operować bezpośrednio...
Wygląda na to ze można osobno każdy pin i do tego prościej, bo wszystko w jednym rejestrze - włączenie AF z odpowiednim mapowaniem.
Zmieniłem oprogramowanie, ruszyło. Zamykam!
Do AHB1_ENR też masz makra w nagłówku. Użyj znaczników [syntax=c][/syntax] zamiast code. Jeśli nie skonfigurujesz zegarów, to zegar systemowy jest ustawiony na wewnętrzny oscylator HSI, który ma 16 MHz. Problemem jest rejestr MODER, który ustawiłeś na alternate function zamiast GPIO (powinien być ustawiony bit 0 a nie 1) :) No i jeśli chcesz czymś migać...
Jeśli dobrze zrozumiałem problem: Ustawiając rejestr OTYPER nie ustawiasz pinu jako wyjście, tylko konfigurujesz wyjście, prawdopodobnie włączają się jakieś wewnętrzne rezystory, skonfiguruj resetr GPIOx->PUPDR (pullup) oraz TIMx->BDTR bit BKP (wyzwalanie stanem niskim lub wysokim). pzdr
To niech teraz też będzie samo =, bo OR nie ma tu najmniejszego sensu a tylko może zaszkodzić. Tak samo OR nie ma najmniejszego sensu przy inicjalizacji rejestrów USARTa, bo niby po co chcesz zachowywać stare wartości? A jak tam jest właśnie jakimś sposobem ZŁA wartość? Wpisz po prostu do dwóćh rejestrów dwie gotowe wartości i tyle, bez żadnych ORów....
Cześć! potrzebuje pomocy przy interfejsie I2C, kiedyś już bawiłem się I2C bez bibliotek, ale postanowiłem nauczyć się hala, chciałbym postawić komunikacje miedzy I2C2 i I2C3. GPIO jak mniemem zainicjalizowane poprawnie, połączyłem przez płytke stykowa piny PA8 -> PB10 PC9 -> PB11 [syntax=c] void STM32F4_I2C3init() { __GPIOA_CLK_ENABLE(); __GPIOC_CLK_ENABLE();...
Po uruchomieniu układu LIS302DL mam problem z ustawieniem przerwań wywoływanych przez click lub double click. Przerwania od strony kontrolera działają (zmieniają odpowiednio stan LED1 i LED2). Sam pomiar przyśpieszenia w trzech kierunkach działa dość ładnie, stabilnie. Natomiast nie potrafię ustawić rejestrów LIS tak aby ledy zmieniały stan na kliknięcie...
Czy do obsługi I2C w trybie master używa się rejestrów Own Address Register? To chyba rejestry do ustawienia adresu sprzętowego urządzenia w trybie slave. W trybie master do wysyłania pierwszego bajtu - adresu - używa się normalnie rejestru DR (Data Register), tak jak do wysyłania pozostałych, czy tak?
Oj, żeby CubeMX generował wpisy na rejestrach, to pewnie bym korzystał. Chociaż czasem go uruchamiam, żeby podglądnąc jego drzewo zegarowe a potem i tak przepisuje na rejestry...
Jeżeli jesteś początkujący tak jak ja to polecam System Workbench for STM32. Instalujesz i masz wszystko potrzebne, jeżeli będziesz pisał na rejestracjach to wywalasz hal i zostawiasz CMSIS. Można w ten sposób zaoszczędzić czas na środowisko a zacząć pisać programy.
Ale na pewno bufor nie ma 2 bajtów. Ma - jeden bajt od razu jest ładowany do "shift register", a drugi czeka w rejestrze USART->DR. Dopiero trzeci i kolejne się nie mieszczą i muszą czekać na zakończenie wysyłania poprzednich.
rzeczywiście chyba wycinał, teraz po dodaniu średnika staje na I2C1->SR1 && I2C_SR1_RXNE zawsze byłby TRUE bo jeżeli dowolny bit w I2C1->SR1 jest ustawiony to I2C1->SR1 != 0 więc TRUE I2C_SR1_RXNE też != 0 więc też TRUE a TRUE && TRUE da też TRUE Dodano po 13 Zastanawiam się czy brak rezystorów podciągających może być problemem,...
Cześć, przy próbie montowania dysku (f_mount) software próbuje odczytać pierwszy sektor karty SD, w którym teoretycznie powinny znajdować się informacje do jakiego systemu plików karta została sformatowana. Jednak, gdy podglądam ten sektor to wszystkie wartości są zerami , oprócz 'rejestru' BS_55AA, który faktycznie zawiera wartość 0x55AA, co oznacza,...
Nie znam przykładów Freddiego ale poszukam. http://www.elektroda.pl/rtvforum/topic13... Najbliższy STM32F3 będzie przykład dla STM32F4.
CooCox ma generalnie dużo baboli i jest bardzo wykastrowany jako IDE. Niektóre babole od kilku wersji nie są poprawiane, a są naprawdę dziecinne... Żeby odpalić "wyklikany" projekt nagle okazuje się, że musisz ręcznie zmienić w plikach rozszerzenie pliku z .c na .S. To takie trudne do poprawienia? Chińczyki (; Z pewnością Debugger to dobre narzędzie,...
To jest frafment kodu. Zamiściem samą incjalizacje SPI bo wydaje mi się, że tam jest problem. Powyższa incjalizacja działa dla karty SD ale nie wiem czy w linijce: SPI2->CR1 |= SPI_CR1_MSTR | SPI_CR1_SSM | SPI_CR1_SSI| SPI_CR1_CPHA | SPI_CR1_CPOL SPI_CR1_BR_2 | SPI_CR1_BR_1; dobrze ustwaiam rejestry aby kodek wogóle chciał ze mna gadac.
1. Co robią funkcje GPIO_PinAFConfig(...); i dlaczego samo GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; nie starcza? Otóż w procesorach serii F1 nie ma konieczności osobnego podłączania funkcji alternatywnych - samo GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_xxxx; wystarcza. Natomiast seria procesorów F4 jest nieco bardziej zaawansowana i złożona -...
Między innymi, spójrz jeszcze na listę rejestrów.
Zdecydowanie lepiej będzie jak połączysz układ 2 urządzeń w "sieci CAN". CAN potrzebuje bitu potwierdzenia. Jeżeli go nie dostanie to będziesz miał błędy. Obejrzyj rejestr błędów dla CAN
Bardzo fajnie, że wreszcie coś na STM32 się pojawiło Na tych prockach sporo się dziej tylko zwykle jest mało czasu na sam projekt co dopiero na jego ew upublicznienie ;) W zeszłym tygodniu bawiłem się połączeniem STM32F103(HY-mini)+SSD1963 sterujący panelem TFT AT070TN92. Niby procek szybki bo 72MHz a samo czyszczenie ekranu jednym kolorem również...
Wystarczy wysłać Start i Adres. Po otrzymaniu ACK, DMA może wysłać wszystkie pozostałe dane. W tym przypadku, również adres rejestru. W przerwaniu od zakończonego transferu DMA, potrzebujesz jeszcze tylko wysłać Stop. Tylko tyle i aż tyle. W nowszych (np. F7, L4) jest trochę łatwiej. Konfiguruję i włączam DMA. Adres oraz ilość bajtów do wysłania wpisuję...
Sprawdzałem, wychodzi na to że te kanały a raczej 'Strumienie' jak to się nazywa w F4 są właśnie do tych konkretnych kanałów timera, co zresztą CubeMX sam mi 'zaproponowal' podczas wyklikiwania konfiguracji. Wg mnie na 80-90% problem leży gdzieś w konfiguracji DMA ponieważ sam TIM1 działa dobrze i generuje komplementarny PWM. Zależy mi jednak na DMA...
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...
Straszne masz skomplikowane funkcję od akcelerometru. [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,...
Dziękuję bardzo wszystkim za odpowiedzi. Zacząłem od skonfigurowania Eclipse z Open-ocd 0.6.1. Niestety z procesu debugowania wynika nadal że procesor się ciągle restartuje. Dzisiaj około 19-20 postaram się odczytać rejestr przechowujący "source reset". Piotr Piechota : Według mnie nie jest to problem od strony analizatora, ale sprawdziłem zmieniając...
11 podstawień u mnie vs. 24 u Ciebie - miłośnik długiego kodu się znalazł, he, he. ;) Plus - u mnie wiadomo, co jest w rejestrach timera, a u Ciebie - nie ;) I ostatnia różnica - mi kod działa. Wiem, na niestosowne żarty mi się zebrało, a tu Kolega w niedoli... No ale przynajmniej starałem się pomóc.
(at)darekdmp Skoro się uparłeś budować miernik energii na płytce do tego nie przystosowanej, to przynajmniej użyj gotowego rozwiązania w zakresie dopasowania sygnałów i próbkowania. W ten sposób możesz zrobić układ, który jakoś będzie działał. Użycie dedykowanego układu poprawia bezpieczeństwo i niezawodność, oraz znacznie upraszcza konstrukcję. Czas...
(at)A.T. To jak przekazuje sę argumenty znajdziesz w opisie ABI kompilatora. Ma to znaczenie tylko jeśli całą funkcję C napiszesz w asemblerze - to znaczy umieścisz ją w odpowiednim pliku .S i wyeksportujesz za pomocą .global. Natomiast jeśli definiujesz funkcję w C i w jej ciele umieścisz wstawkę to odwołujesz się nie poprzez rejestry lecz nazwy zmiennych/argumentów....
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ż...
A ustawiłeś odpowiednio rejestr AFRL dla gpio? uC musi wiedzieć do czego podłączyć pin.
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.......
poszukaj sobie w timerze 1 takiego bitu o nazwie MOE P.S. Skoro używasz przykładu, to czemu nie skorzystać z funkcji konfigurującej wyprowadzenia, tak aby nikt nie musiał się zastanawiać co robisz i czy na pewno wszystko? P.S.2. Zerowanie wszystkich rejestrów timera jest całkowicie zbędne. Jeśli czujesz przemożną chęć resetowania timera, to w RCC masz...
PLLN trzeba ustawić na 8 i działa jak należy.
A dlaczego nie spróbujesz operować bezpośrednio na rejestrach?
No niestety. Dzięki za pliki (działają) i wgl. pomoc , ale nie pomogło :( . rejestry WDT o wartościach resetVal. magic numbers ? Patrzyłem na wszystkie rejestry , co się zmieniało to napisałem , pomijając IDR. Przy okazji odinstalowałem Atollica i zainstalowałem poprzednią wersję , oczywiście bez żadnego rezultatu. Mogę wgrać program jako hexa i jest...
Jeżeli nie zainicjujesz pola ADC_init_structure.ADC_ExternalTrigConv to będą tam śmieci, a potem te śmieci wpiszesz do rejestrów ADC.
Żeby włączyć nowy transfer trzeba wyłączyć poprzedni (nawet jeśli się już skończył), przez zapisanie zer do stosownych rejestrów. Synchronizacja kanałów polega właśnie na tym, że dany kanał jest "sprzęgnięty" np. z Timerem czy z UARTem. Niemniej jednak być może dałoby się ustawić timer tak żeby wyzwalał transmisję tylko jednego bajtu na raz, tylko ciężko...
Dane odczytane z tej transmisji będą gotowe dopiero po ostatnim takcie zegara SPI. Dopiero wtedy odczyt DR da nam to, co przyszło z linii. Dlatego należy po zapisaniu czegoś do DR poczekać na ustawienie flagi RXNE. Jak wykonujesz krokowo, to się ustawi od razu - jak wykonujesz normalnie zapewne nie zdąży. No tak, oczywiście jest dokładnie tak jak piszesz....
Witam Niestety do tych funkcji w których mialem wstawić breakpoint nie dochodzi, bo wywala się już przy LCD_Init(). A dokładniej przy odczycie rejestru przez FSMC wyzwalany jest HardFault_Handler. A ten adres jest dobry.. [syntax=c]#define LCD_BASE ((uint32_t)(0x60000000 | 0x08000000))[/syntax] jeśli FSMC_Bank1_NORSRAM1 =0 to ja używam 0x60000000 Pozdrawiam
Aha, czyli w Twoim kodzie ostatecznie na czas pomiarów rejestr CR1 ma mieć wartość 1<<23, a rejestry SMPR1 i SMPR2 - 7, tak? Czyli wszystkie kanały poza 0 i 10 mają czas próbkowania 3? Twój zapis jest: a) nieczytelny i b) błędny. Proponuję, żebyś jednak zaczął się stosować do udzielanych Ci rad. Zapisuj rejestry jednym podstawieniem, a nie serią....
Witam, Z tego co ja zdążyłem zauważyć (u siebie), problem może wynikać z miminalnego czasu "inactive time" czyli 50ns pomiędzy transmisjami (CSN 1). Zważywszy, że w przypadku STM32F4 szybkość wykonywania instrukcji jest kilkukrotnie (co najmniej) szybsza, powoduje to naruszenie czasu, jaki staruszek nRF potrzebuje na otrząśnięcie się po ostatniej transmisji,...
Korzystałem z googla i czytałem dokumentacje. Chcę, żeby ktoś mi wytłumaczył co to dokładnie jest np Prescaler i jak mam go rozumieć w kontekście mojego projektu (tak, dokumentacja nie wyjaśniła mi tego dokładnie). Nie wiem jaką dokumentację czytałeś, le niewątpliwie nie tę, którą trzeba. Aby zrozumieć jak działa to wszystko trzeba przeczytać Reference...
A ilu wg. Ciebie cykli mógły minimalnie potrzebować procesor na zapis 8 słów na stos, zaindeksowanie tablicy, pobranie z pamięci i załadowanie do PC nowej wartości, wykonanie kilkunastu instrukcji oraz pobranie ze stosu i przeładowanie 8 rejestrów?
https://obrazki.elektroda.pl/8115074100_... W związku z urlopem postanowiłem opisać wykonaną w ostatnim czasie konstrukcję. W zawodzie nauczyciela akademickiego jest to 36 dni roboczych plus w moim przypadku 26 dni zaległych z zeszłego roku. Jest to więc trochę czasu - za dużo. Wszystko zaczęło się od znalezienia tunera DVB-T Opticam...
w pliku LCDConf.c funkcja LCD_X_Config powinna zawierać: // // Orientation and offset of SEG/COM lines // Config.Orientation = DISPLAY_ORIENTATION; Config.RegEntryMode = 0x00; GUIDRV_FlexColor_Config(pDevice, &Config); kluczowa jest właściwa orientacja zgodna Config.RegEntryMode - jest to wartość wpisywana do rejestru kontrolera SSD decydująca o sposobie...
niestety w moim przypadku kiedy próbuje za pomocą biblioteki Hal pobrać dane z szybkością 200kSpc osiągam maksymalnie 50kSpc. Program zachowuje się jakby wywołanie funkcji trwało wielokrotnie dłużej niż sama transmisja. Ale dziękuje za wszelkie podpowiedzi. Po przerwie wróciłem do pracy nad problemem jak uda mi się znaleźć przyczynę opiszę. Jak nie...
stm32f4 sector stm32f4 konfiguracja stm32f4 timer
excel produkcja odbieranie danych bluetooth blokada ustawić
Gdzie kupić okrągły gumowy pasek napędowy do karuzeli? Przesuwanie się obrazu w dół w wideodomofonie Tuya