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....
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...
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...
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...
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...
https://obrazki.elektroda.pl/9151185000_... Druga część artykułu o najtańszych nowych mikrokontrolerach z roku 2017. Ekosystem developerski Środowisko developerskie mikrokontrolera ma ogromny wpływ na jakość pracy z nim i w konsekwencji - na produktywność. Na to składają się różne czynniki – jakość IDE, dostępne biblioteki, płytki...
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.
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...
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...
Witam mam mały problem z uruchomieniem PWM na pytce ewaluacyjnej stm32F0. Wydaje mi się, że o niczym nie zapomniałem, a jednak nie działa. Celem programu jest wygenerowanie przebiegu PWM o 50% wypełnienia, poniżej zamieszczam kod. void initPWM() //inicjuje pwm na tim3 dzialajacy na kanale 2 //PORTA PIN 7 { //timer zlicza od wartosci CCRx...
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...
A to co? LPC_SYSCON->PDRUNCFG &= ~80; Poprawiłem na 0x80, faktycznie w kursie jest [syntax=c] #define PDRUNCFG_SYSPLL_PD 0x00000080 LPC_SYSCON->PDRUNCFG &= ~PDRUNCFG_SYSPLL_PD; [/syntax] (at)BlueDraco: Ponawiam pytanie: Czy w tym numerze Elektronika Praktyczna 2014/4 "32 bity jak najprościej. STM32F0 - nieblokująca obsługa wyświetlacza...
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...
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...
OpenOCD zaktualizowanie tak jak kompilator wcześniej. Przerabiam przykład od początku teraz na bazie tego o którym mówiłeś LPC Będe wklejał tutaj co dokładnie przerabiam. Jeśli coś robię źle to mam nadzieje że mnie poprawicie. Jeśli dobrze to mam nadzieje że komuś się przyda. 1.Import projektu lpc1114_blink_led i rename na stm32f0_blink_led 2. Zmiany...
Przy tej samej prędkosci zegara PIC-e maję wolniejszy FLASH - przy 48MHZ PIC-e 2WS a F0 1WS. Tak że będą czytać stałe z FLASH wolniej. oba procki chodzą na 24MHz, ze względu na pobór prądu Na prośbę moderatora: PIC32MX150, STM32F030K6T6 Tu prosta maszyna stanów - funkcja, która wykonuje się wolniej o jakieś 30...40% niż na PIC. Uprzedzam, sprawdziłem,...
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ę....
[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...
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.
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...
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.
(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.
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.
Jeśli to ma być PWM to powinieneś zmienić na: Dodano po 4 GPIOC->MODER |= LED1 | LED2; Co się kryje pod LED1 i LED2? Bo LED2 którego sterujesz ręcznie, aktywujesz tak samo jak LED1, który ma być sterowany timerem. A przecież to 2 odrębne tryby MODER: 01 - wyjście - LED2, oraz 10 - AF - LED1.
Sprawdź czy program tak samo zachowuje się bez podłączonego debuggera.
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...
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]...
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...
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...
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....
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.
NVIC mógłbyś jeszcze skonfigurować
Witam, jestem posiadaczem STM32F042K6. Programuję go w System Workbench for STM32. Posiadam również mostek TB6612fng. Na początku zaprogramowałem stma żeby 2 silniki DC które podłączyłem do mostka działały na pełnych obrotach. Oto kod: [syntax=c] #include "stm32f0xx.h" int main(void) { HAL_Init(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE();...
Straszne skomplikowane. Proponuję prościej - bez pętli głównej, a w przerwaniu SysTick kilka sekcji jak poniżej. [syntax=c]void SysTick_Handler(void) { static uint32_t r1_timer = R1_PERIOD; if (-- r1_timer == 0) { r1_timer = R1_PERIOD; R1_OFF; } else if (r1_timer == R1_ONTIME) R1_ON; }[/syntax]
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...
Na tym co masz masz masę wyrafinowanych timerow, tylko trzeba się wglebic w dokumentację, a nie arduinowac.
Dostępy bitowe BitBand są atomowe z perspektywy procesora lub DMA, nie mamy jednak podstaw do twierdzenia, że są one atomowe z perspektywy peryferiali. Nie wydaje mi się, by mechanizm BitBand gwarantował, że sprzęt nie zmodyfikuje bitu w rejestrze peryferiala w tym samym czasie, gdy interfejs szyny będzie wykonywał na tym rejestrze operację BitBand....
SysTick_Config() to przykład całkowicie bzdurnej funkcji, która "za Twoimi plecami" ustawia na sztywno że SysTick będzie taktowany z zegara rdzenia podzielonego przez 8. Tak wiec dla Twojego mikrokontrolera taktowanego zegarem 48MHz, SysTick był taktowany zegarem 6MHz. A powiedz mi dlaczego zewn a nie zegar procesora? [syntax=c]__STATIC_INLINE uint32_t...
Zaprogramuj inny kanał timera jako compare, oprogramuj przerwanie od teo kanału i sprawdź, czy timer działa. A co to niby ma być? TIM1->CCMR1 |= 1<<TIM_CCMR1_CC1S_0;
Dobra,ogarnąłem makra.W avr'ach wyglądały trochę inaczej. Zamieszczam cały poprawiony i niedziałający kod: [syntax=c] #include "stm32f0xx.h" #include"core_cm0.h" #define zapal GPIOC->BSRR|=(GPIO_BSRR_BS_9);//zapal diode #define zgas GPIOC->BSRR|=(GPIO_BSRR_BR_9);//zgas diode int main(void) { RCC->AHBENR |=(RCC_AHBENR_GPIOCEN);//wlacz port C RCC->AHBENR...
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...
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...
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ś.
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...
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,...
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...
Mozę powtórzę, bo nie lubię patrzyć jak ktoś traci czas - wszystkie porady sugerujące że problemem jest 8-/16-/32-bitowy dostęp do rejestru DR lub jakieś nieistniejące w tym układzie FIFO są po prostu błędne. Jeśli bez optymalizacji ruszyło, to powód jest dokładnie taki jak w słynnym przypadku timerów - to co kasuje flagę (zapis do DR) jest zbyt blisko...
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ł...
Przesądy... ;) Nie "jak najszybciej" a "odpowiednio szybko"; np. jedyne w systemie przerwanie zgłaszane co 100 us może być obsługiwane przez 99 us i wszystko będzie ok. A co do diody - cały kod, który robi to, co trzeba w przerwaniu zgłaszanym co 10..20 ms, wygląda tak (na STM32F0): [syntax=c]static uint8_t bstate = 0, led_timer = 0; bstate = (bstate...
stm32f0 discovery systick stm32f0 stm32f0 przykład
hulajnoga elektryczna ninebot pralka mikrowyłącznik liczący impedancje
prosty odbiormik reakcyjny przestrojenie t8010
Phison PS2251-19 USB Stick Not Detected, No Red Status in MP Tool, Recovery Steps Simulink Series RLC Circuit: 120V 60Hz Model, Parameters, Results, and Engineering Analysis