Dzięki. Próbuję się dowiedzieć co kryje się pod tą instrukcją: SysTick->CTRL = 7; Wpisanie 7 do SysTick->Ctrl Znalazłem tylko to To drogi Sherlocku skoro już nie masz PM0056 to dodaj sobie 1 + 2 + 4 i co Ci wyjdzie? :)
Definicja funkcji ma być tylko w JEDNYM pliku. Z drugiego (wybierz sobie którego) musisz ją więc usunąć.
SysTimer jest wykorzystywany w FreeRTOS jako zegar systemowy. Ale jeżeli potrzebujesz timera(dla zliczania czasu będącego wielokrotnością zegara systemowego) dla jakiejs innej biblioteki możesz wykorzystać vApplicationTickHook(), gdy tylko masz symbol configUSE_TICK_HOOK zdefiniowany na 1 (plik FreeRTOSConfig.h). Funkcja ta jest wywoływana w przerwaniu...
Zerknij sobie to pliku .lss i sprawdź następujące rzeczy: 1. czy w ogóle jest tam funkcja SysTick_Handler 2. czy adres funkcji SysTick_Handler zgadza się z adresem widocznym w tablicy wektorów (pod adresem 0x800003c) - adres w tablicy wektorów będzie miał nieparzystą wartość (jeśli np. funkcja SysTick ma adres 0x8001000, to w tablicy wektorów będzie...
(at)grzegorzn Najlepiej by było jakbyś wkleił tutaj loga kompilacji. Odnośnie drugiego problemu to wygląda to na pierwszy rzut oka na niezadeklarowany Systick handler.
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
Porównaj: SysTickHandler SysTick_Handler 4\/3!!
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
To chyba nie wina stosów. Jest różnica nazewnictwa funkcji obsługi przerwań pomiędzy FreeRTOS a biblioteką CMSIS. U mnie w identycznej sytuacji pomogło dodanie do pliku port.h (z katalogu SOURCE/portable/gcc/ARM_CM3) tych linijek: // To be complaint to CMSIS and ST standard peripherals library name convention. #define vPortSVCHandler SVC_Handler #define...
[syntax=C]void SysTick_Handler(){ SysTick_Config(prescaler_systic);[/synta... W jakim celu w obsłudze przerwania od SysTick, ponownie konfigurujesz licznik? Logika podpowiada, że raz uruchomiony działa i nie trzeba nic więcej robić. Jeżeli po odliczeniu czasu, przyjmujesz przerwanie, przechodzisz do ustawiania i na nowo startujesz licznik, to częstotliwość...
W tablicy wektorów zupełnie nic nie zmieniasz (jak zwykle) - system masz połączony ze sprzętem poprzez te 3 definicje: #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler Mam nadzieje że masz je w jakimś pliku dołączonym do port.c, np FreeRTOSConfig.h 4\/3!!
Nie pochwalę się pewnie teraz wiedzą ale już piszę co zrobiłem że mi zaczął freertos banglać.. :) A więc - podpięte przerwania miałem w pliku stm32f10x_it.c: [syntax=c]void SVC_Handler(void) { vPortSVCHandler(); //FreeRTOS SVC Handler } void PendSV_Handler(void) { xPortPendSVHandler();//FreeRTOS PendSV Handler } void SysTick_Handler(void) { xPortSysTickHandler();//FreeRTOS...
Program zachowuje się gdyby chciał a nie mógł skorzystać z SysTick_Handler. Najpierw kod: http://obrazki.elektroda.pl/6717645500_1... Przy zmniejszeniu ilości taktów na przerwanie w systicku i debugowaniu po kroku przerwanie w ogóle nie występuje. A gdy przy w/w kodzie ma być wywołane przerwane (via step to line) program wiesza się w...
Przypisania są w FreeRTOSConf.h zrobione tak jak było to w poprzednich wersjach FreeRTOSa: [syntax=c] #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler [/syntax] W port.c są zaimplementowane powyższe funkcje. Kawałek tablicy wektorów przerwań z startup_LPC17xx.c [syntax=c] /** *(at)brief...
Czy plik wygenerowany przez nowy projekt ale z dołączonymi bibliotekami HAL będzie dobry? W nim znajdują się już te przerwania. Dodaj tylko to co Ci napisałem. Znajdz w dokumentacji procesora gdzie w tablicy przyrwan jest ten EXTI15_10 - i tam zamiast zera wstaw nazwe seojego handlera. I to wszystko. Tu masz zresztą tę tablicę - policz sobie gdzie...
Podsumowujac wszystko to powinno to wygladac mniej wiecej tak - staralem sie juz dobrac odpowiednie wartosci z plikow naglowkowych: /***************************************... /* */ /* SystemTick */ /* */ /***************************************... /***************** Bit definition...
A powodem przejścia do Default_Handler() może być równie dobrze dowolny inny błąd w programie, np. brak przydzielonego dla przerwań stosu (skrypt linkera). Ustawiłeś rozmiar stosu dla przerwań? Jesteś 100% pewny, że NIGDY nie wchodzi do tego przerwania, nawet jeden raz? Zobacz sobie w pliku assemblera (nazwa_projektu.lss w folderze out, jeśli korzystasz...
Witam wszystkich serdecznie! Potrzebuję pomocy z pewnym zadaniem z systemów wbudowanych, 4 rok studiów. Programuję w języku C środowisku CooCox CoIDE procesor STM32F103ZET6 użyty w module HY-RedBull_V3 posiadający 3,5-calowy ekran dotykowy TFT LCD HY35A (kontroler LCD SSD1963, kontroler ekranu dotykowego ADS7843 lub XPT2046), który ma wykonać poniższe...
Musisz się jednego z nich pozbyć. Albo użyć tego callbacka z HAL-a czyli HAL_SYSTICK_Callback i tam umieść swój kod obsługi tego przerwania. lub jezeli z HAL-a nie bedzie w ogóle korzystał to dodać do definicji w pliku xxxxxx_it.c __weak przed SysTick_Handler Najprościej będzie po prostu usunąć plik stm32l4xx_it.c z kompilacji skoro i tak nie korzysta...
Czy do końca czy nie to ja nie wiem, bo wnętrzności kompilatorów to nie do końca moja działka, ale może bym jednak poczytał :D. No ale na 6.3 lto mi kod zmniejsza o dobre 10%, i wszystko działa poprawnie. I w sumie na tym 6.3 sobie siedzę, zgodnie z zasadą "jak działa to nie ruszaj", tylko jak wychodzi jakaś nowsza wersja to z ciekawości sprawdzam czy...
Obejrzyj jakiekolwiek przykłady programów na uC z rdzeniami Cortex - znajdziesz całe mnóstwo przykładów z SysTick, np. takie coś: [syntax=c]//============================... int main(void) { // port setup RCC->AHBENR = RCC_AHBENR_GPIOCEN;// GPIOC LED_PORT->MODER = GPIO_MODER_OUT << (GREEN_LED_BIT...
Najlepiej skorzystaj z jakiegoś przykładu na Twojego procka. Tak ogólnie to: - dodajesz katalogi include oraz portable/GCC/ARM_CM3 do include path - kompilujesz plik port.c z katalogu portable/GCC/ARM_CM3 - kompilujesz jeden plik z katalogu portable/MemMang (np heap_2.c) - kompilujesz wszystkie pliki zawarte w głównym katalogu FreeRTOSa W projekcie...
Pisałem o hard fault handler. Tam ustaw zmianę pinu albo breakpoint debugerra. Standardowo masz łatwo bo wszystkie kończą w jednej funkcji zwanej default handler
Witam, mam następujący problem: napisałem dwa proste programy, pierwszy testuje przerwanie od timera a drugi testuje przerwanie SysTick. Problem polega na tym że oba nie działają. W pierwszym przypadku program zamiast skoczyć do funkcji obsługi przerwania, wpada w nieskończoną pętlę.(w pliku startup_LPC11xx.s w linijce 196), a w drugim programie przerwanie...
Te mikrokontrolery mają coś takiego jak System Tick Timer, dzięki któremu możesz ustawić przerwania z dokładnością do 10ms. Ja mam coś takiego ustawionego dla LPC1343 (inicjalizacja SysTick): [syntax=c] // System Tick Clock source: System clock SysTick -> CTRL = 0x7; // Program the LOAD register (10msec) SysTick -> LOAD = 0x0927BF; // Clear SysTick...
oczywiście że nie pliku z main :). Masz takie pliki z końcówką _it. Poszukaj sobie. Zresztą koncepcja HAL-a zakłada pisanie w callbackach a nie modyfikowanie HAL-owych handlerów. Dla przykładu dla przerwania SysTick piszesz sobie funkcję o nazwie [syntax=c]void HAL_SYSTICK_Callback(void)[/syntax] i swój kod wkładasz tam.
(at)Gunis-92: Możesz wykorzystać do odmierzania czasu np. SysTick [syntax=c] volatile uint32_t licznik_tykniec;// zmienna globalna /* obsluga przerwania od licznika/timera SysTick */ void SysTick_Handler(void) { licznik_tykniec++;// inkrementacja licznika } void delay(uint32_t czas) { uint32_t aktaualny_licznik_tykniec; aktaualny_licznik_tykniec = licznik_tykniec;...
Bierzesz przykładowy projekt z mojej strony, wrzucasz do tego FreeRTOSa - czyli dodajesz katalogi FreeRTOSa do odpowiednich pól w Makefile: [syntax=bash]# additional directories with source files (absolute or relative paths to # folders with source files, current folder is always included) SRCS_DIRS = FreeRTOS FreeRTOS/portable/GCC/ARM_CM3 FreeRTOS/portable/MemMang...
Jeżeli chodzi o ffconfig.h to próbowałem różnych ustawień a z desperacji ;) nawet zupełnie kosmicznych ich kombinacji. Jeżeli chodzi o ustawienia kompilatora to -O0 -> prawie najnowszy bleeding edge toolchain. Przed każdym buildem robię clean'a. Dodam, że dzieje się to na dwóch różnych kartach. Próbowałem też z różnymi typami zmiennych a uchwyt systemu...
[syntax=c]void SysTick_Handler(void){ BB(GPIOA->ODR, GPIO_ODR_OD8) ^= 1; }[/syntax] Chyba że jest w tym coś źle. Ewentualnie: [syntax=c]void SysTick_Handler(void){ GPIOA->ODR ^= GPIO_ODR_OD8; }[/syntax]
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...
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ę...
Może mi podpowiecie Ten sam uC STM32f103 ale odpaliłem Keila ARM. Czy w tym środowisku pisząc jakąś obsługę przerwania muszę na początku funkcji dodać prefiks __irq? Coś takiego kiedyś było, tylko nie mogę sobie przypomnieć? np coś takiego [syntax=c]__irq void SysTick_Handler(void) { } czy takiego ma być void SysTick_Handler(void) { }[/syntax] z tym...
Panowie, problem rozwiazany, poniewaz poczatkowo korzystalem tylko z przerwan (glownie systick) miałem ustawioną maske SCB_SCR_SLEEPONEXIT_Msk w SCB->SCR. Gdy zaczalem wrzucac do main() co rusz to cos wiecej, pierwsze wywołanie handler-a Systick zatrzymywało wykonywanie funkcji która została przerwana. Debugger omijal to ograniczenie. Dotarlem do tego...
Witam, Właśnie jestem w drugiej lekcji kursu EP 32 bity jak najprościej i jestem przy Blink 1. Mam problem z częstotliwością. Ustawiłem, aby przerwanie wywoływało sie co 1kHz a mam 3kHz. http://obrazki.elektroda.pl/9026530800_1... Wykorzystuję środowisko Atollic TrueSTUDIO for ARM Lite 3.2.0 Jak bawiłem się tym zestawem rok temu tym...
Gdzie to extern? Mój plik ma rozszerzenie *.cpp ok. extern "C" void SysTick_Handler(void)
FreeRTOS wymaga aby była implementacja SysTick_Handler, SVC_Handler oraz PendSV_Handler. Spróbuj dorzucić do swojego kodu obsługę tych przerwań.
Witam. Aktualnie walczę z kompilatorem GCC non-eabi. Chcę utwożyć projekt w C++ używając własnego skryptu linkera, jednak po długiej walce nie mam już pomysłu na rozwiązanie. W jaki sposób skonfigurować kompilator, linkera oraz skrypt linkera tak abym mógł własne tablice zdefiniowane w plikach .cpp wstawić w wybrane prze zemnie miejsce w pamięci? Wersja:...
Popełniłem coś takiego, pomijając jedno niezbędne słowo kluczowe. A tu niespodzianka - działa zgodnie z planem pomimo ewidentnego błędu. Oczywiście daje się to rozsądnie wyjaśnić i uzasadnić - nieźle się przy tym ubawiłem. [syntax=c]#include "stm32f10x.h" #define SYSCLK_FREQ72000000 #define SYSTICK_FREQ100 #define LED_BIT13// PC13, active low int main(void)...
Poradnik dla początkujących, ale jedyne czego w nim brakuje to opisu jak z konfigurować środowisko do pisania na rejestrach. W sumie to masz już środowisko i tak naprawdę nic nie musisz konfigurować aby programować używając rejestrów. W CubeIDE masz przynajmniej pewność, że wszystkie pliki CMSIS są aktualne. Jak zrobić projekt bez HAL: 1. Wygenetuj...
Gdy utworzysz pusty project dla F0Discovery w TrueStudio najnowszym to on automatycznie wygeneruje pierwszy program do mrugania LEDami. O taki: [syntax=c]#include <stddef.h> #include "stm32f0xx_rcc.h" #include "stm32f0xx_gpio.h" /* Private typedef */ /* Private define */ /* STM32F0_DISCOVERY board definitions */ #define LED_PORT GPIOC #define...
Dzięki za podpowiedź, w dzień spróbuję napisać ten licznik i wstawię kod. A do do delay to jak teraz patrzę to chyba coś pomyliłem. Czy było by dobrze gdybym napisał: [syntax=c]volatile uint32_t a=0; void SysTick_Handler (void) { if(a) { a--; } } void delay(int time) { a=time; while(a); }[/syntax] I jeszcze pytanie, jak mógłbym napisać tą funkcję opóźniającą...
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...
Jeśli chodzi o środowisko AC6, to mogę opisać konfigurację na przykładzie STM32L476. Najpierw należy utworzyć nowy projekt z zaznaczonymi opcjami: http://obrazki.elektroda.pl/9462029000_1... Następnie w utworzonym projekcie usuwamy katalogi: HAL_Driver, oraz Utilities. http://obrazki.elektroda.pl/8879527800_1... Teraz...
Wszystko okej, tylko nie bardzo wiem gdzie i jak skonfigurować ten port i jak skonfigurować ten data trace? Podłączyłem płytkę nucleo. Ja przerabiam ST-Link do J-link bo Segger ma lepsze oprogramowanie - u Ciebie zamiast J-Link wybierz ST-Link 1. Wybierz trace async SW w oknie cube (plik ioc) https://obrazki.elektroda.pl/2555985600_...
Funkcja _delay_ms() [syntax=c] volatile uint32_t usTick; volatile void _delay_us(uint32_t us){ usTick = us; while(usTick); } volatile void _delay_ms(uint16_t ms){ _delay_us(ms*1000); } void SysTick_Handler(void){ if(usTick != 0)usTick--; } [/syntax] I w funkcji main() jeszcze to: SysTick_Config(72000000/1000000);
(at)Freddie Chopin , już się uporałem z tym problemem. Tak myślę :) Faktycznie problem tkwił w złej implementacji jednej z funkcji. Działa! Dzięki za pomoc! W pliku FreeRTOSConfig.h dodałem tę linijkę: stm32f7xx_it Nie wiem, może da się to zrobić w jakiś bardziej elegancki sposób? (at)Freddie Chopin , dzięki jeszcze raz za pomoc! Zamykam temat.
Witam, Napotkałem ostrzeżenie przy kompilacji kodu: [syntax=csharp]#include "stm32f10x.h" int main(void) { RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; //Wlaczenie zegara portu A /*dioda*/ GPIOA->CRL |= GPIO_CRL_MODE5_1; //Wyjscie 2MHz GPIOA->CRL &= ~GPIO_CRL_CNF5_0; //Open-drain SysTick_Config(4000000); while(1) { }/*while*/ }/*main*/ __attribute__((interrupt))...
Ech, mam dzisiaj dzień dobroci... [syntax=c]#include "stm32f10x.h" #define SYSCLK_FREQ72000000 // jesli srodowisko magicznie nie skonfigurowalo zegara -> zmienic na 8000000 #define SYSTICK_FREQ100 #define LED_BIT13// PC13, active low //======================================... int main(void) { // enable peripherals...
A masz coś takiego dodane w FreeRTOSConfig.h #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define vPortSVCHandler SVC_Handler #define xPortSysTickHandler SysTick_Handler
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]
A może coś takiego: [syntax=c]bool Tick(unsigned & moment, unsigned timeout) { if (systickValue - moment > timeout) { moment = systickValue; return true; } else { return false; } }[/syntax] [syntax=c]void systick_handler() { if (systickValue++ - moment > timeout) { moment++; } }[/syntax]
[syntax=armasm]g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler /* External Interrupts */ .word WWDG_IRQHandler /*...
[syntax=c] void SysTick_Handler(void) //podprogram przerwan { X0=(X>>S)<<S; //pierwszy element X1=X0 + (1 << S); //następny element Y0=TAB[X>>S]; Y1=TAB[((X >> S) + 1) % 1024]; DAC_SetChannel1Data(Y0+(X-X0)*((Y1-Y0)/(... X +=dX; } [/syntax]
SysTick_Handler - nie znam programu, który by nie używał tych przerwań, no chyba, ze chodzi o miganie diodą. EXTI15_10_IRQHandler - nie zaznaczyłeś w Cube jakiegoś przerwania od GPIO? Nie przypominam sobie aby Cube generował to niepotrzebnie. HardFault_Handler - nie było czy wywaliłeś? BusFault_Handler - to samo pytanie UsageFault_Handler - to też?
Istnieje pewna szansa, że jak dorzucisz następujące linijki do pliku FreeRTOSConfig.h to powinno się naprawić. #define vPortSVCHandler SVCall_Handler #define xPortPendSVHandler PendSV_Handler #define xPortSysTickHandler SysTick_Handler Jeśli nie, to wrzuć tu cały projekt (tylko bez plików wynikowych, ewentualnie plik typu .lss). 4\/3!!
Korzystam z przykładowych projektów dostarczonych przez ST w programie IAR. Po lewej stronie okna programu znajduje się okienko z drzewem folderów i pośród nich znajdują się dwa pliki ze 'startup' w nazwie: startup_stm32f10x_md.o i startup_stm32f10x_md.s (zawartość plików znajduje się poniżej). To o te pliki chodziło? Zawartość dość znacznie się różni....
Znalazłem w pliku [syntax=c]uint32_t SystemCoreClock = 72000000;[/syntax] jednak nie posiadając zewnętrznego kwarcu nie jest on w stanie pracować z taką prędkością a program jest kompilowany na nią i dlatego mam problemy. Muszę wlutować kwarc 8MHz i kondensatory 22pf. Wystarczy sama funckja bez atrybutu? [syntax=c]void SysTick_Handler(void)[/syntax]
Mam jeszcze main [syntax=c]#include "MKL46Z4.h" #include "sLED.h" #include "rtc.h" extern uint32_t data; void SysTick_Handler(void) { sLCD_DisplayDec(data); } int main(){ SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock / 10); sLCD_Init(); RTC_Init(); while (1){ data=rtc_read(); } } [/syntax] Reszta bibliotek jest pewna bo działy w innych. Debugera...
1. Rzeczywiście zapomniałem dołączyć kod obsługi przerwania (zdefiniowane w innym pliku): [syntax=c] void SysTick_Handler(void) { TimingDelay_Decrement(); } [/syntax] 2. Ten komentarz nad funkcją delay to niezmodyfikowany komentarz z przykładowego programu - nie sugerujcie się tym (nie pisałem tej funkcji od zera) 3. Problem rozwiązany - miałem złe...
ok, odblokowałem, odkomentowałem, lecz pojawił się kolejny problem, z którym naprawdę nie wiem co zrobić: .\obj\gpio_test.axf: Error: L6218E: Undefined symbol TimingDelay_Decrement (referred from stm32f4xx_it.o). Jak otworzylem plik stm32f4xx)it.c to odnośnie timingDelay zobaczyłem tylko takie coś: [syntax=cpp] void SysTick_Handler(void) { TimingDelay_Decrement();...
Przykład z biblioteką SPL: [syntax=c] static __IO uint32_t TimingDelay; //--------------------------------------... void SysTickConfig() { RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency / 1000);// 168MHz/1000=168000/s (1ms) } //--------------------------------------...
Witam, sprawdzę wieczorem ale pewnie będzie problem z __attribute__ ((interrupt)) bo teraz jak to dodałem to kod się zmienił (3 linijki w asemblerze na początku i 2 na końcu funkcji ). xQueueSendFromISR dodatkowo używa portSET_INTERRUPT_MASK_FROM_ISR i portCLEAR_INTERRUPT_MASK_FROM_ISR tak samo jak SysTick_Handler, a on ma __attribute__ ((interrupt))...
Proszę o naprowadzenie na właściwą drogę. Gdzie w kodzie konfigurujesz przerwania SysTick ? Funkcja SysTick_Handler() nigdy się nie wykona! A jak włączyć diody aby wyświetliła się np. litera 'K' ? To nie Arduino. Tego nie załatwi jedna linijka kodu. Musisz w przerwaniu, sekwencyjnie, wysterować poszczególnie wiersze lub kolumny. Obsługiwałeś juz wyświetlacze...
delay.h [syntax=c]void Delay_ms(__IO uint32_t nTime); void SysTick_Konfiguracja();[/syntax] delay.c [syntax=c]static __IO uint32_t TimingDelay; void SysTick_Konfiguracja() { RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency... } void SysTick_Handler(void) { if(TimingDelay)TimingDelay--; } void...
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,...
Jak stworzyć zwykły stoper który zaczyna liczyć przy wciśnięciu przycisku i kończy przy jego zwolnieniu? Użyć do tego tych najprostrzych timerów czyli tim6 lub tim7? Rdzeń ARM posiada swój własny timer SystemCoreClock to częstotliwość zegara systemowego. Zliczanie: [syntax=c]void SysTick_Handler(void) { if(przycisk_naciśnięty)licznik_milisekun...
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
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...
Dodano po 31 Kiedy debuguje program, krokowo, zaraz po a = 124; z linii b = log10(a); wskakuje do nieskończonej pętli - void HardFault_Handler(void). Tak jakby sam adres procedury wywoływał błąd sprzętowy.
Radzę zignorować powyższą poradę... Tablica wektorów ma poprawną "formę", więc radzę jej nie psuć... Wielu osobom działa, więc nie szukaj błędu tam gdzie go nie ma. Zresztą gdyby ta część była błędna, to układ nawet by nie wystartował, wiec chyba jednak warto założyć, że nie ma tu "błędu". W tablicy wektorów popraw tylko te wektory, które są "powyżej"...
Spróbuj tak: [syntax=c] /* * Topic: * * Author: Juffre * */ /* BASIC HEADERS---------------------------------... */ #include "MKL46Z4.h" /* DEFINITIONS ----------------------------------------... #define SYSTICK 1 // 1 - enabled 0 - disabled #define FREQUENCY 3 // [Hz]...
Pełny kod ( nie wiem w jaki sposób wysłać, wiec wklejam zwyczajnie) : #include "stm32f1xx_it.h" extern __IO uint8_t BlinkSpeed; void NMI_Handler(void) { } void HardFault_Handler(void) { while (1) { } } void MemManage_Handler(void) { while (1) { } } void BusFault_Handler(void) { while (1) { } } void UsageFault_Handler(void) { while (1) { } } void SVC_Handler(void)...
Zmieniłem : 2. change The initial stack pointer in the vector table: (void *)&pulStack[STACK_SIZE-1]... to (void (*)(void))((... long)pulStack + sizeof(pulStack)), w startup_stm32f10x_md_vl.c Dalej to samo. [syntax=c]/** ****************************************...
Od kilku dni próbuję uruchomić FreeRTOS i zamigać diodami na zestawie Hymini z procesorem STM32F103VCT6. Używam Eclipse Juno oraz Sourcery G++ Lite 4.6.3. Projekt kompiluje się poprawnie. Wcześniej program zatrzymywał się na przerwaniu HardFault_Handler. W pliku FreeRTOSConfig.h dodałem więc linie #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler...
BlueDraco Zadeklarowałem zmienną get_counter w przerwaniu od TIM1 jako static volatile, ale nie mogę podejrzeć tej zmiennej, ponieważ pojawia się błąd gdy wybieram z opcji Run to Line http://obrazki.elektroda.pl/2626785800_1... W ten sposób mogę "iść" do przerwania [syntax=c] void SysTick_Handler(void) [/syntax] natomiast do przerwania...
Dodałem konfiguracje SysTick do obu projektów. Zero efektu. Już mi się kończą pomysły. Przejrzałem konfiguracje linkera, kompilatora i nic. Nie wiem czego się złapać. Wszystkie inne projekty działają a nie umiem uruchomić żadnego RTOS'a. Dodano po pewnym czasie Odpaliłem FreeRTOS Wiedza dla potomnych. Wystarczyło w pliku port.c włączyć aliasy przerwań...
Wygenerowany jest bezpośrednio z CooCoxa Linkera tutaj nie ma chyba jest zaszyty w środowisku. Wersja CoIDE to: Version: 1.7.8 [syntax=c] /** ****************************************... * (at)file startup_coide.c * (at)author Coocox * (at)version V1.0 * (at)date 20/07/2010 * (at)brief M0 M3 Devices Startup code. *...
Udało mi się przysiąść nad tym dałem tak [syntax=c] #define MillisecondsIT 1000000 SystemCoreClockUpdate(); SysTick_Config(SystemCoreClock/Milliseco... i przerwanie void SysTick_Handler(void){ GPIOE->ODR ^= GPIO_ODR_8; } [/syntax] to mi daje wynik 499.8kHz czyli 2µs czyli 1µs bo się stan na wyjściu 2x "przekręca" daje potem do testów [syntax=c]...
(at)habrat włączasz taktowanie AFIO? Dodano: Tak sobie myślę, że grono osób chętnych do analizowania Twojego kodu byłoby większe, gdyby był ładnie sformatowany i ogołocony ze wszystkiego co nie potrzebne, ale to Tobie powinno zależeć ;) Bo teraz to... szybciej można to napisać od zera: [syntax=c]int main(void) { RCC_InitMax(); /* HSE, PLL, 72MHz */...
Zdjęcia mi niezbyt piękne wychodzą, ale odczytałem z obudowy HK32F030MF4P6, a poniżej seria chyba 07S36170 (te S3 są niepewne, reszta na 95%). Woltomierz przyłożony pomiędzy masę i VCAP pokazuje ok. 0.7 V. To samo pokazuje pomiędzy Vdd i VCAP, więc wnioskuję, że VCAP wisi. Po ustawieniu PD7 jako wyjścia mam zmiany stanu na VCAP - napięca 0 i Vdd naprzemiennie.....
JTAG_TCK_PIO0_10 wziąłem z LPC11xx.h dołączonego przy tworzeniu projektu w CooCox CoIDE. Faktycznie ustawienie LPC_SYSCON->SYSAHBCLKCTRL |= (1<<11); skutkowało pojawieniem się SCK na PIO_010. Jenak nadal na PIO0_9 brak było MOSI, walczyłem jakieś 2 godziny z różnymi ustawieniami w końcu wpadłem na pomysł aby zmieniać w obsłudze SysTick_Handler...
1 ms to nie przesada, zostało mi z góry narzucone ponieważ bardzo liczy sie precyzja ruchu oto zczytywanie danych z encoderow: SysTick dziala co 1 ms [syntax=c] void SysTick_Handler(void) { Encoders_Read(); } [/syntax] teraz funkcja Encoder_Read [syntax=c] void Encoders_Read(void){ // Odczytanie predkosci z enkoderow oldLeftEncoder = leftEncoder; leftEncoder...
Doczekał się kol.Freddie konkretnego pytania :) W ogóle to udało mi się jakoś pokonać Attolic-a więc problem z Eclipse w zasadzie uważam za rozwiązany :) Niestety posługuję się książką niejakiego Paprockiego i z przykrościa uważam że to najgorzej wydane pieniądze ostatnich kilku tygodni. Uważam tak z powodu przykładów które zamieszcza niestety zapomniało...
Witam, wystarczyło wyrzuć wszystkie pliki z tego od lpc i wrzucić te od stm32f103. Teraz już nie mam błędów :). Muszę dokładnie przeanalizować różnice. Dzięki wielkie koledzy. Przy okazji mam jeszcze jedno pytanie dostaje takie oto warningi: DescriptionResourcePathLocationType Unused declaration of function 'PendSV_Handler'port.c/stm32f103/RTOSlin...
Wskazany w linku debugger to zapewne JLink ale za cenę niespełna 10 $ to napewno nielegalny klon :) Jeżeli chcesz poznać LPC'ki i mieć debugger to wejściami . Kiedyś zapomniałem o tym fakcie i dziwiłem się dlaczego program nie działa tak jakbym się tego spodziewał.
Przejzalem tematy na forum a nie moge uruchomic przerwania na pinie PC13 (nucleo l1 board) [syntax=c] #include "led.h" #include "delay.h" #include "button.h" int main(){ setup_LED(); setup_DELAY(); setup_BUTTON(); blink_led(); LED_ON; delay_ms(1000); LED_ON; while(1){ } while(1); } void SysTick_Handler(){ if (delay_counter > 0){ delay_counter--; } void...
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...
Zastanawiająca jest ostatnia linia: pc: 0x2000003a, która sugeruje, że program idzie z RAM-u? Może trzeba przestawić na płytce jakieś zworki? Niby wszystko kompiluje się dobrze, w tablicy wektorów przerwań jest odpowiedni wektor na właściwym miejscu, stosy są ustawione, a do przerwania nie wchodzi. Ale program kręci się w tej pustej pętli while (1);,...
Zmieniłem przerwanie na: [syntax=c] void SysTick_Handler(void) { time++; if (time == 500) { __disable_irq(); SaveContext(); readyTable[currID]->stack = (unsigned int*)__get_PSP(); if (currID == 0) currID = 1; else currID = 0; __set_PSP((uint32_t)readyTable[currID]->... LoadContext(); time = 0; __enable_irq(); } } [/syntax] oraz inicjalizację na:...
Witam, Napisałem prosty kod w Keilu: http://obrazki.elektroda.pl/2538882800_1... http://obrazki.elektroda.pl/8553934200_1... Oscyloskop: 2 V /DIV 0.05 us /DIV
Przecież to od razu wiadomo o co chodzi... Ja nigdy w życiu nie używałem RTOSa ale powiem Ci gdzie masz błąd: \STM32Rtos7.1.0\STM32Rtos\RtosV611\Sourc... [syntax=C]// To be complaint to CMSIS and ST standard peripherals library name convention. #define vPortSVCHandler SVC_Handler #define xPortPendSVHandler PendSV_Handler #define...
Prewencyjnie ustawiłem oba stosy, bez tego SysTick nawet nie działał :) [syntax=asm]/* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts) can use only main stack */ /* Thread mode...
Rzeczywiście wystarczyło to zaznaczyć i jest już lepiej, przynajmniej próbuje coś kompilować :) Niestety pojawił się kolejny problem, tym razem chyba trudniejszy do rozwiązania. GCC strasznie nie podoba się plik startup... [syntax=c];******************** (C) COPYRIGHT 2010 STMicroelectronics ******************** ;* File Name : startup_stm32f10x_hd.s...
Witam, wykorzystywałem Sistick w w swoich programach do generowania przerwań, jadnak wydawały mi się za częste. Więc sprawdziłem to na prostym przykładzie. Chciałem wygenerować przerwanie co 1s, wiec zapisałem SysTick_Config(8000000); (taktowany wew generatorem RC 8MHz). Po spradzeniu analizatorem okazało się, że wykonuje się ono 10 razy na sekundę....
Cześć, Miałem już problem z konfiguracją FreeRTOSa. Szczegóły: [url=]https://www.elektroda.pl/rtvforum/... Myślałem, że po dorzuceniu tych 3 linijek do FreeRTOSConfig.h i zakomentowaniu jednej z implementacji SysTicka wszystko już będzie działać jak należy... A jednak nie :P Pojawił się kolejny problem. Chcę skorzystać z funkcji...
Ale jak program może opuścić funkcję obsługi przerwania, będąc wewnątrz funkcji TM_I2C_ReadMulti?[syntax=c]void SysTick_Handler(void) { L3GD20H_read_rates(&xrt, &yrt, &zrt); LSM303D_read_acc(&x, &y, &z); if(!(sys_utime % 8)) LSM303D_read_mag(&mx, &my, &mz); IRQflag = 1; sys_utime++; gps_utime++; }[/syntax] [syntax=c]void...
Masz rację, że szkoda całego tygodnia na taki problem:). Oto cały kod: Main: http://obrazki.elektroda.pl/2257364500_1... podłączenie do STM'a wygląda nastepująco: RxD do PA10, TxD do PA9. Więc nadal stoję w miejscu, ale nie poddaje się;).
Freddy Bo nie proste jest opisanie absurdalnego problemu... wklejam kod: dondu bo optymalizacja nie zawsze idzie w parze z poprawnością wykonywanego kodu.
stm32 systick error handler freddie handler
naprawa telewizor philips chwili przestaje ładować telefon akumulator skuter elektryczny
słuchawki sportowe słuchawki sportowe
Skoda Octavia 2 1.6 MPI 2004 - Problem z wyjęciem wkładki stacyjki Rehm Tiger - Błąd Er 1 na wyświetlaczu