Proponuję profilaktycznie wyłączać DMA przez wpisanie 0 do CR (zamiast kasowania jednego bitu) i uruchamiać przez wpisanie kompletnej wartości (jak w pierwszym fragmencie - zamiast ustawiania jednego bitu). 4\/3!!
Ja chciałbym z kolei zadać pytanie nowicjusza. Zapis GPIOA->OTYPER|=(1<<8); oznacza wpisanie do rejestru jedynki na pozycję ósmą. Używa się do konfiguracji/ustawiania bitów w rejestrach itp. Natomiast zapis GPIOA->MODER|=(2<<16); oznacza wpisanie jedynki na pozycję 17, czy tak? Dlaczego (2<<16) a nie (1<<17)? albo dlaczego...
Wyświetlacz TFT ILI9341 na SPI, podpięty do płytki STM32F4Discovery (SPI1). Działa przy wyłączonej PLL (przy 8 MHz), przy włączonej 168MHz nie działa. Jakiekolwiek wartości wpisane do bitów BR w CR1 powodują że wyświetlacz przestaje działać nawet przy 8 MHz. Inicjalizacja SPI: [syntax=c] RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; SPI1->CR1 = SPI_CR1_SSM |...
z tego co widzę to mam pod main.c podpięte stm32f4xx_gpio.h http://obrazki.elektroda.pl/1100622000_1... Wpisanie do kodu [syntax=c]#include "stm32f4xx_gpio.h"[/syntax] Nic nie zmieniło Dodaję jeszcze kod z main.h [syntax=c] /** ****************************************... * (at)file main.h * (at)author...
Witam, RTC taktowany jest z LSE. Inicjalizacja przebiega pomyślnie,RTC działa poprawnia. Funkcją GetTime mogę bez problemu odczytać aktualny czas. Problem polega na jego aktualizacji. Cel to wpisanie RTC danych wysłanych po USB. Oto kod: [syntax=c] if (Buf[0] == 'R' && Buf[1] == 'T' && Buf[2] == 'C') { RTC_TimeTypeDef RTC_TimeStructureUSB; char error;...
http://obrazki.elektroda.pl/4155164900_1... Witam wszystkich Tym razem chciałbym zaprezentować jeszcze programowy projekt radioodbiornika internetowego. Prezentowany projekt jest rozszerzeniem przedstawionego wcześniej projektu odtwarzacza i dyktafonu na STM32F407VG. Połączenie z Internetem zapewnia moduł WiFi WF121-A (internal antenna)...
Cześć, Mam problem z inicjalizacją macierzy przy wykorzystaniu biblioteki CMSIS podczas pisania programu dla Cortex M4. Postępuje według algorytmów opisanych na stronie producenta (dokładniej - zakładka - Matrix Initialization): http://tech.munts.com/MCU/Frameworks/ARM...
Wspomniałeś jeszcze o bibliotece DSP od ST. Mógłbyś coś więcej o niej? Jak byś dysponował linkiem do najbardziej przyzwoitej wersji było by super. (Nie to, że nie chce mi się szukać ale wiadomo jak to się szuka na stronie ST, wyższa filozofia) No tak! Kto by pomyślał, że wystarczy podaną przeze mnie stronę przewinąć trochę w dół i ściągnąć: STM32F4DISCOVERY...
A ile to jest MAX_X * MAX_Y? Nie ponad 0xFFFF czasem? Tak o te 20%? A jak wpiszesz do NTDR 0xFFFF, to wypełni tą część ekranu poniżej tych 20% (wiem, nie sumuje się z 90% do 100%, ale może to przybliżone rachunki). Pozdrowienia, m.ki
Wartość HSE to wartość częstotliwości kwarcu jaki masz podłączony do MCU. Najczęściej jest to 8MHz i takowy też jest na płytce Discovery dla STM32F4. Wartość ta jest domyślnie zdefiniowana w pliku stm32f4xx.h na 8MHz. stm32f4xx.h musisz tą częstotliwość zdefiniować: HSE_VALUE=25000000
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....
W wyszukiwarce wpisz "stm32 eeprom emulation".
Hard Fault to szeroki temat. Mi się wydaje że najczęstszą przyczyną jego wystąpienia to próba dostępu do nie istniejącego obszaru pamięci. Przykładowo gdy chcesz coś czytać lub pisać do adresu 0x00000000. Bywa tak gdy działamy na wskaźnikach i nie zainicjujemy wskaźnika i pod ten wskaźnik chcemy coś wpisać.
Właśśnie.. A ja tylko dwie flagi sprawdzam: TXE przed wpisaniem danych do rejestru DR oraz RXNE przed odczytaniem DR - oczekiwanie końca transmisji. P.S. Uzyskałeś transmisję? Próbowałeś czyścić FIFO?
Jeżeli nie zainicjujesz pola ADC_init_structure.ADC_ExternalTrigConv to będą tam śmieci, a potem te śmieci wpiszesz do rejestrów ADC.
Nie masz wektorów - jak widzisz prawie same zera. To teraz otwórz sobie RM-a albo DS-a swojego układu i znajdź na jaką pozycję wpisac nazwę Twojego handlera
Na przykład otwieramy manual na stronie, gdzie znajduje się opis rejestru MODER i czytamy, co oznacza jaka wartość pola bitowego w tym rejestrze - co trzeba wpisać, żeby dana linia portu była przypisana do peryferiala (np. UART), a nie do GPIO. Przed zapisem do MODER ustawiamy dla odpowiednich linii portu funkcje RX i TX odpowiedniego UARTa w rejestrze...
Ustawienia programatora są dobre? Próbowałeś zmniejszyć prędkość SWCLK? Jak wpisałem komunikat błędu w google znalazłem kilka postów. Próbowałeś metod opisanych w tamtych tematach?
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 ?
Dzięki za schemat widziałem jakieś na chińskich stronach, ale mi się nie udało tego ściągnąć, bez logowania. Jeśli chodzi o JTAG to jeśli udałoby się go uruchomić to mógłby być przydatny. Ale też na początek prostsze może wydawać się przetestowanie tego SERDB po I2C po pinach UARTU, który też daje dostęp do rejestrów RIU. Więc możnaby je monitorować...
OpenOCD nie ma w tej chwili nic do rzeczy. Na pewno zainstalowałeś toolchain od Linaro? Używasz komendy cs-make, a z tego co pamiętam to jest to komenda dla pakietu z codesourcery. Co pojawia Ci się, jeżeli wywołasz okno wiersza poleceń i wpiszesz: arm-none-eabi-gcc --version
Okazało się że wujek ma oryginalne PS2, pojechałem, sprawdziłem. Pad jest sprawny, działa bez problemu. Zastanawiają mnie te 2 linijki, które ktoś wpisał na STM32F4 Discovery: [syntax=c]while(SPI_I2S_GetFlagStatus(SP... SPI_FLAG_TXE) == RESET){} while (SPI_I2S_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET){}[/syntax] Próbowałem w taki sposób: [syntax=c]while(__HAL_SPI_GET_FLAG(&hspi...
Zrobiłem wszystko według instrukcji i dalej błąd: 21:44:53 **** Incremental Build of configuration Default for project stm32f4_blink_led **** make all Cannot run program "make": Nie mo?na odnale?? okre?lonego pliku 21:44:53 Build Finished (took 63ms) Jeśli otworzę konsolę i wpiszę make to normalnie sie uruchamia...
Okej, dokształciłem się na temat UL, rozumiem gdzie błąd był. Jaka jest w takim razie optymalna metoda wpisywania wartości? Wyznaczyć wartość całego rejestru i wpisać np. AFR[0]=0x001B; Przesuwać jedynki w odpowiednie miejsca np. AFR[0] = 1<<2 | 1<<5 | 1<<6; Czy jeszcze jakaś inna metoda?
Jedyne co w nich zmieniłem to nazwa projektu (inaczej sobie nazwałem) No i właśnie dlatego ich nie widziałeś (; ukośnik w drugą stronę w ścieżce dostępu do .elf (z / na \) Faktycznie w projekcie jest z backslashem - muszę pamiętać żeby to kiedyś poprawić (; ścieżkę do gdb Nie masz dodanych tych plików do systemowego PATH że musiałeś tam coś zmieniać...
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.
Witam ponownie po dłuższej przerwie. Przed świętami ponownie zabrałem się do "programu" i mimo iż zastosowałem się do rady by dokładniej czytać RM, mam kłopot z ARR. Żeby zobrazować: Powiedzmy, że programik zmieniam sekwencje świecenia diod (przy pomocy switch) zmiana wyzwalana przerwaniem, a szybkość zmiany regulowana wartością ARR. z menu na lcd wybieram...
Witam, mam pewien problem z płytką STM32F4 - Discovery. Pracowałem pod CooCoxem, programy się wgrywały, wszystko śmigało jak należy. Niestety przez przypadek, głupi błąd i moją głupotę wpisałem coś takiego: [syntax=c]GPIOA->MODER |= GPIO_MODER_MODER13_0;[/syntax] co oznacza, że przestawiłem pin odpowiedzialny za programowanie przez SWD na output. Obecnie...
Dziękuję za odpowiedź. Wpatrywałem się w tę funkcję dużo razy, ale takiego szczegółu nie zauważyłem:P Już poprawiłem na P. Niestety ta "literówka" nie rozwiązała mojego problemu. Co mam jeszcze sprawdzić, pokazać jakiś inny fragment kodu? Co do konfiguracji I2C to ta funkcja to wnętrze biblioteki SPL tylko o takim wyglądzie. Przyznam, że za bardzo nie...
W niższych procesorkach (STM32F1xx) były rejestry BKP, w tych z Cortex M4 jest BKP_SRAM i mam kłopot z zapisem wartości do tego obszaru. Mam w tej chwili tak: [syntax=c] uint8_t *ram = (uint8_t *) 0x40024000; int main(void) { --- --- RCC->AHB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_DBP; RCC->AHB1ENR |= RCC_AHB1ENR_BKPSRAMEN; FLASH->OPTCR &= 0xFFFF00FF;...
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.
Tego też próbowałem. Tyle że jak dam po to wszystkie wczesniej wpisane wartości do rejestrów zostały wyzerowane. Nie mogę dać włączenie przez wpisaniem ustawień, bo nie które rejestry nie mogą być zmieniane po włączeniu. Walcze nadal i teraz bawie się czasami, ale nadal to samo;/ Dodam, że na STM32F1 mi to działało.
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...
Najpierw zegar który wybierzesz (HSE - zewnętrzny lub HSI - wewnętrzny ) Jest dzielony przez współczynnik PLLM. I na wyjściu Częstotliwość ma się mieścić w zakresie 1-2MHz zalecane jest 2. Następnie sygnał ładuje się do VCO i jest mnożony razy współczynnik PLLN (może nie wyrażam się stricte fachowo ale upraszczam) . Sygnał wyjściowy z VCO ma sie mieścić...
W czasie inicjalizacji jest wybierany rodzaj interfejsu i faktycznie jest to RGB. Ale samo kontrolowanie wyświetlacza odbywa się przez SPI i przez niego można bezpośrednio do GRAM wpisywać dane. Ale wszystkie wyświetlacze TFT z jakimi się spotkałem po poprawnej inicjalizacji wyświetlały szum (losowa wartość pamięci GRAM) po czym można było się przekonać...
Włączyłeś zegar dla RTC w RCC? Wyłączyłeś zabezpieczenie przed dostępem do rejestrów RTC w PWR? Odblokowałeś poprawnie dostęp do rejestrów RTC przez wpisanie odpowiedniego klucza?
Bez tej górnej linijki też nie działa a nic innego mi do głowy nie przychodzi co tu może być źle. Dodano po 27 Znalazłem problem. Dzięki wielkie za zainteresowanie. Problemem była jednak konfiguracja zegarów tak jak czułem ale nie doczytałem i z niewiedzy nie zrobiłem konfiguracji poprawnie. Nie zedytowałem linijki HSE_VALUE ((uint32_t)8000000) /*!<...
Jak już mówiłem wolałbym kod w HALu, ponieważ dopiero zaczynam i w pisaniu na rejestrach jeszcze mam problemy. Doczytałem, że należy do rejestrów wpisać: PWR_CR.DBP = 1; RTC_WPR = 0xCA; RTC_WPR = 0x53; RTC_ISR.INIT = 1; następnie zapis czasu i daty do RTC_TR RTC_DR i zakończenie: RTC_WPR = 0xFF; Jakoś tak?
Niestety trochę za bardzo skrótowo to opisałeś. Za dużo z tego nie zrozumiałem. Zainstalowałem wtyczkę: GDB Hardware Debugging. Wszedłem w: "External Tools Configurations" i tam wpisałem: Location: "C:\OpenOCD-0.6.1\bin-x64\openocd-x64-0.... Arguments: "-f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg", kliknąłem Run. I co teraz mam zrobić?
Czy te 3 możliwości są sobie równe pod względem czasów wykonania? Każdy z nich polega na wpisaniu wartości pod adres, więc czemu czas wykonania miałby być inny? Jeśli bym chciał przełączać wyprowadzenie z maksymalną częstotliwością miało by znaczenie jakiej techniki użyje? Pomijając fakt, że to co chciałbyś robić byłoby zupełnie bezsensu, to patrz...
Witam, kolegów mógł bym prosić o sprawdzenie kodu chciał bym rozkręcić procek do 180mhz ale chyba coś robię nie tak wszelkie sugestie mile widziane [syntax=c] RCC->CR |= (uint32_t)0x00000001; //Wlaczenie HSI, wpisanie wartosci 1 while(!(RCC->CR & (uint32_t)0x00000002)); //czekanie na ustabilizowanie sie sygnalu HSI do momentu az flaga zostanie ustawiona...
0x20000000 to decymalnie jak dobrze liczę 524.288 nie 112. Nie za bardzo to rozumiem jaką w końcu wartość powinienem wpisać , a może zostawić domyślnie tą z Keila. Jeszcze takie pytanie jak korzystać w trybie debugowania z opcji " Debug(printf) Viewer " Jakoś trzeba przekierować opcje printf z uarta ?
To że musisz negować niektóre składowe może wynikać z orientacji sensorów na PCB. A co do algorytmu Mahony/Madgwick...po pierwsze musisz się upewnić że dane do filtru mają poprawny format tz. przyśpieszenie w "g", żyroskop w "dps", magnetometr w " uT". Następnie upewnij się że dane mają poprawny znak np. przyśpieszenie w osi Z ma 1g a jak obrócisz to...
Miałem problem, bo spodziewałem się, że po wpisaniu BKP-> zostaną wyświetlone podpowiedzi rejestrów. Tymczasem są one w RTC->BKP2R. Właśnie odkryłem skrót ctrl + spacja, moje życie jest odmienione. Ostatecznie całość działa, czym jestem mile zaskoczony. Dzięki za pomoc i zmuszenie do pracy na rejestrach :) Satysfakcja z tak stworzonego programu jest...
Ja widzę dwie metody: 1. opędzić to C++ i szablonami. Ale zajmie od groma miejsca a i naklepać trzeba się będzie sporo. I nie mam pomysłu "na już" jak to ugryźć implementacyjnie. 2. to będzie w runtime'ie a nie compile-time'ie, ale zadziała: stabelaryzować sobie adresy peryferiów, ISRów itd. i wtedy jazda z koksem. Wady: a. runtime b. nadal sporo klepania...
Witam, Jestem w trakcie przenoszenia jednego mojego projektu pod Twój Rtos... (na testy). Powiem tak jedyny problem jaki mam (pewnie dla Ciebie jest blachy) to żeby używać np include stm32f429xx.h lub core_cm4.h to dodałem je jeszcze raz (skopiowałem z CMSIS do folderu gdzie ich używam ). To mi się tylko nie podoba bo mam teraz dwa razy te same hadery...
Zacznijmy od tego, że w celu wpisania czegokolwiek do SPI3 NAJPIERW trzeba włączyć moduł w APB1ENR. Na rejestrach BRR i BSRR nie wykonuje się operacji logicznych, bo nie ma to żadnego sensu. Po prostu zapisz maskę bitową do BRR w celu wyzerowania bitu, a do BSRR w celu ustawienia na 1. Po co zerujesz bit DFF?
Litości, ludziska. Tzw. "emulacja EEPROM we Flash" jest tak starą i znaną rzeczą, że naprawdę nie ma co wałkować. Tu na forum też temat wraca z raz na 2 miesiące, z linkami do rozwiązań i not aplikacyjnych. Praktycznie we wszystkich moich ARMowych projektach mam parametry zapisywane do Flash na b. różne sposoby, często jet to klasyczna "emulacja EEPROM"....
Może spróbuj zrobić bufor RAM całego obszaru, najpierw wczytaj cały obrazek, potem cały wpisz. Dodano po 5 Pojawiły się takie żółte pasy i czarne piksele gdzie nie gdzie. Może problem z timingami odczyt/zapis? Zwolnij zegar i zobacz czy dalej są te pasy i piksele.
Przecież Ty nie czytasz co ja piszę :) W trybie M2M: When the stream is enabled by setting the Enable bit (EN) in the DMA_SxCR register, the stream immediately starts to fill the FIFO up to the threshold level. When the threshold level is reached, the FIFO contents are drained and stored into the destination. The transfer stops once the DMA_SxNDTR register...
Przerobiłem podaną przez Ciebie funkcję bo nie mam odpowiedniej biblioteki na zastosowane skróty, usunąłem także bufor - narazie chcę wysłać 1 bajt. Opisałem komentarzami funkcję inicjującą I2C. Niestety dalej się zapętla - będę próbował jeszcze podłączyć coś innego. Póki co proszę o sprawdzenie poprawności kodu i ew. wskazanie błędu. Funkcja inicjująca:...
wpisanie kluczyka wpisanie akumulatora wpisanie tabelki
ricoh reset bębna scania schemat regulacja regulacja instalacja lovato
schemat magnetowid panasonic interfejs opcom
Audi A3 ABS świeci – diagnostyka elektroniki, typowe usterki MK60, G201, czujniki kół MAN LE 8.140 1A NBF Signal Fault – VP44/EDC7 Injector Coil Diagnosis