jeśli chodzi o inne przerwania od układów peryferyjnych to poza ustawieniem rejestrów tego układu muszę włączyć to przerwanie i czy tu wystarczy funkcja z core_cm3 np. NVIC_EnableIRQ( RTC_IRQn ); tak I dlaczego nie musiałem włączyć globalnych przerwań żeby SysTick działał?;] Przerwanie SysTick jest w grupie exceptions, ich się nie da wyłączyć w NVIC....
Już ktoś wyżej pokazał. Operacja &= wymaga wykonania przez procesor min. 3 instrukcji, które w C można symbolicznie zapisać jako: t = SR; t &= maska; SR = t; Jeżeli po pierwszej z tych operacji timer ustawi inny znacznik przerwania w SR, to trzecia z nich skasuje go (oprócz tego znacznika, który miała skasować). Dokładnie to samo zrobi bitbanding, tyle,...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
We wcześniejszym wątku - [url=http://www.elektroda.pl/rtvforum/to... Co na początek ? zamieściłem program napisany (wsad do LPCXpresso) w asemblerze na twój układ który korzystał z tego timera i dokładnie był każdy fragment kodu opisany - co robi i jaki ma cel i był opis rejestr po rejestrze - opis tych fragmentów...
1. Możesz zrobić przy pomocy usart: a) korzystając z multiplexera (gotowego lub cpld) b) przesiąść się na pic z remapowaniem peryferiów 2.Możesz zrobić przy pomocy timera. Jakie widzisz przeciwskazania że pytasz? 3. Możesz zrobić jak pisze Freddie. 4. Możesz zrobić normalnie na delayach. W końcu stm32 ma tyle mocy obliczeniowej, że nie ma czym się przejmować...
Zawsze można po przerwaniu DMA odpalić timer i poczekać na jego przerwanie i tam przestawić stan linii, to rozwiązanie ma taką przewagę nad delayem, że nie blokuje programu.
Na pierwszy rzut oka w Twoim kodzie, jak i u autora, nie ma żadnej manipulacji trybem wyjścia portu - pinu. Po wrzuceniu tego na STM32F722RE okazuje się, że nie ma to znaczenia. Przy ustawieniu trybu pinu na wyjście z open drain, odczytanie rejestru IDR daje poprawne działanie, bez zmiany trybu na wejście. Sprawdziłem to na porcie A i pinie PA0. Nie...
Zapomniałeś tylko dopisać, że ustawiłeś samodzielnie bit UDIS w rejestrze CR1 timera, który właśnie coś takiego powoduje. Nie wiadomo jednak po co go ustawiłeś. Nie potwierdzam, nie zaprzeczam ale faktem jest, że obecnie nie ustawiam bitu UIDS w rejestrze CR1 i bez ustawienia bitu UG w rejestrze EGR preskaler nie działa poprawnie. Poniżej kod jakim...
Jakim cudem zmiany kodu wykonywanego w pętli głównej mogą mieć wpływ na działanie tego co jest przed nią ?! Może jest coś wspólnego np. funkcja delay_ms() jest także wykorzystywana przed pętlą główną? ;) A jak wygląda delay_ms(): zwykła pętla for czy użyłeś timera?
Mógłby ktoś rzucić okien na mój kod funkcji delay. Siedzę nad tym od paru godzin i nie mogę znaleźć błędu. Timer jest 2 razy szybszy nić powinien być. Używam TIM6, skonfigurowanego do ustawiania flagi przerwania przy overflow, ale nie obsługuję tego w przerwaniu tylko w funkcji delay sprawdzam, kiedy flaga zostanie ustawiona. Do prescalera wstawiam...
Dlaczego nie może być po prostu tak: W pętli głównej sprawdzasz polling-iem czy przycisk jest na zero (bez żadnych przerwań), jeśli jest na zero, to wtedy robisz disable Timera, który Ci steruje tym miganiem diody, ustawiasz bit diody na zero - nie świeci. Jeśli jest na jeden to włączasz timer ponownie i tyle. (bo jeśli w przerwaniu od timera masz toogle...
Jeśli oba mają preemption 0 (a domyślnie wszystkie przerwania tak mają, chyba, że w STM32 jest inaczej niż wszędzie), to nikt nikogo nie może wywłaszczyć. Serdeczne dzięki za wytłumaczenie jak działa mechanizm priorytetów NVIC. Z tego rozumiem, że można zdefiniować maksymalnie 16 przerwań , które mogą się wzajemnie wywłaszczać (grupa 4) ? Subpriorytet...
Czasami trzeba przeczekać na coś ileś tam czasu ale po co marnować go w delay? Jakie mamy alternatywy i jak z nich korzystać? Timery, przy czym mogą to być programowe timery zrealizowane w przerwaniu np 1ms. kolejna sprawa to "podział" czasu procesora na dwa zadania. Jak sensownie to wykonywać? Oczywiście nie chcę tu mieszać do tego RTOS'a. Najłatwiej...
Nie rozumiem konfiguracji timera w Twoim delay'u i dlaczego prescaler jest ustawiany co wywołanie, także chyba odpuszczę. Poza tym w timerach jestem zielony ;) Natomiast znalazłem coś takiego, prostego na google, zmodyfikowałem i działa: [syntax=c] // Oryginalny kod: http://www.stm32circle.com/forum/viewtop... #define SYS_CLK 24000000 /*...
Nie sądzę, by jakikolwiek projekt dał się sensownie zrobić bez przerwania timera, więc testowanie obecności pastylki można zrobić w tym przerwaniu. Z drugiej strony kod obsługi OneWire z delay() nie nadaje się do użycia w projekcie, w którym są przerwania, więC proponuję zrobić od nowa obsługę OW. Przykład na F0 masz w niedawnej EP.
Dzięki pomocy jednego z forumowiczy ( dziękuję mrh :) ), udało się ustalić, że przyczyną problemów komunikacyjnych z ds18b20 są źle skonfigurowane opóźnienia. Opóźnienia chciałem zrealizować na jednym z timerów 2-5 w trybie one pulse mode. Niestety nie udało mi się do tej pory znaleźć błędu, więc proszę o pomoc w walce z opóźnieniami. Zamieszczam kod...
Systick i delay_ms sa w jednym module main.c Postaram sie go okroic do minimum, nie mam teraz kodu pod reka aby cos wkleic.
Przepraszam za mało fachowe wytłumaczenie. Chciałbym stworzyć sobie funkcję która pozwoli tak jak osDelay(); odmierzać kawałki czasowe ale w us a nie ms jak systemowy delay. Dokładność odmierzania nie jest tu kluczowa kluczowe jest nie zajmowanie czasu procesora w czasie oczekiwania. Tak jak to robi osDelay(); Dokładność opóźnienia powinna...
Aby ruszyć z czymkolwiek muszę opanować ręcznie odpalane DMA, nawet w przerwaniu kosztem oczekiwania aż wszystko zostanie przepisane. Do testów skonfigurowałem Timer co 5m w którym mam coś takiego. [syntax=c] void TIM2_IRQHandler() { //przerwanie co 5ms if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_ResetBits(P10_PORT,...
... delayadc nie jest po to aby czekać na koniec konwersji, po za tym co to ma wspólnego z moim pytaniem? ... Timer uruchomiłbym chyba dla ozdoby;) Ano może mieć. Jaką masz gwarancję, że tak napisane delayadc w ogóle zajmuje jakiś czas procesora? Zwłaszcza, że zmienna k nie jest volatile, a to oznacza, że takie cudo: [syntax=c] { k++; k--; } [/syntax]...
Witam Zbudowałem tester wysokiego napięcia który został zamieszczony na tej stronie... https://www.printables.com/pl/model/3471... Układ działa tzn wyświetla jednak na wyjściu B0 nie mam sygnału PWM. Sprawdzane na trzech różnych STM32...
Wyłączenie optymalizacji to będzie raczej ficzer kompilatora, nie języka. W GCC jest jakiś atrybut, który pozwala zdefiniować poziom optymalizacji dla konkretnej funkcji - coś w stylu NOP does nothing. NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage. Please note that...
Co do samego programu to co racja to racja. Można było wykorzystać licznik, który dałby większą dokładność, ale to nie było istotą problemu. Koledze chodziło o skorzystanie z timera w celu zmniejszenia poboru prądu przez to twoje urządzenie. Mikrokontroler powinien cały czas spać, bo nic nie robi, do tego powinien chodzić na jakimś niskim zegarze....
Chciałbym podzielić się swoim tworem DS18B20 + STM32F4 Discovery po niecałych 2 miesiącach obcowania z poradnikiem. Zaczynając od zera jeśli chodzi o znajomość mikrokontrolerów z podstawową znajomością C. [syntax=c]#include "stm32f407xx.h" void delay(uint16_t time) { TIM2->CNT = 1; while (TIM2->CNT<= time); } static void reset (void) { GPIOB->MODER...
Ogólnie rzecz biorąc udało mi się skonfigurować buttona tak, żeby działał na przerwaniach i timerze. Ale coś zaś musiałem fundamentalnego skopać i wywala HardFault. Tym razem nie mogę uruchomić SysTicka. [syntax=c]int main(void) { volatile uint32_t count, count_max = 1000000; system_init(); pll_start(CRYSTAL, FREQUENCY); SysTick_CLKSourceConfig(SysTick_CLKSourc...
Faktycznie, rozwiązanie kwestii działania SPI było dosyć proste i po sprawdzeniu - SPI działa. Odczytuję zapisany wcześniej rejestr poprawnie. Teraz mam inny problem. Poniżej zamieszczam program z pliku main.c, w którym są dodane miejsca wysyłania kolejnych numerów przez UART i program zatrzymuje mi się po wysłaniu numeru 88. Nic więcej się nie dzieje,...
Hej, Zrobiłem podejście z timerem, polegające na tym, że w przerwaniu DMA TC, uruchamiałem timer, który po chwili miał zrobić latcha. [syntax=c] // DMA1 channel 3 transfer completed void DMA1_Channel3_IRQHandler(void) { //* Clear the DMA tranfser complete interrupt bit DMA_IT_TC3*/ DMA1->IFCR = DMA1_IT_TC3; // start timer to generate delayed latch TIM_SetCompare1(TIM1,...
Po kilku godzinach program odpaliłem ..... podświetlanie się załącza dopiero po naciśnięciu kilka razy klawisza, monitor pokazuje start i numery naciśnietych klawiszy i to nie za każdym naciśnięciem. nie wiem jak "zatrzymać" dany ekran menu żeby zrealizować inna funkcje np; zmiana stanu wyjścia /* * sterownik który wykończy mnie i innych ..............
Witam, mam problem z komunikacją po 1-Wire, termometr DS18S20 odpowiada mi na sygnał reset jednak nie wysyła danych, odczytuje cały czas z magistrali 0xFF. - Termometr działa na 100% - mam inną płytkę z ATmegą 32 w której go sprawdzam - i tam działa wszystko bez problemowo, Oto kluczowe fragmenty mojego kodu: [syntax=cpp] #define SYS_CLK 8000000 //...
Witam. Mam pewien problem. Mianowicie - napisałem program który generuje sygnał 100kHz o wypełnieniu 50%. Kod wygląda tak : https://obrazki.elektroda.pl/9658314300_... Czyli po prostu mniejsze wypełnienie. Z moich wyliczeń wynika, że stan wysoki musi trwać 344 cykli zegara, a stan niski 18. Czy jest jakiś sposób aby timer wyzwalał przerwania...
(at)Freddie Chopin Tak jak wcześniej pisałem miałem uruchomiony projekt - obsługę ethernet na STM32f407 gdzie main wyglądał tak: [syntax=c] /** ****************************************... * (at)file main.c * (at)author MCD Application Team, EvertDekker * (at)version V1.1.0 * (at)date 14-September-2014 * (at)brief...
Witam. Wygenerowałem kod w STM32CubeIDE. Problem polega na tym, że gdy debuguje go, to mogę swobodnie przechodzić krok po kroku do kolejnych instrukcji programu. Po wyłączeniu debugowania w celu pozwolenia mikrokontrolerowi działać swobodnie, ten nie chce działać. Znalazłem tako oto radę dotyczącą SysTicka: "You have to be very carefull when using HAL_Delay(),...
Witam Wysyłam przykładowe ramki z terminala do STM32 przez driver MAX3485 i cały czas sypie mi błędami w odpowiedziach. Nie mam też pewności czy to co wysyłam z terminala do STM32 dociera bez błędów. Poniżej fragment kodu oraz zrzut ekranu. Powinienem otrzymać to co wysyłam. Czarny kolor to odebrane ramki. Proszę o pomoc http://obrazki.elektroda.pl/7456669500_1...
SysTick jest chyba najprostszy, jedna linijka kodu aby 'zapuścić'. Obsługa przerwania SysTick nie wymaga niczego - żadnego kasowania flag itp. dlatego w prostych projektach jest najczęściej używany jako timer delaya. Nie wymaga także skomplikowanych obliczeń - tylko zegar, podział przez 8 lub brak podziału, podział przez wartość odliczania - i koniec....
Witam Mam pewien problem z urządzeniem do pomiaru masy (tj. waga ;)), które będzie wysyłało mierzoną wartość po CANie do innego urządzenia. W załączniku jest schemat płytki. Mój problem polega na tym, że odczyt pomiaru lata jak szalony, ale jest cykliczny. Wyrzucając sobie przez rs232 debugujące dane wartości wysyłane przez adc różnią się od siebie...
Poza tym Zrobienie takiego man-in-the-middle, może być trudniejsze niż się na początku wydaje, a atiny nie jest też demonem prędkości, a nie ma sprzętowego licznika do obsługi enkoderów. Co ty opowiadasz... Mamy enkoder, który generuje max kilka impulsów na sekundę i to ma być problem? No, niby tak, ale robienie man-in-the-middle z attiny i enkodera...
Tak czytając ten fragment odniosłem wrażenie że omawiasz opóźnienie związane z reakcją na przerwanie, a nie na reakcje samego wątku. Chodzi o opóźnienie reakcji na "zdarzenie odblokowujące wątek". Przykładowo wątek A czeka na semafor, wiec jest w stanie "zablokowanym". Teraz następuje zdarzenie - semafor zostaje "ustawiony" (przez przerwanie lub przez...
Wiesz co ja dopiero zaczynam z programowaniem stm ale jedna sprawa rzuciła mnie się w oczy. twoja funkcja jest prawie funkcją z biblioteki której definicja i rozwinięcie znajduje się w pliku core_cm4.h [syntax=c] __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) { if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible...
Witam, prosiłbym bym o pomoc, żeby ktoś wytłumaczył, albo podał przykład jak skonfigurować przerwania zewnętrzne w tym mikrokontrolerze bo walczę z tym i nic mi nie wychodzi i zaczynam podejrzewać, że to procek jest zepsuty, albo tej sztuki jeszcze nie opanowałem :D na początku pisałem własne kody, ale po nieudanych próbach w końcu wkleiłem gotowca,...
Z detektora zera sieci dostaje sygnał jak na obrazku niżej. http://obrazki.elektroda.pl/1251410700_1... Kwarc 8MHz, po PLL 24MHz. No i mam między innymi [syntax=c]NVIC_SetPriorityGrouping(3); NVIC_SetPriority(ADC1_2_IRQn, NVIC_EncodePriority(3, 2, 0)); NVIC_SetPriority(EXTI9_5_IRQn, NVIC_EncodePriority(3, 3, 0)); NVIC_SetPriority(TIM4_IRQn,...
Podczas kolejnego dnia walki orżnąłem kod praktycznie ze wszystkiego. Doprowadziłem do sytuacji odwrotnej - by działał 2 kanał PWM dla TIM1 należy zainicjalizować TIM3! W dodatku, zmiana wartości delay() w main również powoduje zaprzestanie działania PWM (podobnie jak wyłączenie TIM3). Kompletnie nie wiem, co robię źle. Wymieniłem już nawet uC na egzemplarz...
Witam Mam następującą konfiguracje : https://obrazki.elektroda.pl/9301426500_... Dla Timera2 jest APB1 i jak widać jest ustawiony na 84MHz zatem TIM2 ustawiam tak : https://obrazki.elektroda.pl/8953606600_... Ustawienie ma służyć dla funkcji opóźnienia w µs z krokiem co 1µs. Realizowane jest to w następujący...
Witam, mam problem z komunikacją z czujnikiem ciśnienia HP02S. Szukałem swojego problemu na forum, ale nie znalazłem. Udało mi się bez problemu odczytać dane z EEPROMu. Udało mi się też skomunikować z czujnikiem, ale do czasu. Sekwencja odczytu ciśnienia wygląda następująco (pseudokod): [syntax=c] i2c_start(); i2c_write(0xEE); i2c_write(0xFF); i2c_write(0xF0);...
z wersją klasyczną też nie będzie problemów jeśli nie będzie korzystać się z żadnych delay'ów. Co to znaczy? Przecież obsługa 1-wire wymaga w miarę dokładnych opóźnień. Miałem zamiar napisać funkcje delay oparte na timerach. To jak mam "rozmawiać" z DS18B20 bez delay-ów?
W zasadzie to program jest taki sam jak w pierwszym poście załącze jeszcze raz: [syntax=c] #include <stdint.h> #include "inc/stm32l053xx.h" #include "config.h" #include "hdr/hdr_syscon.h" /* +=======================================... | module variables +=======================================...
(at)Pawel_1985 Jeżeli już blokujesz to po Ci te wszystkie przerwania etc etc. Zakładając jeden tick na µsek [syntax=c]void delay_us(unsigned delay) { //uint32_t start = TIM1 -> CNT; //dla 32 bitowego timera uint16_t start = TIM1 -> CNT; //dla 16 bitowego timera while(TIM1 -> CNT - start < delay); //while((uint16_t)(TIM1 -> CNT -...
Na szybko udało mi się uruchomić i usłyszeć jakieś dźwięki. na początek bez obsługi karty pamięci, próbkę dźwięku wrzuciłem na sztywno do tablicy. Niestety nie mam źródła tej próbki i nie mogę porównać tego co słyszę z oryginałem (znalazłem coś w internecie). A słyszę it's working oraz przydźwięk :( Na szybko też nie bawiłem się w ustawianie drugiego...
Witam. Postanowiłem zgłębić tajniki mikrokontrolerów STM32. Wybór padł na procesor STM32F3 Discovery. Mam problem z poniższym kodem. Jest to przykład działania przetwornika ADC. Problem polega na tym, że nie wiem dlaczego to nie działa. Uruchamiam debugger, biorę krokową pracę, a program w zasadzie zatrzymuje się na linii ADC1ConvertedVoltage jest równa...
Witam serdecznie. Jak poradzić sobie z SysTickiem i przerwaniem, ponieważ po kompilacji środowisko zwraca taki błąd: [syntax=bash]D:\workspaceAtolic\Cortexy\... multiple definition of `SysTick_Handler' src\main.o:D:\workspaceAtolic\Cortexy\De... first defined here [/syntax] [syntax=c] #include "stm32f10x.h"...
Wszystkie są bardzo pamięciożerne i generują masę nadmiarowego kodu. Działać - działają Czy dla STM, czy dla AVR, arduinowe biblioteki są beznadziejne i nie trzeba się tym przejmować, przynajmniej Arduinowcy się nie przejmują. Jak widać na przykładzie AVR, czy 1 cykl ale z DMA nie skorzystamy. Po co w Arduino DMA? Amatorom się nigdzie nie spieszy,...
Mam dosyć nietypową prośbę. Potrzebowałbym plik bin który ustawia i resetuje pin PA3 co 500ms. Niestety albo ja czegoś nie doczytałem albo to "coś" nie jest napisane: Z PLL wychodzi 64Mhz (kwarc 16Mhz) void RCC_Configuration(void) { ErrorStatus HSEStartUpStatus; //RCC system reset(for debug purpose) RCC_DeInit(); //Enable...
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Spora szansa, że problemem są priorytety przerwań. We FreeRTOS (w sumie w większości RTOSów) przerwanie które używa funkcji systemu musi mieć priorytet niższy lub równy wartości którą sobie skonfigurowałeś jako progowa w pliku FreeRTOSConfig.h. Ponieważ zwykle w tym pliku jest to skonfigurowane tak głupio, że nie wiadomo nigdy o co chodzi, na szybko...
Witam, Próbuje uruchomić wyświetlacz oparty o ILI9341 z wykorzystaniem SPI. Wyświetlacz sprawdzałem pod Arduino i działa, jest sprawny. Próbuję podpiąć go do STM32F407ZET6. SPI działa, widać że są przesyłane dane na oscyloskopie. Zaczerpnąłem procedurę inicjalizacji wyświetlacza z Adafruit dla Arduino ale wyświetlacz jak był biały tak jest po wgraniu...
Witam, chciałem wykorzystać kartę microSD do odczytu obrazków w projekcie zawierającym wyświetlacz LCD, natomiast pojawił się pewien problem z funkcją f_open() w FatFs. Podczas testowania program gładko przechodzi f_mount() zwracając FR_OK, natomiast wykrzacza się przy f_open() zwracając błąd FR_NOT_READY. Przeczytałem zarówno na forum jak i w czeluściach...
Witam! Chciałem sobie zrobić prosty Counter zliczający ilość wciśnięć przycisku podpiętego do wejścia PA0. Skorzystałem z przykładu który zamieszczam poniżej. Niestety mój prosty Counter nie zlicza naciśnięć i zmienna cnt cały czas wynosi 0. Mam takie podejrzenie że przycisk nie jest programowo połączony z TIM2 tzn w funkcja TIM_TIxExternalClockConfig(TIM2,...
Witam, Korzystam z tego kodu: [syntax=c]#include "main.h" #include "stm32f3_discovery.h" /** * (at)brief Initializes the putput pins for the Timer one channels. Currently * hard coded to drive the LED3 (channel 1), LED7 (channel 2), and * LED10 (channel 3) on the STM32F3 Discovery board. * (at)param pwm_freq: Frequency of the PWM in Hz * (at)retval...
Można timer zatrzymywać i startować po ustawieniu TIM3->CNT i time_ms. Ja także staram się zawsze mieć odpowiednią rozdzielczość argumentu, tak aby nie używać np. delay_us(3); ale delay_ns(3000); itp. dzięki temu błąd +- 1 nie ma znaczenia (poza czasami krytycznymi np. do pomiarów itp.).
No dobra. Nie jest źle :-) Po dłuższym procesie kombinowania oraz użerania się z nie do końca chcącym mnie słuchać µVisionem udało mi się spłodzić prawie działający kod. [syntax=c] #include "stm32f10x.h" //sprzet //diody LED #define LED_PORT GPIOB #define LED_PORT1 GPIOC #define LED_PORT_CLK RCC_APB2Periph_GPIOB #define LED_PORT1_CLK RCC_APB2Periph_GPIOC...
Staram się ustawić częstotliwość próbkowania ADC1 i ADC2 w trybie Regular simultaneous dual. ADC1 taktuję Timerem 2: [syntax=c]void timer2_init() // this timer is triger of ADC1 and ADC2 conversion { RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // APB2 clocked TIM1 by 45MHz TIM2->PSC = 0; // F TIM = 45MHz TIM2->ARR =45e6/Fp; // Fp= Ftim/val //TIM2->DIER...
Hej, staram sie właśnie skompilować ten kod (kod na końcu). Mój problem polega na tym, że nie rozumiem zachowania kompilatora. Informuje mnie on o błedzie: undefined reference to `EVAL_AUDIO_SetAudioInterface' gdy idę do linii widzę faktycznie komendę: if(EVAL_AUDIO_Init(OUTPUT_DEVICE_HEADPHO... vol, AudioFreq)!=0) problem w tym, że ona istnieje. A...
Procesor to konkretnie STM32F439IGT6. Mam taki kod w mainie: https://obrazki.elektroda.pl/2215514800_... A powinno być tak: https://obrazki.elektroda.pl/3426620100_... Najciekawsze wnioski są jednak po dodaniu tych linii: https://obrazki.elektroda.pl/6540612300_... A tu dla wersji która inicjalizuje...
Zmieniłem trochę w projekcie. Zastosowałem najnowszą wersję FatFS. Plik z konfiguracją funkcji zadeklarowanych diskio.h pobrałem ze [url=http://www.siwawi.arubi.uni-kl.de/a... strony i przerobiłem go by pasował do STM32L. Po testach objawy wyglądają tak: Karty 512MB i 16GB: porgram mniej...
Nie znam się na stm32, ale może uC nie jest taktowany częstotliwością 72 MHz, być może błędna inicjalizacja PLL. Nie uczy się tworzyć delay'ów na konstrukcjach for ponieważ nie wiadomo jaki kod asemblera wygeneruje kompilator. Opóźnienia tworzy się przy pomocy timera.
Cześć! Od jakiegoś czasu, po godzinach bawię się w dłubanie własnej libki HALowej z kilkoma dodatkami (obsługa konsoli z CLI, formatowanie stringów etc). Całość jest Open Source (licencja MIT) i na bardzo wczesnym etapie rozwoju w bardzo lekkim C++ (chociażby brak wyjątków). Tam gdzie się dało starałem się by błędy był wykrywane już na etapie kompilacji...
[url=http://stm32f4-discovery.com/2014/0... masz pokazaną zasadę działania 1wire z N DS18B20. Co prawda kod jest oparty na F4, jednak dużo różnic nie będzie w porównaniu z F1. Zawsze zamiast tworzenia swojego timera do delaya możesz skorzystać z SysTicka.
Witam, wyświetlacz pokazuje mi nieodpowiednie znaki na ekranie. Ośmio bitowy tryb wyświetla nieprawidłowe znaki(po wpisaniu jednego polecenia wyświetlają się dwa znaki) a cztero bitowy nie wyświetla nic. Trzeba jakoś ustawić taktowanie zegara? Używam ekspandera I2C PCF8574 czyli D4-D7 dane, D0-D3 rs,rw,en,led tak ? Orientuje się ktoś co robię źle? Jestem...
Próbuje zrobić obsługę przycisku w przerwaniu z funkcją eliminacji drgań. Problem polega na tym,że po odmierzeniu zadanego czasu przerwanie wywołuje się samo po raz drugi mimo że nie naciskam przycisku. Próbuję to zrobić tak, że gdy zmienna naciskany jest przycisk na PB3 to blokuje przerwania od tego wejścia, uruchamiam timer i gdy zmienna "delay" doliczy...
no już Ci to napisałem. jezeli chcesz robić prawdziwe delaye to zrób sobie przerwanie timera (czy systicka) i inkrementuj jakąś zmienną w znanym sobie okresie czasu. Jak chcesz napisać sobie taką blokująca funkcję delay - to raczej w asemblerze, czy też inline asemblerze, aby nie byc zależnym od kompilatora jezeli chodzi o długość iteracji i optymalizacje,.
No tak... ;) Mam jeszcze takie pytanie, napisałem ostatnio funkcję opóźnienia (delayus/delayms). Generalnie działa poprawnie, ale dzieje się jedna dziwna rzecz, której przyczyny nie mogę znaleźć. Opóźnienie zrobiłem z wykorzystaniem timera TIM2. Działa to tak, że gdy jest wywoływana funkcja delayus to włączany jest TIM2, wpisywana jest wartość do rejestru...
Może zacznę od opisu konfiguracji. Mam czujnik TSOP1736 podłączony do zasilania 5V, zaś jego wyjście do wejścia P0.16 mikrokontrolera LPC2148. Pozostałe połączenia (zasilanie, JTAG itp.) są OK, gdyż jest to zestaw ewaluacyjny Propoxu - EVBlpc213x\4x. Napisałem sobie bibliotekę do odbioru kodu RC5. Posiłkowałem się tą #include "lpc214x.h" #include...
Trochę to zajęło i powstała taka funkcja, która wydaję się działać tak jak zaplanowałem. Sprawdzona na urządzeniu i w debuggerze. void Beep(void){ TIM2->CCER &= 0x0000; TIM2->PSC = 0x05ff; // prescaler TIM2->CCMR1|= 0x0080; TIM2->CCER &= 0xFFFD; TIM2->CCER |= 0x0001; for (i=0;i<30;i++)i=i; // some delay...
Proszę o odpowiedź, ponieważ nie mam już pomysłów na możliwość rozwiązania. Pełno tego typu rozwiązań na elektrodzie. Odradzam na początku korzystania z przygłupawych funkcji typu delay_xx(). Marnujesz tylko cykle na niepotrzebne czekanie, milisekundy to wieczność dla tego STM32, szczególnie przy jego maksymalnym dostępnym zegarze. Mały hint: timer,...
Dobra, poradziłem sobie inaczej. Użyłem timera, ale nie korzystałem z przerwań, tylko ustawiłem częstotliwość inkrementacji timera na 1us i czekałem, aż wartość timera przekroczy zadany czas ;) Na potrzeby 1-wire wystarczyło :)
Witam, Założyłem tutaj konto ponieważ jest to prawdopodobnie największe forum elektroniczne w Polsce, a co za tym idzie zakładam, że znajduje się tutaj sporo specjalistów którzy mam nadzieje pomogą mi w pewnym problemie. Zaczynam dopiero swoją przygodę z układami STM32. Już mniej więcej wiem jak działają GPIO, timery jednak chciałbym już iść dalej....
To może wgraj oryginalną zawartość z Nucleo F411 jaka jest w nówkach na dzień dobry, by przynajmniej sprawdzić Nucleo plus ST-link. On tam miga i reaguje na przycisk może pamiętasz: No jest jakiś postęp chociaż nie wiem czy można to nazwać postępem. Wgrałem ten program, wyrzucił mi jakiś błąd elf loadera ale ostatecznie znalazł się w pamięci: Dodano...
Witam ponownie, Wracam tutaj z potrzebą skonsultowania pewnego problemu. Mianowicie po uruchomieniu USB postanowiłem dokładać kolejne bloki urządzenia i tak też pojawiła się obsługa DMA, ADC wyzwalanego timerem 2. No niestety projekt po kompilacji i wgraniu w ogóle nie działa :/ - Na terminalu otrzymuje 20 bajtów o wartości zero. Po zakomentowaniu prawie,...
Przycisk mode to zwykły przycisk podpięty do masy. Więc do zrobienia tego zadania wystarczy, żebyś ogarnął sterowanie GPIO. PC13 (przycisk MODE) ustawiasz jako Input, PC8 (dioda) ustawiasz jako Output i piszesz obsługę przyciska. Jeśli korzystasz z HALA to odczyt stanu na pinie to HAL_GPIO_ReadPin(port, pin), a ustawianie stanu na pinie HAL_GPIO_WritePin(port,...
Witam Opracowałem prosty program, żeby nauczyć się eliminować programowo drgania styków. Idea jest taka, że po starcie wyświetla się napis „Test0 „ po naciśnięciu przycisku „Test1” i „Test2”. Wykorzystałem rozwiązanie z przykładu 9.6 z książki K. Paprockiego, sam przykład po uruchomieniu działa prawidłowo, czyli zlicza...
Witam, muszę zaimplementować dekoder protokołu RC-5 z pilotów na podczerwień. Zamiast pisać wszystko od początku, postanowiłem skorzystać z gotowego kodu przeznaczonego dla jednej z płytek ewaluacyjnych STM'a - oto paczka z kodem biblioteki i przykładowym projektem http://www.st.com/internet/com/SOFTWARE_...
Jeszcze raz dziękuję za cenne rady i wskazówki:) szczególnie dla: m.ki BlueDraco nie omieszkam sprawdzić przykładów z EP jak mi wpadną w ręce. Żeby zostawić ślad i pokazać że nauka nie poszła w las wklejam kod z uruchomienia Timerów na porcie A plus diody znajdujące się na płytce(PC8, PC9). Sam szukałem kodu do sterowania tymi diodami z PWM, więc może...
Pozwoliłem sobie wykorzystać Twój kod ale potrzebuję zmianę na PE8. Na STM32F3 PE8 również jest pod TIM1, więc myślałem, że nie będzie problemu. Czy wie ktoś jak zamienić PC8 na PE8 lub ma inny kod? Kod, który używam to: [syntax=c] /* #includes ----------------------------------------... #include "main.h" //main library to include for device...
https://obrazki.elektroda.pl/4950580000_... Witajcie moi drodzy W tym temacie poznamy podstawy przerwań i timerów w PIC18F2550 . Na początek będzie krótki wstęp teoretyczny, a potem wszystko przerobimy dokładnie na praktycznych przykładach. Do lektury tematu przyda się ogólna wiedza na temat przerwań i programowania w C, choćby taka...
Jakieś dziwne zjawisko. Wszystko działało tz. w pętli pytałem urządzenie po modbusie a teraz jakieś dziwnie zachowanie . Tak jakby zawieszony procesor nic się nie wykonuje w pętli . Co może być przyczyną ? Całość poniżej : [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h"...
Witam, mam problem z termometrem DS18B20 gdyż nie chce mi odpowiadać na mój wysłany bit. Chodzi dokładnie o pierwszą funkcję sprawdzającą układ czyli o RESET. Z użyciem warunków presence zawsze wynosi 1, a aby działał poprawnie powinien posiadać wynik 2. Mój kod: [syntax=cpp] uint8_t Reset(void) { uint16_t presence=0; WireOff(); WZDelay::delay_us(480);...
Hmmm... U mnie ten projekt po rozpakowaniu się skompilował od razu, nawet nie otworzyłem Makefile żeby zobaczyć co w nim jest... [syntax=bash]>make Assembling file: startup.S arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m4 -mthumb -mfloat-abi=h ard -mfpu=fpv4-sp-d16 -ffast-math -g -ggdb3 -Wa,-amhls=out/startup.lst -DSTM32F 4XX -MD -MP -MF...
Od jakiegoś czasu zmagam się z problemem wysłania danych przez UART co określone chwile czasowe. Dokładnie chodzi o to iż jeśli wywołuje funkcje: void uart1WriteByte (t_int8u byte) { while (!(USART1->SR & USART_FLAG_TXE)); USART1->DR = byte; } w pętli głównej programu while(1) { uart1WriteByte(0x77);...
Hej. Jestem bardzo świeży w temacie mikrokontrolerów i od razu mam problem z taką błahostką jak odczyt danych z czujnika DHT11. Moje urządzenie to STM32L152RBT6, korzystam z znienawidzonych (sic!) tutaj bibliotek STM32L1xx_StdPeriph_Driver. Póki co chcę ich używać. Nie mam w zwyczaju pisać na żadnych forach ponieważ wolę wcześniej poszukać jednak tutaj...
2. Duża częstotliwość taktowania timera to wysoka rozdzielczość, ale czy też dokładność? Zakładam że jest tam PLL i jakiś wzorzec, od jego stabilności oraz pracy pętli będzie zależała wynikowa dokładność? HRTIM nie działa z taką wysoką częstotliwością, tylko z taką "częstotliwością ekwiwalentna", tam jest Delay-Locked Loop (DLL).
Witam. Posiadam wyświetlacz jak w tytule i chciałem uruchomić go na STM32 a dokładnie płytka to NUCLEO-F429ZI. Posiadam bibliotekę napisaną pod AVR na której działa owy wyświetlacz i chciałem ją przepisać na STM32. No ale niestety nie działa... Mógłby ktoś rzucić okiem, czy dobrze to zrobiłem? (chodzi o pliki s1d15710.c i s1d15710.h w pliku z S1D15710_STM32)....
[syntax=c] #include <stm32f4xx.h> #include <stm32f4xx_rcc.h> #include <stm32f4xx_exti.h> #include <stm32f4xx_tim.h> #include <stm32f4xx_gpio.h> #include <misc.h> GPIO_InitTypeDef display[8], power[4]; int digits[10] = {0x03, 0x9F, 0x25, 0x0D, 0x99, 0x49, 0x41, 0x1F, 0x01, 0x09}; unsigned int time = 0; void SysTick_Handler(){...
Ja potrzebuję przełączanie funkcji Master i Slave co ileś taktów - żeby raz pierwsze tranzystory były wiodącymi, a raz drugie. Myślę, że możesz uruchomić 4 lub 6 modułów i w dowolnej chwili, np. w reakcji na sygnał z komparatora lub przerwanie dołączać dowolną parę generatorów do wyjść sterujących tranzystorami, zachowując przy tym reżim czasowy względem...
1. Czy wartości cewki i kondensatora muszą być dobrane idealnie na tyle ile wyliczono, czy może wartości wyliczone są wartościami minimalnymi, a każda większa cewka czy kondensator to tylko lepiej - mniejsze tętnienia? Niestety nie znalazłem tak trywialnej odpowiedzi. Jak pamiętam to obliczasz wartości minimalne. Ale nie należy też przesadzać. 2. Jeśli...
Witam, mecze się z DS18B20. Naskrobałem poniższy kod ale wydaje się działać połowicznie. Ale po kolei, pierwsze co robię to ONE_WIRE_Init (), a potem ONE_WIRE_Read_Tmp(). I przy tej drogiej funkcji mam problem bo zwraca ona za każdym razem 0x0808 (jak by komendy nie zmienić zawsze tak samo, a nawet bez komend). ONE_WIRE_Init_Sequence() działa poprawnie...
Sprawdź co z [syntax=c] void delay(int time) { int i; for (i = 0; i < time * 4000; i++) {} } [/syntax] zrobił kompilator. Powinieneś użyć timera. Jeśli już robisz pętle opóźniającą rodem z AVR to [syntax=c] void delay(int time) { volatile int i; for (i = 0; i < time * 4000; i++) {} } [/syntax] nie wiedząc jednak co zrobi optymalizator, dałbym...
Otóż tutaj: [syntax=cpp] #include "stm32f10x.h" #include "delay.h" #include "uart.h" #include "bmp180.h" void GPIO_Config(void); void RCC_Config(void); void NVIC_Config(void); void ADC_Config(void); void TIM_Config(void); void DMA_Config(void); uint16_t buforAdc[1] = {0}; uint16_t tablica1[64]={0}; uint16_t tablica2[64]={0}; uint16_t bufor_cykl[64]={0};...
Czy się w to nie bawić i zrobić na delay_us? Ale czemu nas pytasz? Jeśli Twój kod ma robić cokolwiek poza kręceniem się w delayach raczej nie powinien ich używać (zbyt wiele), no nie? (; Mam dwa wolne UART ale są zarezerwowane na Wi-Fi i GSM, przy czym małe szanse, że oba te moduły będą zamontowane równocześnie, jeśli już to jeden z nich. Powiedzieć...
Witam ponownie, zacząłem niedawno zabawę z CANem, a raczej powinienem napisać, że chciałem zacząć. Jako, że ostatnio nie mam dostępu do auta postanowiłem pogadac z interfejsem ELM327. Tak więc podłączyłem CANL z CANL i CANH z CANH między płytką a interfejsem. Idea jest taka: wysyłam komendy do interfejsu przez usart1 a on wysyła do mnie odpowiedzi po...
Witam, mam taki problem. Walczę z obsługą karty SD na stm32f4 discovery. Niestety po wywołaniu funkcji f_open w najlepszym przypadku otrzymuję wynik FR_NOT_READY oczywiście bez względu na to czy karta jest czy jej nie ma. Załączam kod funkcji main oraz funkcje związane z spi. Kody są pobrane z forum, ja dopisałem jedynie obsługę SysTick do wywoływania...
delay timer timer delay stm32 delay
pojemnosc kondensatora napiecia usterka porsche spalanie seicento
rower elektryczny romet posnet thermal
Bezpiecznik sygnału cofania w Passacie B5 - numer 31 Podłączenie licznika Toyota Corolla 2005 na stole