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...
rozdział 5.1.2 : • Access to the RTC and RTC backup registers 1. Enable the power interface clock by setting the PWREN bits in the RCC_APB1ENR register (see Section 7.3.13 and Section 6.3.13) 2. Set the DBP bit in the PWR power control register (PWR_CR) for STM32F405xx/07xx and STM32F415xx/17xx and PWR power control register (PWR_CR) for STM32F42xxx...
Funkcja gpio_pin_cfg() ustawia odpowiednie wartości a rejestrze AFR[].
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...
Witam. Stary temat ale odświeżę. Też próbuję uruchomić taką kamerę i mam mega problem. Nie za każdym razem się uruchamia. Czasami daje kilkukrotnie mniejszą częstotliwość impulsów na wyjściach HSYNC i VSYNC niż zwykle. Wszystko zależy od momentu uruchomienia. Jak zasilanie się pojawi za szybko. Nic nie pomaga zwiększenie opóźnienia do wykonania sprzętowego...
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://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.
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...
Czy można prosić o pomoc z obsługą zapisu RTC w HAL? Albo jak powinien wyglądać kod do zapisania danych do RTC przez rejestry?
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....
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...
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...
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.
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ą...
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!!
Hmm no to chyba tak mam. Nie wpisuje nic do rejestru PUPDR.
Jeżeli nie zainicjujesz pola ADC_init_structure.ADC_ExternalTrigConv to będą tam śmieci, a potem te śmieci wpiszesz do rejestrów ADC.
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_...
Zmieniłem oprogramowanie, ruszyło. Zamykam!
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...
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...
Nie znam przykładów Freddiego ale poszukam. http://www.elektroda.pl/rtvforum/topic13... Najbliższy STM32F3 będzie przykład dla STM32F4.
Chyba trzeba jeszcze wykonać update, czyli przepisać wartości z rejestru tymczasowego do rejestru sprzętowego. TIM2->EGR = TIM_EGR_UG;
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?
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...
A dlaczego nie spróbujesz operować bezpośrednio na rejestrach?
[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...
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ą....
Bit BUSY jest kasowany przez STOP. Zatem po wystartowaniu bit START (stan wysoki), czekam, aż BUSY będzie wyczyszczone przez STOP i zaczynam wtedy kolejną transmisje (ale to nie działa do końca). Ta dziwna funkcja to tylko ustawianie co, ile i skąd chce odczytać/zapisać nic nie robi z rejestrami.
/* 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!!
A ktoś korzystał z tego akcelerometru lub bardzo podobnego? Jestem ciekawy jak konfigurujecie rejestry, i jak odczytujecie przyspieszenie.
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...
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.
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ć...
Daje już któryś raz z kolei mój kod, działa na F4 na pewno. Może i działa. Ale odbiór na pewno powinien wyglądać inaczej. Do demoh. Resetujesz układ I2c i chcesz juz działać? a gdzie konfiguracja? Podejrzałeś w ogóle rejestry debugerem?
Do BRR powinieneś wpisać (168000000/4)/Baud. Do tego to co napisał kolega wyżej no i to zerowanie bitów jest raczej zbędne bo po resecie te rejestry mają wartości 0x00000000.
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....
It is cleared by software or by reading the ADC_DR register. DMA jak by nie patrzeć czyta ADC->DR. Nawet sam mu podałeś adres tego rejestru do odczytu.
Sprawdzę sobie dlaczego, przecież rejestry mogę odczytać programowo i wyświetlić np na tak wykorzystywanym LCD (przykładowo). W razie problemu wolę debugować softem. Może niejasno się wyraziłem - softem nie możesz niczego zdebugować, jeśli problem jest z ... softem. I tutaj nic nie zastąpi debuggera. Mówisz o LCD, ale jak próby używania LCD powodują...
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...
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.
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.
Rejestry AF służą do wyboru jednej z możliwych funkcji wyprowadzeń GPIOA i GPIOB mogą mieć do 16 funkcji dla każdego wyprowadzenia. Jeśli przypadkiem używasz funkcji 0, to nie musisz nic konfigurować w AF. Zestawienie funkcji linii portów znajdziesz w Datasheet (nie w RM).
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ż...
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?
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...
Możliwe że pomieszane różne wersje bibliotek stdperiph_lib. Są one czasem wygodne żeby coś szybko raz ustawić bez dłubania w manualu, ale mocno 'zryte' i mocno niekompatybilne między wersjami. Włączenie alternatywnych funkcji wygląda mniej więcej tak: [syntax=c]GPIO_PinRemapConfig(GPIO_Remap... ENABLE);[/syntax] Można przejrzeć kod biblioteki szukając...
Pokaż program. Używasz SPL? Ustawienia zegarowe generujesz z arkusza kalkulacyjnego dostępnego na stronie STM (clock configurator się to chyba nazywa) - ten arkusz generuje Ci plik z konfiguracją zegarów. Potem dla ustawienia baudrate poprzez SPL musisz dodatkowo w linii poleceń kompilatora zdefiniować globalnie stałą HSE_VALUE z wpisaną wartością tego...
Mnie się wydaje, że musisz włączyć jeszcze bity SSM i SSI w rejestrze konfiguracyjnym SPI... 4\/3!!
(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....
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?
DMA1_Stream7->M0AR powinień posiadac adres wskazujący na adres zmiennej Duty, czy tak jest? DMA1_Stream7->PAR powinień wskazywać na adres rejestru TIM4->CCR3, czy tak jest ?
PLLN trzeba ustawić na 8 i działa jak należy.
Zauważ, że w Twojej konfiguracji TIM5 działa jako downcounter. W tym przypadku kaskada timerów to przerost formy nad treścią. W zależności od tego, jakiej rozdzielczości potrzebujesz do pomiaru czasu, możesz odpowiednio ustawić prescaler. Tylko należy pamiętać, że jest to rejestr 16-bitowy.
Jeszcze tylko jedno pytanie. Skąd DMA zna adres rejestru? Przecież w konfiguracji podaję tylko adres DRa...
Dobrze, dam:) Tylko wyjaśnij mi co to jest. Errate przeczytaj ;) I chodzi dla zegar dla SPI;) To czekanie aż zapis do rejestru się dokona, tak mniej więcej.
Szczerze mówiąc kod wygląda haxorsko więc moim zdaniem jest zbędnie skomplikowany jak na swoje możliwości. Nie wiem czy pisze się tak po to, żeby świeże osoby uważały autora za komandosa? Makra z np timerów mało dają ponieważ jeśli ktoś chce wykorzystać to makro to i tak musi zajrzeć do RM żeby zobaczyć jak się dany rejestr nazywa, tym bardziej może...
Już poprawiłem program. Rzeczywiście namieszałem. Mam ustawiony timer 4 jako pwm i chciałbym móc go zainicializować w trybie "GATED Mode" pinem PB6. Zgodnie z datasheet tryb OPM może działać jako PWM lub Output Compare (str. 611). Wystarczy uruchomić w rejestrze CR1 bit OPM.
(at)JarekC 1. Ponieważ po wyłączeniu trybu debuggera, żadne przerwania zewnętrzne, wejścia nie odpowiadają, podczas debuggingu wszystko fajnie działa. 2. Nie, nie ma żadnych pułapek. A czy to nie jest spowodowane wyczyszczeniem pamięci flash, bo kiedyś to robiłem poprzez ST-Link, może jakieś rejestry się wyczyściły czy coś?
Zgodnie z dokumentacja, CCER służy do fizycznego podłączenia wyjścia timera do nogi uc która może kontaktować się ze światem zewnętrznym. Jednak nawet przed chwilą sprawdziłem, że po wyłączeniu tego bitu konwersja nie następuje. Sam wiem, że miałem problem z konfiguracja ADC z wyzwalaniem timerem właśnie przez ten bit. Co do erraty i rozsunięcia włączenia...
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...
1. Rejestry BSRR i BRR wymyślono po to, żeby NIE używać operacji logicznych na portach, a Ty piszesz np.: LCD_PORT->BSRRL |= (1<<DB4); - kompletnie bez sensu 2. Nie miałem nigdy problemu ze sterowaniem wyświetlaczy 5V zasilanych z 5V z STM32 zasilnych z 3.3,a nawe z 3.0 V. Szukaj błędu w połączeniach lub definicjach/konfiguracji portów. Sprawdź...
Jak widać na screenach on używa innej niż Ty i w jego bibliotece tego makra nie ma. Jak widać na screenach używa dokładnie tych samych nagłówków CMSIS dla STM32F4 co każdy (chyba że znasz jeszcze jakąś "bibliotekę" która ma główny nagłówek o nazwie `stm32f4xx.h` i ma dokładnie takie same definicje dla USARTa, innych rejestrów GPIO czy dla RCC?). Ale...
[syntax=c]CanRxAdres1 = hcan.Instance->sFIFOMailBox[0].RIR>>21; CanRxDana1 = hcan.Instance->sFIFOMailBox[0].RDLR;[/sy... Ja odczytuję bezpośrednio z rejestru.
Okazało się, że potrzebny jest sygnał MCLK z magistrali I2S do inicjalizacji wzmacniacza. Wtedy można przesyłać audio bezpośrednio z mikrofonu i odsłuchać na słuchawkach. Najprostsza konfiguracja to: - mikrofon: dostarczenie sygnału zegarowego np. z uzyciem I2S - wzmacniacz: korzystam ze środowiska Atollic, które udostępnia API. Wystarczy skonfigurować...
Dlaczego? Wpisuję 0 na zerowy bit rejestru CR czyli Disable? Nie, wpisujesz do rejestru DMA2_Stream5->CR zawartość rejestru rejestru DMA2_Stream5->CR ;) Zegar włączany jest w funkcji RCC_Config() To nie jest funkcja włączająca zegar. Włączasz w ten sposób sygnał resetujący DMA2 (ciekawe, czy gdzieś dalej go wyłączasz...).
Jeżeli bardzo chcesz korzystać z SPL, to niestety musisz też dołączać wszystkie opasłe pliki "biblioteki" dla każdego modułu. W tym przypadku albo brakuje #include stm32f4xx_gpio.h, albo nie zadeklarowałeś 'GPIO_InitTypeDef GPIO_InitStruct;' Najśmieszniejsze, że taką funkcję można napisać w kilku linijkach z wykorzystaniem pliku stm32f4xx.h (rejestry)...
Jak sprawdzam wartości rejestrów to wygląda, że funkcje alternatywne są ustawione dobrze GPIOA->AFRH przyjmuje wartość 0x70, a GPIOC->AFRL 0x80000000. Powinno być 84MHz, ponieważ zegar ustawiany jest za pomocą PLL i przeliczając wychodzi mi 168MHz z dzielnikiem 2 na APB2. Ale rozumiem, że same rejestry od USARTa wyglądają na poprawnie ustawione?
opisz jak w procesorze STM32F411 skalibrować RTC używająć rejestrów. Posiłkuj się Reference Manual i notą aplikacyją AN4759 Wstępna ocena dostępnych informacji Użytkownik prosi o szczegółowy opis kalibracji zegara czasu rzeczywistego (RTC) w mikrokontrolerze STM32F411, z wykorzystaniem bezpośredniej manipulacji rejestrami. Wskazuje na potrzebę posiłkowania...
Sam goldpin też ma pojemność, generalnie kanapki do lcd to nie jest dobry pomysł (szczególnie ta pośrednia z złym layoutem, pomóc może podłączenie taśmą tych pinów od lcd na zasadzie pin/masa/pin/masa itd), ale zwiększenie czasu wysyłania też powinno pomóc. Możesz też spróbować zmniejszyć pochylenie zboczy, albo zamienić cube na rejestry. Ewentualnie...
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.......
Chyba jest jakaś różnica bo np. dla stm32F1 transfer mi działa. W F4 w CR ustawia się dodatkowo nr strumienia. Dodano po 21 Działa :) [syntax=c] DMA1_Stream3->CR = 0 ; // DMA disable; DMA1_Stream3->NDTR = 4; // number of data to transfer DMA1->LIFCR = DMA_LIFCR_CTCIF3; DMA1_Stream3->CR = DMA_SxCR_CHSEL_2 | DMA_SxCR_MINC | DMA_SxCR_DIR_0| DMA_SxCR_EN;...
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...
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.
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. :)
Zaraz po wejściu do procedury przerwania odczytuj dane z rejestru odbiorczego UART (DR) co jednocześnie "czyścli" flagi przerwań. Może to pomoże :)
72MHz/2=36MHz 36MHz/(12 cykli + sampilng time 3 cykle)=2.4MHz (2.4MSPS) To akurat źle liczysz. Nie uwzględniłeś tego, że wybrałeś 8-bitowy tryb przetwornika, zatem czas przetwarzania wynoś 8+3 = 11 cykli -> 3.2 MSPS. Dla 12 bit będzie oczywiście poprawnie. Co prawda to nie rozwiązuje Twojego problemu, jednak może być istotne, gdy rozwiążesz problem...
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.
Ż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...
Powtarzam: pokaż kod, który wg. Ciebie ma działać, a nie działa. PS. Rejestry BSRR i BRR zostały wymyślone po to, żeby nie trzeba było używać na nich operacji logicznych, a Ty właśnie to robisz.
Nie pomyślałem, że to chodzi o radio. Dzięki :) Nadal zastanawia mnie dlaczego mogę zmieniać ustawienia np. częstotliwość pracy modułu, a nie chce on mi nic wysłać. A skąd wiesz, że możesz? Jak już pisalem wszystkie rejestry są write oprócz status ale w nim nie masz żadnych parametrów konfiguracyjnych (zapisanych wczesniej) do odczytu i porównania....
Najpierw ustawiasz pracowicie wszystko (już pomijam dwukrotne włącznie w RCC - dla pewności?), aby potem: RCC->APB1RSTR |= RCC_APB1RSTR_SPI2RST; delay_ms( 10 ); RCC->APB1RSTR &= ~RCC_APB1RSTR_SPI2RST; Genialne... Czytałeś w ogóle do czego jest ten rejestr i te bity? 4\/3!!
A jak z napieciem interfejsu? Oba twoje ulpi dzialaja z 1.8v na io. Do tego polaczenie nie moze byc zbyt dlugie. Skoro nie masz nic na d+ I d- sprobuj odczytac rejestry ukladu ulpi. Bedziesz wiedzial czy sam interfejsu ulpi dziala (w pzypadku poprawnego odczytu rejestru) .
Czy dobrze rozumiem, że po osiągnięciu adresu CMAR+CNDTR zostanie do rejestru CNDTR wpisane zero i cały proces przesyłania danych będzie odbywał się dalej ?
GPIO rejestry nie obsługują DMA, DMA dziala z SPIx, I2Cx, USARTx, TIMx, SDIO, ADC, DAC, USB, DCMI w sumie wszystko co pełni funkcje alternatywne ale nie GPIO RM 009 DMA table 21, channel 0 ADC1 ( da sie zrobić DMA z ADC_DR do pamięci)
Błędów całe mnóstwo. 1. Nie robi się przerwań od przycisków. Zrób przerwanie timera np. 100 Hz, w nim sprawdzaj stany przycisków. 2. __attribute__ ((interrupt)) jest zbędne. 3. Znacznik przerwania kasuje się na początku, nie na końcu obsługi przerwania. 4. Do zmiany stanu linii portów służą rejestry BSRR- jeden zapis zmienia stany dowolnie wybranych...
Obadałem właśnie EmBlocks, póki co z STM32F4 i wygląda imho bardzo obiecująco. To, czego póki co brakuje, to pogląd rejestrów peryferyjnych, poza tym wygodne fajne IDE. Jak je porządnie dorobią rozważę przesiadkę z Eclipse'a.
Uwierz mi, że wszystko działa jak trzeba, tylko trzeba mieć świadomość różnic między float a double... Np. jak wezmę Twój przykład i zmienie double na float: volatile float f = 123.5434; Niby OK, ale... 123.5434 jest... liczbą typu double, więc faktycznie masz konwersje (ze względu na volatile). Jak dasz 123.5434 f (albo zrzutujesz na float), to już...
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
(at)shy_moon No co ty? Kogo obchodzą kolejki, konfiguracje oraz zapewnienie aby driver obsługiwał wszystkie interfejsy dostępnie w MCU. Inicjalizacja to 6 linii kodu, wysyłanie 4 oraz odbiór 5. Razem 15 linii. Nie to, że chcę jakoś bronić tutaj HAL bo nie jest to przykład dobrego kodu. Jednak 6 liniowe zapisy do rejestrów również nie są. Jednak dobry...
Rejestry GPIOx->BSRRH i GPIOx->BSRRL to "połówki" rejestru BSRR opisanego w manualu, a więc wpisywanie tam wartości większych niż 16-to bitowe nie odniesie żadnego skutku. Zobacz czy w nagłówkach nie ma albo dostępnego rejestru GPIOx->BSRR (bez ...L albo ...H) albo odpowiednich makr GPIO_BSRRx_Bx_xx (z ...L... lub ...H...). W ostateczności w liniach...
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.
W Reference Manual, w rozdziale o GPIO i AFIO (zakładam, że mówimy o STM32F1) jest taki podrozdział o nazwie "JTAG/SWD alternate function remapping" i tam masz rozpiskę. Dla STM32F4 w rozdziałach o GPIO jest po prostu podany stan początkowy rejestrów odpowiedzialnych za tryb z uwzględnieniem tego, że dla niektórych portów stan początkowy będzie inny...
Osobiście programuję STM32F1/4 bezpośrednio na rejestrach, bez wykorzystania stlib. Z tym, że ostatnio przeglądałem forum na stronie STMa no i w zasadzie nie znalazłem tam nikogo kto wrzucał by kawałki kodu pisane na rejestrach, wszyscy używali stlib. Teraz pytanie, czy jest to spowodowane tym, że ludzie korzystający z stlib maja z nią większe problemy...
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!!
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 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...
rejestry atmega8 atmega128 rejestry mcp23017 rejestry
skuter kranik gaszenia przekaźnika uszkodzony pendrive
układ zapłonowy tyrystorowy regeneracja baterii laptopowych
Schemat elektryczny wciągarki MAR-POL M80790 – opis, kolory przewodów, typowe usterki Cat5 vs Cat6 Ethernet Cable: Bandwidth, Data Rate, PoE, Installation Differences