Trzeba pewnie włączyć jeszcze globalne zezwolenie na przerwania, tylko nie mogę się tego doszukać w RM. Domyślnie przerwania są globalnie "odblokowane". W przeciwieństwie do poszczególnych przerwań, więc jest taka funkcja NVIC_EnableIRQ() czy jakoś tak. P.S.1. Nie musisz deklarować przerwania na górze, przed main(), bo i po co? P.S.2. W obsłudze przerwania...
Przejrzyj setkę wątków na forum poświęconych temu, dlaczego do przycisków nie uyżwa się przerwań portów, a potem zrób to w przerwaniu timera, np. tak, jak w tym artykule: http://ep.com.pl/files/10324.pdf Samo programowanie prtzerwania też masz ciut bez sensu - najpierw uruchamiasz przerwanie, potem programujesz linię portu, która ma je zgłaszać. Zanim...
[syntax=c]#define ONE_WIRE_SET_LOW ( GPIOA->BRR |= ( 1 << 3 )) #define ONE_WIRE_SET_HIGH ( GPIOA->BSRR |= ( 1 << 3 ))[/syntax] Powinieneś użyć normalnego przypisania "=", a nie logicznej sumy "|=". Nie ma to tutaj specjalnego znaczenia, ale warto o tym pamiętać. Sprawdź w manualu, czy timer którego używasz (jak wszystkie timery na...
Patrząc pobieżnie, używasz SPI1, które to w tym procku może korzystać z PB4, PB5 (mosi i miso). Konfiguracja SPI następuje po konfiguracji pinów "pod" enkoder. Może konfiguracja SPI "psuje", ustawienia portów PB4 lub PB5. To teoria na szybko, usunięcie linijek od SPI pewnie rozwieje moje podejrzenia...
Wyjście z CCR3 włączasz w rejestrze CCMR2, bity mają w nazwach CCMR2_OC3xx. No i timer wystarczy włączyć jeden raz, a nie trzy. Prescaler też wystarczy ustawić jeden raz. Paru rzeczy jeszcze nie włączyłeś w tym timerze. Obejrzyj przykłady PWM na STM32F0 w Elektronice Praktycznej.
Przetwornika nie ustawiasz, bo to nie jego rola. Możesz to zrobić na zylion sposobów. 1. Ustaw sobie alarm w zegarze RTC - i jak dostaniesz przerwanie to inicjuj konwersję. 2. Ustaw sobie wakeup timer w RTC i jak wyżej. 3. Sprawdzaj jakiś licznik zmieniany np. SysTick - jak jego wartość będzie większa niż poprzednia plus 600000 to inicjuj konwersję....
Porada była jedna i to już dawno. Przy ograniczonym zakresie nie ma potrzeby sprawdzania przepełnienia - wystarczy zwykłe odejmowanie dwóch złapanych czasów z przycięciem wyniku odejmowania do długości timera.
Tu na pewno jest błąd: if(released & btn == btn) to to samo co: (poprawiłem) if(released & 1) Jeśli nie masz nieblokującej obsługi LCD w przerwaniu timera, to skoro już bardzo chcesz pisać coś na LCD w przerwaniu - obniż priorytet tego przerwania.
W miarę wzrostu skomplikowania prjektów na ATmega rozpocznie się walka z ubogimi peryferialami, podczas gdy Cortexy mają po min. kilkanaście timerów 16- i 32-bitowych z weloma kanałami PWM. Akurat STM32 mają w większości timery 16-bitowe i zwykle 0 timerów 32-bitowych (wprost, bo timery 16-bitowe można łączyć w "łańcuch"), takie STM32F0 mają aż 1 timer...
Co do instrukcji barierowych to tylko wiem ze są takie i mają coś pożytecznego robić np zmusić proca do wykonania zalegających w cachu instrukcji np zapisu STM32F0 nie mają żadnego cache. Punktem wyjścia jest program bez tych instrukcji który też nic nie wpisuje do rejestrów. Widzisz tą podświetloną na żółto linijkę? Tam właśnie zatrzymał się układ....
Nie wiem o co Ci dokładnie chodzi, ale poprostu włączaj ten timer w momencie wejścia do tej funkcji opóźniającej, zaraz po przypisaniu tmier_cnt = cnt; albo nawet przed. bez przesady wykorzystywac 2 timery do delaya...
Np. zaprogramuj SysTick lub dowolny inny timer na zgłaszanie przerwań z częstotliwością 100 Hz. Co 25 przerwań zmieniaj stan jednej diody, a co 100 - drugiej. Wszystko razem zmieści się w max. 20 liniach. Jeśli chcesz "zobaczyć" działanie timera z rejestrami compare - użyj dwóch rejestrów CC. W przerwaniu końca okresu zaświeć dwie diody, w przerwaniu...
Nie zerujesz rejestru SysTick->VAL. Opóźnienia w takim stylu są ciut bez sensu, a LCD lepiej obsługuje się w przerwaniu timera, co było pokazane parę miesięcy temu w EP (na STM32F0). W przypadku nibyopóźnienia mikrosekundowego - prawdopodobnie gubisz przepełnienia timera, bo okres SysTick jest zbyt krótki.
A ja właśnie po 3 latach "przesiadam się" z LPC11xx na STM32F0, głównie z powodu niewystarczającej liczby interfejsów UART i SPI w LPC11. Na 11U6x, który rozwiązuje ten problem to sobie jeszcze trochę poczekamy. Timery też w w STM32F0 ciut mądrzejsze, no i zapowiadane USB bez kwarcu w małych obudowach wygląda zachęcająco.
(at)excray To jest tzw. pluskwa milenijna :) Rozumiem że czytasz tylko 8 bitów z tego biednego ADC? Dopisek - a tak nie doczytałem że 8 bitowa rozdzielczość. Pewnie jest coś nie halo w tej części softu, której nie pokazałeś. Zmiani ARR zawsze wywoła odpowiednią zmianę w okresie pomiędzy przeładowaniami.
Przyznaje może trochę za bardzo uogólniłem co chcę, po prostu nie lubię marnować czyjegoś czasu. Chcę ustawić 6 stopni PWM dla tego: http://obrazki.elektroda.pl/7101429600_1... Musi być PWM bo napięciem tego nie wysteruje. Jakiś tam program zlepiłem, chciałem użyć timerów ale przedtem spróbowałem czy na tym co mam chociaż to działa ....
Próbuje uruchomić przerwania: vector.c wygląda tak [syntax=c]static void __Default_Handler(void) __attribute__ ((interrupt)); static void __Default_Handler(void) { while (1); } /* +=======================================... | assign all unhandled interrupts to the default handler +=======================================...
Cześć, mam dziwny problem z STM32F030K6T6. Są dwa timery TIM1 i TIM3. TIM1 ma podpięte 4 kanały PWM. Sytuacja jest następująca: zezwolenie na przerwania pochodzące od TIM3 powoduje zaprzestanie działania PWM na kanałach 1,2,3. 4 działa poprawnie. W agonicznym poszukiwaniu problemu wyłączyłem wszystkie inne przerwania a kod obsługi IRQ TIM3 wygląda teraz...
Chodziło mi o kod za pomocą którego sprawdziłeś timerem SysTick że jest 8MHz :) Czyli jak dobrze rozumie, rdzeń pędzi z prędkością 48MHz? Czy z taką prędkością wszystko się wykonuje? Kwestia zegarów w ARM jest "nieco" bardziej złożona. Rdzeń, magistrale i peryferia ustawia się oddzielnie. Wieczorwm wrzuce kod :D Skoro to bardziej złożona kwestia, to...
Freddie, zawężasz dyskusję do jednego aspektu. Wy trochę też, bo może w przypadku flag przerwań timera faktycznie BB niczego nie wnosi, za to w innych przypadkach już tak. a wtedy konstruktorzy od ST robią coś, co jest zupełnie nieprzydatne W STM32 równie dobrze może być tak, że rejestry timera są takie a nie inne gdyż ST akurat miało taki układ peryferyjny...
Nie da się wywoływać przerwań co 1 us, bo jest to czas porównywalny z czasem wejścia i wyjścia z obsługi przerwania. Przyzwoitą obsługę DS1820 można zrobić na jednym timerze z trzema rejestrami compare - masz wtedy maksymalnie trzy przerwania na bit. Poszukaj w sieci przykładu obsługi OneWire dla LPC1114.
Wpisz do wnętrza pętli while(timer_cnt!=0); np. 'mruganie' portem żeby mieć pewność, że właśnie tam program się wykonuje.
Witam, programowałem sobie na spokojnie (próbuję nauczyć się odpalać timery od zewnętrznych sygnałów zegarowych wchodzących na dany pin). W pewnym momencie chciałem wgrać program i otrzymałem taki komunikat: Open On-Chip Debugger 0.9.0-dev-00415-g2d4ae3f-dirty (2015-06-12-17:54) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.html...
Wcześniej tą zmienną [syntax=c]uint32_t get_counter = 0;[/syntax] miałem zadeklarowaną w funkcji obsługi przerwania [syntax=c]void TIM1_IRQHandler(void)[/syntax] Jak chciałem podczas debuga wybrać "Run to Line" i postawiłem kursor w przerwaniu od timer1 to pojawił się błąd, że to jest nie możliwe. Musi być jakiś sposób sprawdzenia tego, że pomiar wykonany...
albo powielić na jakimś szybkim Cortexie do 1kHz Następny. Jak się powiela na szybkim Cortexie, czego nie można zrobić innym procesorem? Albert To tylko sugestia. Jeśli w tej samej cenie mogę mieć dostępne 48MHz (przykładowo STM32F0) zamiast 16MHz (Atmega8) i nie muszę szczypać się, ile taktów zajmie mi zmiana GPIO, to czemu nie? O 32-bitowym timerach...
Tak prawą ręką przez lewą nogę zrobiłem koledze projekt do AC6 bez HAL-a (zajęlo to 4 minuty wliczając ładowanie AC6 i CubeMx) (załacznik na dole tego postu). W ac6 import project <ciach> Post raportowany. Takie sprawy proszę załatwiać przez PW, gdyż dla moderatora obsługującego raport powstaje niezręczna sytuacja, że post dot. sposobu moderacji...
Teraz wyjaśniłeś trochę lepiej, i procedurę obsługi timera też jakąś sensowniejszą napisałeś. Bo o tej pierwszej to lepiej się nie wypowiadać. Tym niemniej dalej uważam, że DAC'a czepiasz się niesłusznie. Ja przyczyny niepowodzenia upatrywałbym w idei sterowania Timerem6 - właczanie i wyłączane po paczce. Próbkowanie masz ciągłe, a timer puszczasz paczkami....
Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Masz działający kod na F0: [syntax=c]#define PWM_FREQ400// Hz #define PWM_STEPS80 #definePWM_CLK SYSCLK_FREQ #definePWM_PRE (PWM_CLK / PWM_FREQ / PWM_STEPS) RCC->AHBENR |= RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIOAEN; LED_PORT->MODER = GPIO_MODER_AF << (GREEN_LED_BIT << 1) | GPIO_MODER_AF << (BLUE_LED_BIT << 1);// set LED pins...
W DS znajdujemy tabelkę z funkcjami pinów. https://obrazki.elektroda.pl/8825685600_... Znajdujemy odpowiednią pozycję (dotyczącą naszego timera) Następnie w RM czytamy rozdział o GPIO i tam znajdujemy: https://obrazki.elektroda.pl/8560692900_... To nam tłumaczy o co chodzi z tymi funkcjami alternatywnymi. Wracamy...
Jeden timer - SysTick, zliczanie czasu (np. w oddzielnej zmiennej dla każdego przekaźnika) w obsłudze przerwania i zmian stanu przekaźników przy osiągnięciu odpowiedniego czasu.
Nie, nie możesz wybrać, a manual napisano tylko po to, by wprowadzić Cię w błąd... ;) Tablice w datasheet zawierają numery funkcji AF odpowiadające poszczególnym funkcjom poszczególnych nów. Dla portów A i B wyprowadzenia mają po wiele możliwych funkcji. w rejestrze MODER ustawiasz AF dla danego wyprowadzenia, a w rejestrze AFR ustawiasz numery funkcji...
Przyczyn szukaj w błędnym kodzie ew. braku połączenia mas. Ani sensownej części kodu, anie schematu nie pokazałeś. Kod źle sformatowany i przez to nieczytelny, inicjowanie UART dziwne, nadawanie błędne, odbiór przez krótką chwilę a potem w krzaki (chyba, bo końca kodu nie widać). Niby jaki odstęp pomiędzy bajtami ma dawać taka pętla? Potrzebujesz odstępu...
1. Uruchomienie timera z nazwami symbolicznymi bitów: TIM3->CR1 = TIM_CR1_ARPE | TIM_CR1_CEN; Popatrz w plik stm32f05xx.h - masz tam definicje bitów dla każdego rejestru, m.in. TIM_DIER_UIF i całe mnóstwo innych. Nazwy bitów są poprzedzone nazwami rejestrów. 3. Do kasowania znacznika przerwania wystarczy podstawienie - nie potrzeba &=. Np. TIM3->SR...
Chcę użyć StopMode. Proc musi podtrzymywać stan zmiennych. Proc ma wejść w STOP MODE na czas około 200ms następnie wybudzić się na około 30ms do max 50ms i tak cyklicznie. w dokumentacji podano jak poniżej https://obrazki.elektroda.pl/1932104600_... Ale wydaje mi się że mogą też być inne źródła wyjścia z uśpienia STOP MODE, coś już...
Czy ktoś tu namawiał do używania magicznych wartości w rejestrach? Czy taki kod jest nieczytelny? [syntax=c]TIM16->PSC = SYSCLK_FREQ / LED_FREQ / LED_STEPS - 1; TIM16->ARR = LED_STEPS - 1; TIM16->CCMR1 = TIM_CCMR1_OC1M_PWM1 | TIM_CCMR1_OC1PE;// PWM mode 1, buffered preload TIM16->CCER = TIM_CCER_CC1E | TIM_CCER_CC1P;// enable CH1 output TIM16->BDTR...
oto kod programu [syntax=c]/* Includes */ #include <stddef.h> #include "stm32f0xx_rcc.h" #include "stm32f0xx_gpio.h" #include "lcd_hd44780_lib.h" /* Private typedef */ /* Private define */ /* STM32F0_DISCOVERY board definitions */ #define LED_PORT GPIOC #define LED1 GPIO_Pin_9 #define LED2 GPIO_Pin_8 #define KEY_PORT GPIOA #define KEY GPIO_Pin_0...
http://obrazki.elektroda.pl/3668151000_1... Witam. Chciałbym przedstawić sposób własnego pomysłu na w pełni sprzętowe sterowanie LEDów WS2812B za pomocą mikrokontrolera STM32F030. Nie trzeba nic konwertować, marnować cenny RAM czy cykle procesora, wystarczy dane RGB (3 bajty/led) wysłać jak po SPI. Można też do tego użyć DMA. Sposób...
Witam Jak w temacie, ustawiłem timer 2 w tryb PWM. Sygnał powinien być na PA0,PA1,PA2 i PA3 a jest tylko na PA0. [syntax=c] ///TIM2 PWM RCC->AHBENR|=RCC_AHBENR_GPIOAEN;//zeg... PA RCC->APB1ENR|=RCC_APB1ENR_TIM2EN;//ze... TIM2 TIM2->PSC=48; TIM2->ARR=20000; TIM2->CCR1=1500; TIM2->CCR2=1500; TIM2->CCR3=1500; TIM2->CCR4=1500; GPIOA->MODER|=GPIO_MODER_MODER0_1|GPI...
gdzie tu przerwania timera? cała funkcja jest wywoływana w przerwaniu 50us Po co tyle volatile? Może faktycznie za dużo. Poza tym, ten kod na pewno nie jest optymalny, lecz nie w tym rzecz. Sprawdzałeś czy na pewno STM jest taktowany 24MHz a nie przypadkiem wewnętrznym 8MHz? Na pewno 24, zgadzają się częstotliwości generowane przez timery. Z ciekawości...
Wygląda, że masz podobny problem jaki ja miałem niedawno na procesorze STM32F030R8... 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ś.
A nie widzę nigdzie innego użycia przerwań niż tylko przy wciśnięciu klawisza klawiaturki. Przerwania zewnętrzne mają wyjątkowo ograniczone zastosowania. Nadają się np. do tego, żeby obsługiwać sygnały od innych układów scalonych, świadczące o tym że dany układ ma coś ciekawego do powiedzenia. Do przycisków nadają się wyjątkowo słabo, bo żeby to działało,...
Witam, próbuje znaleźć dobry sposób na pomiar amplitudy impulsu PWM. Zakres zmian wypełnienia 5 % do 95 %. Czestotliwosc sygnalu sie nie zmienia i wynosi 1 KHz. Mój pomysł polega na tym, że po wychwyceniu zbocza narastajacego odpalam ( w przerwaniu od input capture) timer ktory co 10 us ( 5 % z 1 ms to 50 us) trigeruje pomiar ADC poprzez DMA (czyli...
To działa na STM32F0DISCOVERY - struktura zawiera adresy rejestrów i ich wartości Dopisz tylko obsługę przerwania timera... [syntax=c]// defs for STM32F05x chips #define GPIO_MODER_OUT1 #define GPIO_MODER_AF2 #define TIM_CCMR2_OC3M_PWM10x0060// OC3M[2:0] - PWM mode 1 #define TIM_CCMR2_OC4M_PWM10x6000// OC4M[2:0] - PWM mode 1 //======================================...
Ja mam zestaw z STM32F0 wygrany w konkursie organizowanym przez kamami. Wcześniej programowałem już ARM'y ATMELa. W przykładzie jak powyżej wykorzystywany jest System timer tick. U atmela normalnie ustawiałem zezwolenie na przerwania od SysTick, a tutaj tego nie widzę. W RM od tego procesora µC w tabeli wektorów przerwań nie widzę, żeby SysTick...
Różnice w wydajności są marginalne i nieistotne w większości zastosowań. Na ogół nie ma nawet potrzeby korzystania z maksymalnej częstotliwości zegara. Podstawowe kryterium wyboru - to odpowiedniość liczby wyprowadzeń i peryferiali do zastosowania, potem czynniki takie jak możliwości zasilania, dostępność, cena, jakość dokumentacji. Z moich doświadczeń:...
Witam, Pracuję nad projektem urządzenia, w którym po raz pierwszy zastosuję mikrkontroler STM32 zamiast dotychczasowych AVR. Zadecydowałem się użyć układ STM32F030K6T6 oraz środowisko programistyczne CooCox. Na poczatek napisałem prosty program w załaczniku. Mam takie pytanie, jak w programie zadeklarować, że uzywam zewnetrzny kwarc np: 12Mhz? [syntax=c]...
A dokładnie, to jak to robisz? volatile int8_t spi1_error=0; ... static uint8_t spiTransferByte(uint8_t addr,uint8_t data) // { // spi1_error=0; // GPIOC->BRR =(1<<12); // nSEL-->low uint32_t timer=spi_Timeout; // while(!(SPI1->SR&SPI_SR_TXE ) { if(--timer==0) return(spi1_error=-1);} // SPI1->DR=(uint16_t)(data|(addr<<...
STM32F072BDISCOVERY... Nie wiedziałem, że zawiera on ATMegę88 lub ATMegę32. Zawsze się człowiek czegoś uczy... :) Wracając do tematu, odpalaj ADC z timera, co zapewni ci wyzwalanie w ściśle określonych odstępach czasowych. Przy tak niskiej częstotliwości próbkowania każdy AVR wystarczy. Tylko ATMegi mają ADC 10-bitowe. Za cenę ATMegi32, gdzie USB trzeba...
Nie wiemy o który z rodziny STM32 pytasz, może to się okazać istotne. Nie zadbałeś o uruchomienie USART. Opierając się na SPL (brr) zapoznaj się z poniższym przykładem (dla F0): [syntax=c] #include "stm32f0xx.h" #include "stm32f0_discovery.h" int main(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIO...
Wyzwalasz timerem sprzętowo, odbierasz wyniki do bufora przez DMA, po odebraniu bloku o długości, którą sam wymyślisz - przetwarzasz wyniki. Dane możesz pewnie przetwarzać w przerwaniu DMA. Jeśli masz inne, ważniejsze przerwania - obniż priorytet przerwania DMA.
1. Dodanie czegoś do ARR powoduje wydłużenie okresu, a nie jego skrócenie. 2. Jaka jest zalecana wartość rezystorów podciągających przy Fast Mode? 3. Czy próbowałeś zacząć od zwykłego trybu I2C? 4. Jaki jest specyfikowany przez producenta czas wykonania operacji zapisu pamięci? 5. Nie potrzebujesz jednego z przerwań - albo timera, albo ADC.
Czyli wszystko kompletnie źle. Po pierwsze, gdzie są rezystory ograniczające prąd segmentów? Po drugie, zaprogramuj timer na okres 500 i częstotliwości rzędu 1 kHz (400 Hz..2 kHz). Po trzecie, zamiast żenującego switcha użyj tablicy stałych: wypelnienie = okres[brightness]; Po czwarte, zadeklaruj zmienną, której zapis do BSRR zaświeca potrzebne segmenty...
Użyj timera, wyzwalaj DMA timerem, a przez DMA wysyłaj cyklicznie do rejestru BSRR wybranego portu 4 kombinacje dające na dwóch liniach portu 2 przebiegi prostokątne przesunięte w fazie: 00, 01, 11, 10.
Po pierwsze, z tego co piszesz wynika, że wciąż nie wiesz, na czym polega sterowanie serwem. Po drugie, tak to jest, kiedy projekt zaczyna się od narzucenia typu mikrokontrolera, a potem całość działań polega na tym, żeby na niepasującym mikrokontrolerze zrobić coś, do czego się on kompletnie nie nadaje. Taki np. najmniejszy STM32F030 za 3.5 zł wysteruje...
Zacznij od określenia wszystkich wymagań na mikrokontroler, a potem szukaj mikrokontrolera, niekoniecznie musi być to Atmega. Znajdziesz i takie, co mają po kilkanaście wyjść PWM. Z małych i tanich mikrokontrolerów wiele wyjść timerów PWM mają np. LPC81x i STM32F030 - ceny ok. 3..5 zł.
Rozumiem, że pytasz o to, czy w numerze EP 2014/4, w którym znajduje się artykuł 2014/4 "32 bity jak najprościej. STM32F0 - nieblokująca obsługa wyświetlacza LCD ze sterownikiem rodziny HD44780. cz. 4", znajduje się artykuł o nieblokującej obsłudze wyświetlacza LCD z HD44780. Obawiam się, że odpowiedź twierdząca nie rozwieje Twoich wątpliwości, bo wpadasz...
Szkoda ze to tylko jakaś wydumana sekwencja. I cały czas kolegi problem (bo ma wszystko default) to: [syntax=c]DAC -> CR |= DAC_CR_EN1; [/syntax] czyli: [syntax=armasm]0800078c: 0x00000c68 ldr r4, [r1, #0] 0800078e: 0x44f00104 orr.w r4, r4, #1 08000792: 0x00000c60 str r4, [r1, #0][/syntax] a np inicjalizacja z DMA i Timerem to bardzo skomplikowane:...
Witam ,(mój pierwszy post na forum :) ) mam następujący problem , prawdopodobnie spowodowany brakiem mojej wiedzy. Otóż potrzebuję co 1 sekundę wyzwalać ADC za pomocą TImera 1 dokładnie Flagi Timera TIM1_SR_CC4IF. Wydaje mi się że ustawiłem wszystko zgodnie z datasheetem a mimo to Przetwornik mój cały czas wykonuje konwersję wchodzi w przerwanie void...
W timerach określanych jako "advanced" (więc np. TIM1 i TIM8) jest jeszcze magiczny bit "MOE" służący do włączania wyjść. Być może dla pracy jako wejście też trzeba go ustawić?
żaden problem. Impulsy do startu pomiaru i transmisji też generuj timerem. Takich rzeczy nie robi się nigdy na programowych opóźnieniach, kiedy można to zrobić sprzętowo. Najpierw ustawiasz timer do generowania impulsu, po przerwaniu końca impulsu przeprogramowujesz na chwytanie obu zboczy (najwygodniej na dwóch oddzielnych kanałach z jednego wejścia)...
Hehe, chyba ślepnę powoli :P Masz dobrą tablicę wektorów? Tablicę wektorów oczywiście napisałem sam, na podstawie twoich projektów dla µC LPC11xx i STM32. No i faktycznie, w tablicy wektorów zapisane miałem: Nie powinieneś działać na rejestrze 0? Tak, dokładnie, jedynka była wynikiem moich poszukiwań niepowodzenia, wcześniej widniało tam zero....
Witam, podłączyłem do mojej płytki 2 moduły nrf odpowiednio odbiornik do SPI1 a nadajnik na SPI2. Niestety mam problem z obsługą tych układów, nie zgłaszają mi one przerwań na pinach który ustawiłem jako wejściowy z pull-up oraz triggerem reagującym na zbocze opadające (sprawdzałem piny zwierając je do masy przerwanie zostało wywołane poprawnie). Funkcje...
Czyli jednak 50, a nie 430 kHz. Do pędzenia DAC należy użyć DMA (obsługa programowa daje większy jitter), a jeśli z jakiegoś powodu bardzo chcesz to zrobić w przerwaniu timera, sugerowałbym włączenie PLL i taktowanie procesora ze znacznie większą częstotliwością niż domyślne 8 MHz.
Możesz do tego celu użyć sprzętowego interfejsu USART. Jeżeli nie masz na tym pinie dostępnej takiej możliwości to będziesz zmuszony zaimplementować programowego UARTA. Należy do tego wykorzystać timer z przerwaniem. Częstotliwość przerwań powinna być przynajmniej 4x większa niż Twój bitrate (a najlepiej to x16) co w przypadku 1200bod/s nie będzie problemem.
Pytasz, w jaki sposówb zrealizować "to" w przerwaniu", tylko nie piszesz nic o tym, czym jest "to" - a to jest klucz do całego problemu. Bez podstawowych informacji o funkcjonalności urządzenia nie da się dokładnie NIC doradzić. Wbrew tem, co napisał kol. mjurczuk, cały kod Twojego programu zapewne powinen mieścić się w przerwaniach. Na pewno nie ma...
Potwierdzam TS100 się w 15s wyrabia;) jak dobrze pamiętam to 11s do 300 stopni przy 24V, Hakko T12 podobnie o JBC T245 (130W ) nie wspominając;) Przesterowanie początkowe może mieć i swój plus, szybciej dociera ciepło na koniec grotu. Pytałeś czy sterownik polecam, nie testowałem gotowych rozwiązań poza czymś z EDW, aktualnie używam własnej konstrukcji...
Ok. Niemniej jednak skopiowałem ten kod z #8 do CubeIDE 1.5.0, zrobiłem parę korekt pod moje PCB, dokonałem poprawnej implementacji flagi BUSY i wszytko działa jak powinno z inkrementacją jak i bez. Kod uruchamiałem na STM32F070F6P6 z szablonu generowanego w CubeMX i okrojonego z HALa - przerwania działają poprawnie, zarówno jeśli używam sprzętowego...
Witam, w przerwaniu inkrementuję pewną zmienną i tu powstaje problem; warunek: if(write_bit_tim2==10) wykonuje się gdy write_bit_tim2==5, nie wiem czym jest to spowodowane ponieważ przerwanie wykonuje się co sekundę(dioda miga co sekundę). Miał ktoś coś podobnego i wie czym jest to spowodowane? Dziękuję. Kod: [syntax=c] #include "stm32f0xx.h" #include...
A co na to odpowiednie RM (która powinna być dla ciebie święta księga a nie jakieś zabawne biblioteki). Powinna być, ale ciężko mi się tam odnaleźć. Pierwszy raz bawię się uC, dlatego kupiłem tą książkę, a tam pracuje się na tej bibliotece. Jak pisałem, na samych rejestrach nie potrafię nawet uruchomić zegara dla Backup Domain, a co dopiero skonfigurować....
https://obrazki.elektroda.pl/5900465500_... Nie, nie jest to kolejny klon STM32F030 jak by sugerowało oznaczenie. Jest to Cortex M0 z pinoutem podobnym do 8-mio bitowych mikrokontrolerów STM8S. STM8S/HK32F030M/STM32F030: https://obrazki.elektroda.pl/8248415200_... https://obrazki.elektroda.pl/9155014300_...
Nie przemawia to do mnie, w stm32f0xx.h mamy coś takiego: #define TIM_SR_CC1IF ((uint16_t)0x0002) /*!<Capture/Compare 1 interrupt Flag */ jak na mój gust zapis: TIM1->SR = ~TIM_SR_CC1IF; spowoduje najpierw zanegowanie TIM_SR_CC1IF a potem przypisanie do rejestru SR, czyli de facto wrzucimy tam wartość 0xFFFD. Zapis: TIM1->SR...
Witajcie, Chociaż STM'a używam od niedawna, wydawało mi się że temat przerwań udało mi się już ogarnąć. Wydawało, bo kiedy przyszła potrzeba wywołania przerwania od innego GPIO już PA0, okazało się że mam z tym problem. Mianowicie, moim celem jest wywołanie przerwania od rising edge, więc w tym celu ustawiłem sobie toggling LED'a w przerwaniu od timera...
Zmień mikrokontroler na taki, który ma timery o odpowiadających Ci parametrach. Układ dobiera się do założeń projektowych. Potrzebujesz timera, który będzie miał okres ok. 600 cykli przy 60 kHz, czyli częstotliwość zegara powinna wynosić nie mniej, niż 36 MHz. Prawdopodobnie dowolny uC z rdzeniem Cortex, zresztą pewnie tańszy od ATmega128, zapewni spełnienie...
Własnie kupiłem 3208 i wątpie czy coś sensownego znajdę w armach za 5zł+vat. W TME Mega3208 kosztuje ok 7zł. Za tą cenę, też w TME, jest STM32F030C6T6. Porównywać właściwie nie ma co. Niby oba mają 32kB FLASH i 4 kB RAM, ale: - Wydajność ARM (taktowanie 48MHz) jest ok 14 razy większa niż AVR mega (20MHz). - ARM ma 39 GPIO AVR 23. - ADC 12-bit 1Ms vs...
Wydaje mi się że mnie plik wygląda okay [syntax=c] /** ****************************************... * (at)file startup_stm32f030xc.s * (at)author MCD Application Team * (at)version V2.3.0 * (at)date 27-May-2016 * (at)brief STM32F030xc/STM32F030xb devices vector table for Atollic TrueSTUDIO toolchain. * This module performs:...
Cześć. Tak jak napisałem w nazwie tematu posiadam ARM'a STM32F072RB. Podłączyłem kolejno kolumny, później wiersze klawiatury matrycowej 4x3 do portów GPIOC1-GPIOC7. Chcę odczytywać wciskane klawisze na klawiaturze i napisałem jak na razie taki kod: [syntax=c] #include "stm32f0xx.h" #include <stdio.h> volatile uint32_t timer_ms = 0x0; void delay(int...
https://obrazki.elektroda.pl/3252078300_... Poniższy artykuł przedstawia – krok po kroku – wykonanie niewielkiego, kieszonkowego oscyloskopu cyfrowego. Nie jest on tak dobry jak zwykły warsztatowy oscyloskop, ale z drugiej strony można zabrać go niemalże wszędzie. Poza tym – nie wszystkie projekty DIY muszą mieć sens....
Nie neguję dokumentacji. Nawet więcej, nigdy nie odpalam bez niej. Nawet gotowca konfrontuję z datasheetem. Po prostu mi chodzi że z przykładem jest prościej i szybciej. Nie ma co popadać w skrajności. Czyli też w uruchamianie wyłącznie na podstawie datasheeta. Bo czas też kosztuje. I szkoda na nowo odkrywać koło. Niektórych rzeczy wręcz bym nie odpalił...
Zupełnie już nie wspomnę o gościu (najwyraźniej przy podanych kwotach na RnD mózg zawodzi) który wymyślił rejstr multipleksera IO, dzięki czemu możemy wybrać tylko jedną funkcję dla pinu (nie wracajmy do dyskusji po co, bo już to kiedyś wyjaśniałem, i tylko programista pozbawiony wyobraźni nie wie po co), a już hitem jest wrzucenie sygnału z peryferium...
Musisz więc w loop() sprawdzać stan wybranego pinu funkcją digitalRead() Naliczyłem 17 delay, których czas ustawiony jest na 100ms. Daje to łącznie 1,7sekundy i może być tak, że po takim czasie program zareaguje na zmianę stanu wejścia. Pierwsza rzecz jaką bym zrobił to wywalił delay i sterowanie zrealizował na przerwaniach od timera. Przy takim podejściu...
BlueDraco Mam wersję Keila 4.5 i tutaj nie ma jeszcze tych podpowiedzi kontekstowych (gdy się naciśnie CTRL + SPACJA). Mam na płycie z EP wersję 4.72a. Aby dobrze działał to odinstalować wersje 4.5 i instalować nową, czy odrazu. Jak jest lepiej, żeby poźniej nie było problemów z działaniem? http://obrazki.elektroda.pl/4851810600_1...
Zlecę napisanie działającego szablonu kodu dla STM32F030 gdzie: -pracuje jeden dowolny timer i wywołuje przerwanie -jest funkcja zapisu jednej strony do flash nie powodująca zatrzymania obsługi przerwania timera Nie wiem czy jest to możliwe, lecz wydaje mi się, że by to uzyskać należy przenieść do RAM: -tablicę wektorów przerwań -funkcję obsługi przerwania...
Jednej rzeczy nie mogę zrozumieć: po co został dodany STM32F030F4 w roli ekspandera I2C? Innej funkcji ten STM32 w tym układzie nie pełni. Hmm, no ja uważam, że ekstra sprawa. Raz, że pewnie ten MCU jest tańszy niż połowa ekspanderów IO ;) Ekspandery są mocno ograniczone funkcjonalnie, masz jaki masz i już. A tutaj fajnie by było mieć go wstępnie zaprogramowanego,...
No to weź np. STM32F030. Za < 5zł masz min. 5 niezależnych timerów.
Może da się nieco "na około", czyli komparatorem wyzwalać transfer DMA, który uruchamiałby timer?
Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
Ja mam to tak skonfigurowane: [syntax=c] // gpio enkoder - PB4, PB5 RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; GPIOB->MODER |= GPIO_MODER_MODER4_1 | GPIO_MODER_MODER5_1; GPIOB->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR4 | GPIO_OSPEEDER_OSPEEDR5; GPIOB->PUPDR |= GPIO_PUPDR_PUPDR4_0 | GPIO_PUPDR_PUPDR5_0; GPIOB->AFR[0] = 0x00220000; //init enkoder RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;...
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...
[syntax=c]TIM3->CR1 |= TIM_CR1_URS;[/syntax] Tym timera nie włączysz.
A zegary ustawia Ci ten plik wygenerowany przez excela system_stm32f4xx.c ? czy sam to robisz ? Bo może trzeba ustawić HSE_VALUE ? Jak nie masz ustawionego HSE_VALUE to biblioteki od STM zakładają że masz kwarc 25Mhz
To jest sekwencja adresów rejestrów i ich zawartości dla STM32F0DISCOVERY, timer3. Nie jest to całkiem to samo, co u Ciebie, ale może Cię zainspiruje. W Każdym razie to działa. [syntax=c]// port setup {&RCC->AHBENR, RCC_AHBENR_GPIOCEN},// GPIOC, GPIOA {&GPIOC->MODER, GPIO_MODER_AF << (GREEN_LED_BIT << 1) | GPIO_MODER_AF <<...
Pisanie, że za te same pieniądze ma się wypaśny procek z niewiadomojakimi peryferiami jest mitem. Tanie ARMy są jak tanie AVRy, wykastrowane do granic. Kosztuje mniej niż a ma więcej xmega (rozumiem że Xmega nie jest "wykastrowana") - specjalnie porównałem ceny dla 100szt w takiej samej obudowie. Np w LQFP64 ARM: STM32F411RCT6 100MHz, RAM:128KB, FLASH:...
3.4 Cyclic redundancy check calculation unit (CRC) (strona 13) The CRC (cyclic redundancy check) calculation unit is used to get a CRC code using a configurable generator polynomial value and size. Ale to jest krótki opis, nie zawiera informacji, jak i do czego można tego używać (z wyjątkiem tego, że może być użyty do SPI). Podobnie dla STM32F103.
https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
A nie masz tam czasem włączonego jakiegoś Watchdoga czy czegoś takiego co Ci resetuje procka? :)
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...
[syntax=c]#include <stm32f0xx_gpio.h> #include <stm32f0xx_rcc.h> #include "stm32f0xx_adc.h" #include "stm32f0xx_tim.h" GPIO_InitTypeDef Gp; ADC_InitTypeDef ADC_INIT; TIM_TimeBaseInitTypeDef timerInitStructure; TIM_OCInitTypeDef outputChannelInit; #define GreenLED_Pin GPIO_Pin_9 #define BlueLED_Pin GPIO_Pin_8 #define przycisk_Pin GPIO_Pin_0...
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śli ustawiłeś tryb Center-aligned, to timer zlicza w górę i w dół - okres PWM jest 2 x dłuższy. Połowa okresu przypada na wartość równą wartości ARR.
stm32f0 discovery stm32f0 przykład systick stm32f0
automatyka integra satel daewoo matiz wymiana panewka szlif
polecanie pendrive szukam firmware
Golf V 2010 i Superb II 2011 – klimatyzacja nie chłodzi, wysokie ciśnienie 90 psi, czujnik G65, zawór N280 LG 50: Brak obsługi aplikacji myszką, tylko pilot