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...
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)...
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 wyszukiwarce wpisz "stm32 eeprom emulation".
Jeżeli nie zainicjujesz pola ADC_init_structure.ADC_ExternalTrigConv to będą tam śmieci, a potem te śmieci wpiszesz do rejestrów ADC.
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....
Dostać można tam gdzie jest alle prawie wszystko:) Wpisz: TFT LCD 2.2" ILI9341 ARDUINO STM32 Raspberry
A upewniłeś się co zawiera tablica Buf od elementu od indeksu 3 do 5 i czy chcesz wpisać poprawny format danych??
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...
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!!
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
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?
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 ?
Tak, służy to poprawie czytelności. http://obrazki.elektroda.pl/6341161600_1... Jak widać lepiej wpisać np. (3<<6) niż (1<<7)|(1<<6).
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?
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...
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.
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?
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.
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...
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...
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...
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?
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...
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) /*!<...
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...
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...
Witam, Skonfigurowałem Timer3 w trybie Encoder Interface Mode. Działa poprawnie. Chciałbym aby wartość aktualnej pozycji, czyli rejestr CNT był kopiowany poprzez DMA do jednej ze zmiennych. Nie jestem tylko pewien, z którego strumienia powinienem skorzystać. http://obrazki.elektroda.pl/8264553200_1... W ogóle chyba nie za bardzo rozumiem...
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;...
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...
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"....
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ć?
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łą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?
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ć...
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.
Z drugiej jednak strony naprawdę nie widzę tej wielkiej komplikacji przed którą się tak bronisz. Ot wpisanie zer do dwóch czy trzech rejestrów aby zresetować ustawienia zegara, a zresetowanie wszystkich układów peryferyjnych w STM32 jest równie banalne - wpisać 0xffffffff do wszystkich rejestrów typu RCC->...RSTR, a następnie wpisać tam zero. Wiem że...
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?
To wartość Max tez jest generalnie "od czapki" wpisana, bo właśnie przetestowałem na 36 i 45MHz w obydwu przypadkach szumy są większe ale nie odbiegają od siebie znacząco. Jest za to różnica pomiędzy 30 i 36MHz jest widoczna od razu. Widoczna jest tez różnica pomiędzy poszczególnymi egz procesora - ale jest b.mała jak się dokręci do 45MHz
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...
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 ?
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
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:...
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...
Trochę namieszałem ale wydaje mi się, że jest tak (dwa przypadki): 1) Wpisanie w dowolnym miejscu programu It is asynchronously reset by the POR (and not the system reset). It can be written by the debugger under system reset. /Edit 2) W uruchomionym programie nie mam wpisu zatrzymującego timer, ale poprzednio uruchomiony program go ustawił. Zegar zatrzymuje...
Tylko ta funkcja nic nie mówi w jaki sposób robię remap. Poza tym jest jeszcze taka rzecz do której (nie wiem czy słusznie) doszedłem. Mianowicie chodzi o to, że to nie jest remapowanie pinów, funkcja np SPI1_MOSI jest wpisana jako jedna z AF dla pinów PA7 PB5, zauważyłem że wszystkie z 3 interesujących mnie pinów SPI są wpisane w pinach od PA i te...
Spróbuję coś na tym obecnym zrobić i jak nie będzie wychodziło to pomyślę nad innym czujnikiem, np tym LSM303DLC) jeśli przekonujecie, że taki dobry:) Mam jeszcze tylko jedno pytanie do nsvinc. W jaki sposób podajesz subaddress gdy coś odczytujesz z jakiegoś układu. Bo przecież oprócz adresu układu trzeba jeszcze podać miejsce z którego rozpocząć odczyt....
Rzeczywiście przeoczyłem to. Do testów miałem wpisaną wartość 0xFFFF, a pisząc posta zmieniłem na 4096, ale zapomniałem usunąć 0x. W każdym razie licznik działa już tak jakbym sobie tego życzył. Póki co ustawiłem wartość ARR na 10000, co powoduje wywołanie przerwania od przepełnienia co około 2 sekundy w moim urządzeniu (zwiększam lub zmniejszam w nim...
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.
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...
Ja mogę dorzucić swoją mapę gdzie używam iar_cortexM4lf_math: Tutaj to już nie za bardzo mogę to zinterpretować. Skoro mamy tutaj bibliotekę statyczną, może ktoś to potwierdzić, że dobrze to nazywam :), to w niej, w module "common_tables.o" powinny już wszystkie tablice być "wpisane". Można podejrzeć arm_common_tables.c w bibliotece CMSIS, a tam są...
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 Od niedawna zabieram sie za poznanie i2c. Przyznam że sprawia mi ono troche kołopotu. Drodzy forumowicze chciałbym się zapytać odnośnie jednej sprawy, którą znalazłem w książce "STM32 w praktyce". Mianowicie chodzi o poniższy fragment kodu. Posiadam urządzenie o adresie >7bitow i mam problem. W ww. ksiązce zastosowano fragment: http://obrazki.elektroda.pl/2479773100_1...
Witam Masz na mysli High Speed? Raczej nie bo napisałem Full Speed czyli do 12 Mbit/s. High Speed z zewnętrznym PHY. Projektu USB raczej nie dam bo pisałem go długo, bo ten od Stm mi się nie podobał, ale mogę pomóc. Z ich bibliotek możesz uruchomić HS, ja tak zaczynałem ustawiasz tylko w pliku (chyba) usb_conf.h [syntax=cpp]#define USE_USB_OTG_HS #define...
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...
W turtorialu polecany i jako jedyne wyjście jest zaprezentowany Code Sourcery. Jednak teraz freedi poleca inny kompilator a mianowicie bleeding-edge-toolchain. Do pobrania stąd http://www.freddiechopin.info/pl/downloa... który obsługuje miedzy innymi Cortexa M4 No wiem czy ja specjalnie go polecam (; Generalnie polecam...
Witam, Tak się składa, że mam kit STM32F4Discovery i mogłem na nim przetestować to DMA, z którym Grzegorz ma problem. Udało mi się uruchomić transmisję. Sprawdziłem to dla UART2 i UART3. Działa też na wszystkich kanałach i strumieniach, jakie są przypisane do poszczególnych UARTów. Problemem chyba było włączanie i wyłączanie wszystkiego w odpowiedniej...
więc muszę to zrobić w czasie trwania pętli do wysyłania dekodera ? kiedy wysyłam buffor2 tablicę to musze zapełniać buffor3 ? kiedy wysłam buffor3 musze zapelniac buffor 2 ? po prostu nie wiem jak mam to zapełniać w tej pętli stopniowo przesuwać bajty w tablicy do której zapisuje. bo jak zrobię f_read w taki sposób to wpisze mi co pętle kolejne 4000....
Dziękuje za odpowiedzi niestety to nie koniec wątpliwości i pytań. Zgodnie z instrukcją odnośnie zakładki -debugger- remote target "Drugim parametrem który należy zmienić w tej zakładce jest numer portu za pomocą którego GDB będzie komunikował się ze sprzętem - w przypadku OpenOCD standardowo jest to port o numerze 3333." U mnie domyślnie jest TCPIP...
Z początku miałem clk/64 i tak by w sumie wystarczyło. To co zostało clk/2 to efekt prób. Na każdej częstotliwości uC zachowuje się tak samo. Edit: Jeszcze raz dla pewności sprawdziłem z Fpckl/8, niestety bez zmian. Teraz próbuję wpisać do rejestru DR kolejno trzy wartości, następnie odczytać rejestr. Wartość z rejestru odczytana przez debugger w komentarzach:...
Twoje problemy rozwiązałby jakiś TMS320 z serii C2000. Ale to tylko moje dywagacje. Jeśli chodzi o STM32F4 to musisz przemyśleć czy rzeczywiście 4 MHz jest niezbędne dla ADC. Kiedyś bawiłem się timerami w Keil'u więc kod wstępny na pewno Ci się przyda (kanały timera3 działają na GPIO->C6-C9): odznacz NVIC_EnableIRQ !!! ): [syntax=c]void TIM3_IRQHandler(void)...
I2C1->CR2 = 0x0000; //resetowanie rejestru Nie prościej po prostu do rejestru wpisać stosowną wartość zamiast najpierw go resetować, a potem używać litanii operacji typu "|="? I2C1->DR = LIS3DSH_Addr; //Do wyslania adres rejestru I2C1->DR &= 0xFFFE; //Zapisuje DO akcelerometru, wiec bit kierunku = 0 Jak dla mnie każdy zapis do rejestru DR powoduje...
Witam. Chciałbym prześledzić działanie pewnej funkcji, jednak debugger ciągle wskakuje w procedurę obsługi przerwania void TIM17_IRQHandler() . Próbowałem zablokować tim17 poprzez wpisanie: DBGMCU->APB2FZ|=DBGMCU_APB2_FZ_DBG_TIM17... jednak rejestr APB2FZ pozostaje bez zmian. W RM znalazłem na ten temat jedynie: [syntax=rm]The register is asynchronously...
Zgadza się, dla: PSC = 41999; ARR = 999; dioda jest 500ms ON i 500ms OFF. Ale już dla: PSC = 83999; ARR = 999; nie ma sekwencji 1s ON i 1s OFF. Dioda wtedy mruga zdecydowanie szybciej. Sekwencję 1s ON i 1s OFF udało mi się jedynie uzyskać dla: PSC = 41999; ARR = 1999; I jeszcze jedna ważna rzecz, teraz dopiero zauważyłem warning podczas kompilacji,...
Okej, zatem spróbujmy przystosować bibliotekę, którą mi podlinkowałeś do moich ćwiczeń ;-) Skopiowałem pliki EVE.h, EVE_commands.c, EVE_commands.h, EVE_config.h, EVE_target.c, EVE_target.h do odpowiednich folderów w projekcie. Teraz tak: W pliku EVE_target.h trzeba wybrać i włączyć jedną z konfiguracji. Jeśli dobrze myślę to mnie interesuje ta konfiguracja,tak?...
Wpisywałem tam różne cuda i nic, w końcu dałem ścieżkę do toolchaina na początek zmiennej PATH i ruszyło Musi działać jeśli skonfigurujesz tak jak jest na stackoverflow i jeśli toolchain jest dodany do PATH. CDT GCC Build Output Parser dalej nie zwraca nic Ten parser zapewne ustawiłeś na "file", więc jeśli chcesz zobaczyć co "sparsował", to musisz...
jedyną zagadką dla mnie jest dzielenie VCO przez 9 dla zegara 48MHz Chodzi o ustawienie tego dzielnika tak, aby nigdy nie było tam więcej niż owe 48MHz (to max wartość dozwolona dla tej szyny) - przy najszybszym zegarze wewnętrznym PLLa (432MHz) podział przez 9 daje właśnie 48MHz. Zegary ustawiane są dobrze (choć można to trochę prościej zrobić) Oczywiście...
Wysyłasz (zapis do DR) ale nie czekasz na koniec operacji. Ewentualnie, nie sprawdzasz przed wpisaniem do DR czy możesz to zrobić.
1. Nie ma wątpliwości, że układ wykonuje komendę Soft_Reset już w pierwszym podejściu. Jeżeli ktoś miał problemy i kilka razy próbował resetować układ, to tylko ze względu na brak umiejętności czytania. Czas realizacji operacji Soft_Reset to 5ms. I nigdy, ale to nigdy nie zdarzyło mi się, aby układ się nie zresetował. To co piszesz, to zwykły zabobon....
Pierwsze pytanie (jeszcze nie dotyczące bootloadera ale pobliskie temu. Pamięć FLASH w STM32F4 jest 32 bitowa? 16? 64? Nie mogę znaleźć jasnej odpowiedzi na to pytanie w reference manualu. Jest coś takiego w rejestrze FLASH_CR jak PSIZE. Gdzie deklaruje się jakieś zapisywanie, że niby uzupełnia się wolną przestrzeń wielokrotnością tego co wpisałem....
Więc tak : Tak, korzystam z stm32f4discovery Najpierw chciałem odpalić symulator w Keil 4.7. Dostaję błąd : *** error 65: access violation at 0x0000000C : no 'read' permission i tak dalej. W google znalazłem ten problem i rozwiązanie. Odpowiednio zastosowałem rozwiązanie dla mojego przypadku. Utworzyłem plik.ini w którym wpisałem : MAP 0x8000000,...
Mnie właśnie przydałby się sam scheduler, bo koncepcja działania peryferiów często bardzo zależy od użytego układu i samego projektu. Może powinieneś rozdzielić ten projekt na dwa, jeden to czysty scheduler i drugi projekt to cały system który z kolei jest oparty o ten pierwszy projekt. Zauważ, że im bardziej rozbudowany będzie ten projekt, tym trudniej...
Znasz błędy? - a skąd? nie znam i nie muszę. Wystarczy zrobić kalibrację już na podstawie odczytów z ADC i wzorcowego termometru. Patrz błąd MCP1525, dryft temp. WO. patrzyłem, przeliczyłem i wyszło mi na szybko, że prąd będzie skakać w bardzo niewielkim zakresie. Jutro jeszcze dokładnie postaram się przeliczyć błędy które mogę/umiem. Samego wzmacniacza...
Freddie miałeś racje po dodani kodu włączającego zegar wewnętrzny ruszyło [syntax=c] //Wlaczenie HSI, wpisanie wartosci 1 RCC->CR |= RCC_CR_HSION; //czekanie na ustabilizowanie sie sygnalu HSI //do momentu az flaga zostanie ustawiona while(!(RCC->CR & RCC_CR_HSIRDY)); //Zresetowanie wartosci rejestru RCC_CFGR //automatycznie zostaje wybrany zegar systemowy...
Tak, korzystałem z Cube. Rozumiem że w tym jest problem?:) Mam nadzieje, że wystarczająco opisałem dany problem w razie czego udzielę wszystkich możliwych informacji. Kręcę się już w okół tego tematu ponad tydzień. Aktualnie po paru zmianach(odczyt z pomocą DMA), program się nie zapętla. Niestety dalej otrzymuję tą flagę w rejestrze STA bit 9(reserved)...
Musiałem na pewien czas odłożyć problem, jednak teraz powrócił. Dziękuję za wszystkie odpowiedzi. W dalszym ciągu nie udało mi się rozwiązać do końca problemu. Jaką wartość mam wpisać do rejestrów TIM1->CCR4 i TIM8->CCR2 aby pomiar ADC wykonywać dokładnie w wierzchołku trójkąta tzn. połowie zliczania timera (0-ARR ARR-0). Chodzi mi dokładnie o to, że...
Hej. Pacjent to STM32F401VCT6 taktowany domyślnym zegarem wewnętrznym 16MHz. Uruchomiłem sensor HC-SR04 wykorzystując TIM2 do zliczania długości impulsu ECHO wykorzystując tryb capture oraz DMA. Do rejestru TIM2->PSC ładuje 15, ponieważ chcę aby wartość CNT inkrementowała się co 1us. Kod źródłowy poniżej: [syntax=c] #include "stm32f4xx.h" static...
Mam 3 czujniki typu MEMS podłączone do szyny i2c. Szyna jest podciągana przez rezystory 10k. Problemem jest to, że na 99 na 100 przypadków transmisja na i2c nr 2 w stm32f407 się zawiesza po wpisaniu flagi START. Flaga BUSY w SR2 jest ustawiona przed ustawienieniem START więc program czeka i czeka... Próbowałem już z 5 różnych kodów i ich kombinacji...
[syntax=c]HAL_StatusTypeDef HAL_I2C_Mem_Write(I2C_HandleTypeDef * hi2c, uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, uint8_t * pData, uint16_t Size, uint32_t Timeout ) [/syntax] MemAddress ma długość 2 bajty dla Twojego eepromu, a Ty dalej podajesz jako parametr MemAddSize wartość 1. Stąd jedyne co wysyłasz to jeden bajt adresu - 0,...
Nie chciałem zakładać nowego tematu bo wiem z doświadczenia, że jest to męczące dla zaawansowanych użytkowników i sprawia problemy w późniejszym szukaniu. Otóż. Posiadana przeze mnie płytka to nie Discovery, ale Nucleo F429ZI. niestety jestem początkujący ;( a za zadanie dostałem opracowanie połączenia LAN za pomocą socketów w układzie kompuer PC <->...
Jak już rzutujesz rejestr DR, to proponuję rzutować na właściwy typ. A właściwym typem jest _VOLATILE_ uint8_t*. W przeciwnym wypadku kompilator może sobie w sumie zrobić co chce, np. zauważyć że skoro przed chwilą wpisałeś tam zero, to po co odczytywać coś z tego adresu skoro pewnie jest tam zero? Tak czy siak jedna i druga funkcja jest słaba, ponieważ...
Wymienione niżej zasady mają na celu ułatwienia korzystania z działu zarówno piszącym, jaki czytającym wpisy. Są także pomocą w zrozumieniu zastosowania regulaminu całego forum w tym dziale. Bardzo sobie cenimy zarówno wkład merytoryczny, jak i kulturę osobistą użytkowników. Zasady pisania postów wraz z nawiązaniem do punktów regulaminu : Pisząc posty...
Tak mam teraz wpisane i wyskakuje mi błąd jak zamieściłem powyżej.
a czy da się to zrobić w bibliotece SPL? Zadam złośliwe pytanie - a czy da się sprawdzić w dokumentacji tej biblioteki albo w jej kodzie źródłowym? Przecież na pewno będzie szybciej niż pytać o to na forum, zwłaszcza że SPL jest już martwe i teraz ludzie albo używają HALa albo rejestrów. Zresztą - wystarczyłoby pewnie otworzyć odpowiedni plik nagłówkowy,...
Potrzebuję wygenerować trzy sygnały do sterowania rejestrem: 1MHz, impulsy co 64. okres z 1MHz i podobnie 128. Mniej więcej wyglada to tak: __ __ __ __ __ __ __ __ __ | |__| |__| |__| |__| |__| |__| |__| |__| |__ 1MHz __ __ | |__<-- przez 64 okresy poziom niski -->| |__ __ __ | |__<-- przez 128 okresy poziom niski -->| |__ Wykorzystałem...
Wpisz do wnętrza pętli while(timer_cnt!=0); np. 'mruganie' portem żeby mieć pewność, że właśnie tam program się wykonuje.
No ok, ale problem leży w tym, że nie mogę wpisać nic pod adres 0x00000000. Więc nie mogę wpisać nic do Flasha. STLink Utility samo odczytuje typ procesora po podłączeniu i wybiera go dobrze, z tym że pisze "Flash size: unknown"
Do funkcji f_mount() należy podać ścieżkę (stringa), a nie cyfrę. Proponuję tam wpisać po prostu: fresult = f_mount(&fatfs, "", 1);
Hmm, widzę że chyba muszę rozwinąć trochę temat, albo raczej zamienić go w dyskusję niż poszukiwanie pomocy. Co do wpisywania adresu skoku +1- nawet chyba dokumentacja STMa (programming manual) pisze że ostatni bit adresu przy komendzie skoku musi być 1, a sam sprzęt zamienia go na 0 przed wpisaniem do PC. Nawet jak się przegląda kod assamblerowy, zawartość...
Inne niezupełnie optymalne rozwiązanie: tryb PWM, włączyć preload rejestrów CCRx, zapisać do nich 0, wywołać update i dopiero wpisać żądane wartości. Przy następnym zdarzeniu update licznik zacznie generować impuls; od tej chwili aż do zrównania CNT z ARR mamy czas na ponowne wpisanie zer do rejestrów CCRx (w przerwaniu lub przez DMA). Zalety to możliwość...
Cortex to nie AVR z instrukcjami CBI SBI. Wszystko z &= i |= jest robione jako odczyt modyfikacja i zapis. Kilka razy patrząc na twój kod. Chcesz tak robić rób to przez tempa, a najlepiej wpisać wartość właściwą z nawet jeśli coś było ustawione nadpisać. Co do rzeczy ma jak ja wpisuję dane do rejestrów ? W F4 mam podobnie to zrobione i działa doskonale....
A ja czekam na program, w którym ptaszkami pozaznaczam interesujące mnie ustawienia, a on wygeneruje konkretne wartości rejestrów i wpisze w tworzony kod. Z operowaniem na rejestrach wewnątrz programu poradzę już sobie sam. P. S. Jeśli ktoś wpadnie na poradę typu "zrób to sam" to odpowiem "nie chce mi się".
A czy nie lepiej ustawiać zabezpieczenia z poziomu aplikacji "ST-Link Utility"? Po definitywnym zakończeniu programowania uruchomić aplikację i zabezpieczyć procesor? to wiem. Myślałem że da sie wpisać kilka linijek kodu i będzie to działać zawsze i wszedzie ( w sensie ta blokada).
Jeśli do zmiennej timer_cnt wpiszesz 1 na 5 instrukcji przed wystąpieniem przerwania, to... wiadomo jaki będzie efekt. Ta funkcja generalnie daje oczekiwanie NIE DŁUŻSZE NIŻ parametr, ale może być ono krótsze o max 1 jednostkę. Dla parametru 1 daje to więc całkiem spory błąd. 4\/3!!
To się dyskusja rozwinęła... ;) Jeżeli chodzi o debuggery, to puki co, osobiście nie jestem wstanie odpowiedzieć nic. Nie mam porównania, bo jeszcze nie miałem okazji skorzystać z freeware, bo puki co jeszcze mi się nie udało tego tak pospinać żeby działało ;) Jakoś w przypadku Eclipse dla AVR uporałem się z tym i kompiluje mi bez błędów, środowisku...
Ale nie każdy od 0. Ja np. bardzo rzadko. Bo mi się po prostu nie chce. Dobrą metoda na znalezienie przykładów w internecie jest wpisywanie do wyszukania nazw rejestrów. Wpisywanie tekstów w stylu "STM32 code UART" przynosi efekty w postaci znalezienia kodów na bibliotekach od STMa. Czyli nie to co byśmy chcieli. Ale jak się wpisze "STM32 USART1->CR1"...
wpisanie kluczyka wpisanie akumulatora wpisanie tabelki
drukarka laserowy awaria przewód lodówki samochodowej samsung uszkodzone ladowania
chinskie radio android chinskie radio android
Wybór kabla do wideodomofonu i bramy automatycznej Uszkodzony kondensator C7817 w zasilaczu DPS-162KP B