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...
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.
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...
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...
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.
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?
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...
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...
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.
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...
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...
Chyba trzeba jeszcze wykonać update, czyli przepisać wartości z rejestru tymczasowego do rejestru sprzętowego. TIM2->EGR = TIM_EGR_UG;
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.
Hmm no to chyba tak mam. Nie wpisuje nic do rejestru PUPDR.
Nie znam przykładów Freddiego ale poszukam. http://www.elektroda.pl/rtvforum/topic13... Najbliższy STM32F3 będzie przykład dla STM32F4.
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...
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, 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.
Zmieniłem oprogramowanie, ruszyło. Zamykam!
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!!
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_...
[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...
A dlaczego nie spróbujesz operować bezpośrednio 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...
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...
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ć...
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?
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.
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.
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ą....
Biblioteki czy plików nagłówkowych? Jak to drugie to: - www.st.com - Products → Microcontrollers → STM32 32-bit ARM Cortex MCUS → STM32F4 Series → STM32F407 - (po lewo) Software → STM32Cube -> (w nowo otwartym oknie) STM32CubeF4 - (na samym dole) Get Software → Download - w rozpakowanym archiwum: Drivers → CMSIS...
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ą...
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...
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....
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...
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.
Tylko najpierw sprawdź jaka jest maksymalna wartość rejestru IWDG->RLR (Reload register) i czy aby na pewno wartość 10000 się tam mieści.
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.
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 znajdę gdzieś jakieś przykłady jak to użyć bez SPL? Dodano po 8 No widzę tą tablicę w stm32f4xx_dma.h, i definicje ustawień itd... no sporo tego trzeba wpisać żeby uruchomić. I po wywołaniu tablicy DMA natychmiast startuje? Pewnie tak.
Ustalasz to programowo przy pomocy wyboru odpowiedniej funkcji alternatywnej dla pinu - poszukaj rejestrów Alternate Function w rozdziale o GPIO. 4\/3!!
To samo można powiedzieć o programowaniu obiektowym (czyli w naszym świecie mikrokontrolerów o C++) 4\/3!! Ostatnio tak spoglądam "łakomym okiem" na C++ - czy mi się dobrze zdaje, że kod napisany w tym języku jest jeszcze łatwiej "przenaszalny" niż pisany w C? (myślę o tym w kontekście pracy raz na procesorach typu PIC32, a raz ARM - póki co kod daje...
/* 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!!
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.
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...
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.
A ktoś korzystał z tego akcelerometru lub bardzo podobnego? Jestem ciekawy jak konfigurujecie rejestry, i jak odczytujecie przyspieszenie.
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...
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
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.
Mnie się wydaje, że musisz włączyć jeszcze bity SSM i SSI w rejestrze konfiguracyjnym SPI... 4\/3!!
Tu - I2C1->CR2 |= 0x0002;
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).
PLLN trzeba ustawić na 8 i działa jak należy.
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...
Witam, od dłuższego czasu walczę z tym problemem i nie potrafię znaleźć rozwiązania. Mam projekt, który pochodzi z anglojęzycznego tutoriala: [url=http://www.mind-dump.net/configurin... Wrzucony do Keila i skompilowany działa jak powinien. Problem w tym, że próbuję przenieść go na wykorzystanie bibliotek HAL, z których...
Witam wszystkich! Przeszukałem forum i niestety nie znalazłem tematu rozwiązującego mój problem. Próbuję uruchomić interfejs CAN na STM32F4DISCOVERY w ramach pracy nad konwerterem USB -> CAN. Część związaną z obsługą interfejsu USB mam już za sobą ;). Oto kod odpowiedzialny za konfigurację CAN: CAN_TransmitStatus . W efekcie zawsze otrzymuję: CAN_GetFlagStatus_Pending...
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,...
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 ?
Próbuję zrobić odtwarzacz plików wave i mam problem z owym kodekiem bo nie wiem czy dobrze go skonfigurowałem i czy trzeba coś ustawiać w rejestrach kodeka. Moja ustawienia I2S: [syntax=c]RCC->APB1ENR |= RCC_APB1ENR_SPI3EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN | RCC_AHB1ENR_GPIOCEN; // I2S - MCK(PC7), SCK(PC10), SD(PC12) GPIOC->MODER |= GPIO_MODER_MODER7_1...
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.
Do debugowania używam GDB Hardware debuging z CodeSourcery. Wtyczka ta nie ma nic wspólnego z toolchainem który wymieniłeś. Do kompilacji używałem różnych Tool Chain między innym: Yagarto, Corss GCC, ARM Windows GCC... No to używałeś CodeSourcery czy nie? Po zaimportowaniu projektu, nawet bez kompilacji co dziwne wyskakuje 30 błędów dotyczących jednej...
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.......
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?
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.
Jeszcze tylko jedno pytanie. Skąd DMA zna adres rejestru? Przecież w konfiguracji podaję tylko adres DRa...
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.
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...
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.
(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...
Nadal nie mogę znaleźć błędu. Nie chce korzystać z tego typu biblioteki. 1. Po co się ustawia NSS , bo nie rozumiem tego chyba ? 2. Czy do PE3 dać pull_down pullup? 3. SCK w idle chyba powinno być =1 a w tej wyżej bibotece =0; 4. Co robie źle? Proszę o pomoc:) ROZWIĄZANIE: Podczas pobierania danych , trzeba wysłać też dane aby zegar chodził: uint8_t...
Na Rys. 4 widnieje przebieg napięcia pomiędzy bramka a źródłem przy włączaniu tranzystora. W moim przypadku jest to napięcie na nóżce, czyli pomiędzy źródłem górnego a drenem dolnego tranzystora. Pin został skonfigurowany jako Open Dren czyli steruje się tylko dolnym tranzystorem. Gdy wpisuje jedynkę do rejestru wyjściowego, to wyłącza się dolny tranzystor,...
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...).
(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....
Pierwsza rzecz to ponowna próba odbezpieczenia "obszaru opcji" powoduje u mnie lądowanie w HardFault. Piszę o tym: [syntax=c] FLASH->OPTKEYR = 0x08192A3B; FLASH->OPTKEYR = 0x4C5D6E7F; while( FLASH -> SR & FLASH_SR_BSY ) {}; -> FLASH->KEYR = 0x08192A3B; -> FLASH->KEYR = 0x4C5D6E7F; -> while( FLASH -> SR & FLASH_SR_BSY ) {}; [/syntax] Po drugie po co...
A ustawiłeś odpowiednio rejestr AFRL dla gpio? uC musi wiedzieć do czego podłączyć pin.
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.
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...
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...
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...
(at)Sareph dzięki za wytłumaczenie. btw. Co to RDP? Procek po wyczyszczeniu (zwierając fizycznie reset) , przechodzę do debugowania w atollicu. Brak komunikatu o jakimkolwiek błędzie. Przed pętlą główną programu jeden breakpoint. Program jakby się zacina i powraca do breakpoita za każdym razem jak go odstartuję. Co więcej tylko rejestr MODER zostaje...
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...
Ż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...
[syntax=c]CanRxAdres1 = hcan.Instance->sFIFOMailBox[0].RIR>>21; CanRxDana1 = hcan.Instance->sFIFOMailBox[0].RDLR;[/sy... Ja odczytuję bezpośrednio z rejestru.
Dzięki m.ki za zainteresowanie! Tak, zdaję sobie sprawę, że fizyczny transfer danych następuje w obie strony jednocześnie, a funkcje, których używam nie robią nic dużo bardziej mądrego niż zapis i odczyt rejestru DR w SPI1. To jednak nie tłumaczy braku odebranych danych... Właśnie zrobiłem test polegający na uruchomieniu dokładnie tego samego programu...
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...
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,...
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ź...
wgrywanie stm32f4 stm32f4 przetwornik stm32f4 discovery
zamiast funbox przejściówka optyczny cinch modyfikacja windowsa
saeco granaroma energia bierna indukcyjna kompensacja
TV SHARP - brak przycisku Input na pilocie Aquos Uchwyt tarcz tnących Schneider/Berlinett CM5100