z tego co widzę to 19 przerwanie czyli moje prowadzi pod inny adres niż wszystkie No tak, tyle ze to przerwanie jest "19-te", tyle że przed nim jest kilka systemowych. Wg tabelki w manualu tych układów, adres wektora przerwań dla TIM14 to 0x8c, natomiast u Ciebie wektor jest pod 0x68... Błąd masz taki, że za bardzo w nią zaingerowałeś... Zwróć uwagę,...
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...
Poza tym to, co chcesz definiować samemu, jest już od dawna zdefiniowane w plikach nagłówkowych mikrokontrolera. Z kolei programowanie SysTick znajdziesz w pliku nagłówkowym rdzenia - wystarczy przepisać treść nibyfunkcji SysTick_Config. Zmianę priorytetu przerwania, która w tej funkcji jest, możesz pominąć. No i zapis: (uint32_t) 0x00000007 to to samo,...
Doinstalowałem STM32F0 Support już wcześniej niż napisałem posta. Ale to nie to. Mógłbyś u siebie zobaczyć, co masz zainstalowane? U mnie jest teraz tak: http://obrazki.elektroda.pl/6353554100_1...
Zapamiętaj jedna generalna zasadę: żadnych delay w przerwaniach. Do tego ten delay o ile się już uprzesz użyć go w handlerze wymaga aby systick miał wyższy priorytet, inaczej zdechnie w deadlocku
Witam, Pozmieniałem trochę ten domyślny program. Moja część zawarta jest w linijkach "moj program" reszte kodu wyłączyłem. Proszę o sprawdzenie, bo jeszcze czekam na kuriera z moim zestawem STM32F0 Discovery. ****************************************... ** ** File : main.c ** ** Abstract : main function. ** **...
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.
O tym, że test z machaniem pinu jest bez sensu już Koledzy pisali. Nie zamierzam nawet z tym polemizować, za to zrobiłem mały eksperyment, nazwijmy go "optymalizacja machania" :) STM32F051 pędzony 48 MHz i oto wyniki dla optymalizacji 01 oraz 03: https://obrazki.elektroda.pl/1055823600_... https://obrazki.elektroda.pl/6644752300_...
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...
Witam. Na początku muszę zaznaczyć, że jestem raczej początkującym w temacie mikrokontrolerów i ogólnie elektroniki. Kupiłem sobie stm32f0 discovery oraz termometr ds18b20, podłączyłem wszystko jak trzeba - pin 1-wire do pc7, oraz piny zasilania odpowiednio do 3v i GND na płytce. Korzystam z IAR Embedded Workbench EWARM. Termometr działa, bo procedura...
Ten kod który przedstawiłem, często pojawia się w internecie i przedstawiany jest jako "zawsze działający". Zamiast brać kody z netu to po prostu napisz swój. Jak sam widzisz zbyt długi to on nie jest, więc nie zajmie Ci zbyt dużo czasu. W reference manual jest opis krok po kroku jak powinna wyglądać procedura odbioru czy nadawania, więc po prostu...
wiec mam 8MHz tak jak fabrycznie dostalem stm32f0discovery. Napewno? "Fabrycznie" jest kwarc 8MHz natomiast MCU ma mnożnik PLL który można ustawić. Jakiego środowiska używasz? W "moim" eclipse standardowy szablon dla STM32F0DISCOVERY wygląda tak: Na pewno mam 8MHz. SysTick'iem sie upewnilem. Pokaż kod.
Przecież ten układ nie ma FPU, więc flagi kompilacji są zupełnie bezsensowne... Wystarczy samo -mcpu, -march jest zbędne. Flaga "-nodefaultlibs" dla linkera też jest dziwnym pomysłem, biorąc pod uwagę fakt, że w tych "default libs" jest pewnie nawet dzielenie liczb całkowitych.
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ę....
Niby można i tak, ale normalnie robi się to inaczej - programujesz SysTicka na jakąś ładną, okrągłą częstotliwość, np. 100 lub 1000 Hz, a w przerwaniu odliczasz programowo i co ileś przerwań coś robisz. Wrzucam Ci program na STM32F0, który miga dwiema diodami przy użyciu SysTick, co pół sekundy. [syntax=c] /* STM32F0DISCOVERY SysTick-based blinker gbm,...
Ok, dodałem alternatywną funkcje dla portu: [syntax=c] BUTTON_PORT->AFR[1] |= 0x2;//Alternate function selection for port => TIM1_CH1 [/syntax] Teraz jest lepiej, gdy połączę PC8 z PA8 (dioda już nie gaśnie). Przypisuję capture/compare register 1 do globalnej zmiennej i następnie sprawdzam podczas debugowania wartość tej zmiennej w pętli for(;;)....
Tylko tyle zdążyłem napisać: [syntax=c]/** ****************************************... * (at)file main.c * (at)author Ac6 * (at)version V1.0 * (at)date 01-December-2013 * (at)brief Default main function. ****************************************... */ #include "stm32f0xx.h" #include...
Witajcie, od dwóch dni próbuję ogarnąć przerwania EXTI. Już na to patrzeć nie umie... Gdy naciskam przycisk wszystko się zacina. Działanie programu (docelowe jakie ma być): dioda mruga co sekundę, po wciśnięciu przycisku gaśnie, po ponownym wciśnięciu zaczyna mrugać i tak w kółko. Działa: mruga, po wciśnięciu zostaje w stanie w jakim była podczas wciskania...
Nie przejmuj się przedpiśćcą. On tak lubi. Przyczepił się do trzech rzeczy, które nie mają nic do rzeczy. Parametrem funkcji SysTick_Config() jest ilość taktów pomiędzy przerwaniami. Co według Ciebie się stanie, jeśli kod przerwania wykonuje się dłużej niż okres jego wywołań? Albert
Cały obecny kod: http://obrazki.elektroda.pl/5926424400_1...
Ponieważ ja zawsze byłem zbyt leniwy, by pisać tak dużo instrukcji, ile potrzebują wywołania bibliotek, a jednocześnie lubię używać mikrokontrolerów z małą pamięcią, popełniłem na STM32F0 (płytka DISCOVERY) takie coś do włączania i wyłączania diod guzikiem. Program jest mało ambitny, bo ma ledwie ze 6 instrukcji w C, ale działa dobrze i może komuś się...
Dałem radę już cokolwiek zrobić, jednak nadal mam problem z odbiorem drogą radiową (wysyłania jeszcze nie sprawdziłem). Zaraz opiszę co dokładnie nadal nie działa. W załączniku dodaję cały projekt. Kody (obecne): main.c [syntax=c]/** ****************************************... * File Name : main.c * Description : Main...
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...
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]...
Testuję pobór prądu w uśpieniu takim kodem: [syntax=c]void EXTI0_1_IRQHandler(void) { EXTI->PR |= EXTI_PR_PR0; GPIOA->ODR ^= 1<<3; } int main(void) { uint32_t a,b; _delay_ms(300); //RCC RCC->AHBENR |= RCC_AHBENR_GPIOAEN; RCC->APB1ENR |= RCC_APB1ENR_PWREN; //Typ - wyjcie GPIOA->PUPDR |= GPIO_PUPDR_PUPDR0_1;//pull down GPIOA->MODER...
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.
Mam taki prosty programik: [syntax=c]void TIM1_BRK_UP_TRG_COM_IRQHandler(void) { TIM1->SR &= ~TIM_SR_UIF; GPIOA->ODR ^= GPIO_ODR_2; //led PA2 if(TIM1->CR1 & TIM_CR1_DIR) TIM1->CNT = 0; //blokuję licznik przed przeładowaniem else TIM1->CNT = 20; } void TIM1_CC_IRQHandler(void) { TIM1->SR &= ~TIM_SR_CC1IF; GPIOA->ODR ^=...
Tabela wektorów jest niekompletna, brakuje kilku zarezerwowanych pozycji między wyjątkami HardFault a SVCall i SVCall a PendSV [syntax=c] ( void ( * )( void )) &__main_stack_end, // 0 Reset_Handler, // 4 NMI_Handler, // 8 HardFault_Handler, // C 0, // 10 0, // 14 0, // 18 0, // 1c 0, // 20 0, // 24 0, // 28 SVC_Handler, // 2C 0, // 30 0, // 34 PendSV_Handler,...
Trzeba było dodać ';' przed wklejeniem. Otrzymany plik rozmiary.txt. 00000428 d impure_data 000000e0 t SetSysClock 000000d4 T __register_exitproc 0000008c T SystemInit 00000048 T __libc_init_array 00000034 W Reset_Handler 00000034 T __libc_fini_array 00000018 t register_fini 00000010 T atexit 00000006 T main 00000004 R _global_impure_ptr 00000002 W...
A co i z czym miałoby się gryźć przy jednym przerwaniu? Przekombinowujesz. Podałem rozwiązanie, które (bez zmiennych czasów) wymaga trzech linii kodu w funkcji main (wywołanie SysTick_Config, ustawienie SleepOnExit i _WFI()) i po 5 linii kodu na przekaźnik w obsłudze przerwania. Nie ma żadnych powodów, by przy tak niekrytycznym czasowo działaniu urządzenia...
Program zawiesza się i już nie wiem, co z tym począć. Sprawdzić rozmiar stosu dla przerwań. NVIC_SetPriority(SysTick_IRQn,2); NVIC_EnableIRQ(SysTick_IRQn); Przerwania SysTick nie da się wyłączyć, więc "włączanie" go to nie jest dobry pomysł. Raczej podobnie jest z priorytetem. 4\/3!!
Nie mam oscyloskopu pod ręką :( Gdy zrobiłem tak: [syntax=c]#include "stm32f0xx.h" #include "stm32f0_discovery.h" volatile uint8_t x=0; int main(void) { RCC -> AHBENR = RCC_AHBENR_GPIOCEN; // port C GPIOC -> MODER |= GPIO_MODER_MODER8_0; // wszystkie piny jako wyjścia GPIOC -> PUPDR |= GPIO_PUPDR_PUPDR8_0;//pull-up dla całego portu SysTick_Config(16000000);//SysTick...
Może za krótko czekasz po włączeniu zasilania i próbujesz komunikować się/inicjalizować zewnętrzne urządzenie zanim zdąży zakończyć sekwencję POR. Mogę tylko gdybać bo nie wiem co masz do tego uC podłączone, ale widać że jakieś magistrale szeregowe masz wyprowadzone. No ale koniec sekwencji POR oznacza wykonanie kodu z Reset Handler ? [syntax=c]int...
Witajcie ponownie :) Wybaczcie, że dopiero teraz odpisuję. Ogólnie "odpaliłem" wreszcie te emulację EEPROMa w FLASH. Działa, ale mam jedno pytanie, wirtualny adres zmiennych, czy muszę jakoś uważać na to co tam wpiszę? Chodzi mi o tę linijkę kodu: [syntax=c]uint16_t VirtAddVarTab[NB_OF_VAR] = {0x5555, 0x6666, 0x7777};[/syntax] To pytanie dedykuję głównie...
No to ja nie wiem jak Wy piszecie te programy, bo mój program dla STM32F0DISCOVERY mrugający LED'ami po kompilacji zajmuje 564 bajty. [syntax=c] int main(void) { GPIO_InitTypeDef GPIO_Init_t; SysTick_Reload(60000); // wartość dla czasu 10ms SysTick_CLKSource(SysTick_CLKSource_HCLK... // Fsystick = CCLK/8=6MHz SysTick_IRQEnable(ENABLE); // włączenie...
Witam, Mam procesor STM32f030RCT6 (256kB flash, 32 kB ramu). Program napisany z wykorzystaniem wygenerowanego kodu w CUBE MX w środowisku AC6 . Zrobiłem już 5 płytek i co ciekawe na dwóch program działa bez problemu , a na trzech pozostałych już nie . Podglądając w trybie Debug widzę coś takiego jak zatrzymam wystartowany program: https://obrazki.elektroda.pl/5695132000_...
Dobry wieczór Mam podłączony do płytki wyświetlacz. Chcę wysłać przy użyciu SPI i DMA do niego dane początkowo ich liczba to 65535 i jakiś tam początkowy kolor pikseli następnie w przerwaniu od DMA końca transferu ustawiam nową wartość 11265 i inny kolor pikseli. Nie wiem z jakiego powodu poniższy kod działa w środowisku Keil, a w STM32CubeIDE już nie,...
Witam od pewnego czasu probuje uruchomic żyroskop l3gd20 na płytce Discovery stm32f0072B-disco , niewiem gdzie robię błąd . [syntax=c] SPI_HandleTypeDef hspi2; void SystemClock_Config(void); void Error_Handler(void); static void MX_GPIO_Init(void); static void MX_SPI2_Init(void); uint8_t data; uint8_t setting; int main(void) { HAL_Init(); SystemClock_Config();...
Witam, Przesiadam się z STM32F103 na F051, a raczej ćwiczę sobie na obu tych mikrokontrolerach. Napisałem program na F0, w celu poćwiczenia sobie z konfiguracją interfejsu SPI. Zadanie jest takie SPI1 posyła dane, a SPI2 odbiera je zgłaszając odbiór. Interfejsy podłączyłem ze sobą SPI1->MISO z SPI2->MISO SCLK - SCLK MOSI - MOSI Niestety komunikacja...
Rozwiązałem już swoje problemy następnego dnia po napisaniu posta, ale nie zdążyłem tu napisać, przepraszam. Dziękuję za porady, mimo że po czasie. Problem z delayem rzeczywiście leżał w priorytetach RTC_Handler i SysTick_Handler. Nie rozumiem tylko, dlaczego SysTick_Handler miał niższy priorytet od RTC, skoro w pliku z wektorem SysTick ma priorytet...
Witam, mam dziwny problem. Wczoraj napisałem program obsługujący wyświetlacz LCD przez I2C dziś rano nie pojawia się kursor. Wyświetlacz reaguje na niektóre komendy.Rezystory podciągające są. Nie sprawdzam bitu zajętości gdyż czekam dość długo na wykonanie polecenia. Może ktoś zechce przeanalizować kod :) Kod:[syntax=c]#include "stm32f0xx.h" #include...
Witam, za pomocą STM32 F072RB steruje silnikami krokowymi. Problem polega na tym iż nie mogę w tym samym czasie mieć włączonych dwóch silników. Włączanie kolejnego silnika następuje po wyłączeniu aktualnie działającego silnika. Tu nasuwa się pytanie, jak to zmienić? Tak, aby silniki mogły pracować równolegle niezależnie od siebie tzn. jeden silnik obraca...
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...
Za dużo tego jest :^( Z tego merge wynika, że zostało dodane/zmienione 55 plików :^O No widzisz, tak to właśnie wygląda (; Niemniej jednak z tych 55 plików 17 związanych jest z paczką CMSIS dla serii STM32F1 (external/CMSIS-STM32F1), a 9 związanych jest z wsparciem dla płytki NUCLEO-F103RB. Zostaje więc 29 (; Z tych 29 można wyodrębnić absolutne minimum,...
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...
Przykładowy program przedstawiający opóźnienie przycisku. Jak przycisnę to program i tak musi dojść do miejsca sprawdzania warunku. Chodzi mi o takie samo tylko z użyciem przerwania (wyłączenie migania natychmiast) /** ****************************************... * (at)file main.c * (at)author Ac6 * (at)version V1.0...
Ja mam taką funkcję od opóźnienia zrobionego na podstawie SysTick'a, nawet działa. Korzystam z niej podczas komunikacji 1wire i wszystko pięknie śmiga. W funkcji delay_init( 168 ); wpisujesz częstotliwość zegara w MHz np. dla STM32F4. [syntax=c_loadrunner]#include "../lib/stm32f0xx.h" #include "delay.h" static uint8_t fac_us = 0; void delay_init( uint8_t...
Są makra tylko struktura nazywa się SysTick a nie STK
A pisałem, żeby nie ruszać _NIC_ poniżej SysTick włącznie... Jeśli weźmiesz tablicę dla STM32F4 bez ŻADNYCH zmian, to Twoje przerwanie zadziała, bo ten obszar tablicy jest identyczny dla tych dwóch rodzin. 4\/3!!
Nie zauwazylem zadnej struktury dla SysTicka poza tymi definicjami. Zajrzyj do core_cm3.h , tam jest gotowa funkcja z CMSIS SysTick_Config(uint32_t ticks) i tam też znajduje się odpowiednia struktura w tym headerze. SysTick jest dostarczany z rdzeniem przez ARM. Dlatego konfigurację NVIC, ITM czy SysTick nie szukasz na stronach producenta mikrokontrolera...
systick interrupts stm32f4 systick systick handler
lexia sterowniki interfejsu volvo silnika cyfrowy odtwarzacz audio
schemat migajaca dioda p1445 citroen
Toyota Starlet 1998 – kody błędów TOBD i OBD-II, procedura odczytu, typowe usterki Kod błędu P063872 - problem z przepustnicą w Renault