W dobrze napisanym kodzie delay nie jest potrzebny. OW robi się na przerwaniach - UART albo timer.
Jakie środowisko? Zakładam, że CooCox, ponieważ w innych takie rzeczy raczej nie występują. Odkąd pamiętam, to taki zapis zawsze poprawnie konfigurował SysTick do generowania przerwań co 1ms (1000Hz): [syntax=C] #include core_cm4.h #define FREQUENCY 168000000ul // lub dowolna inna, ale prawdziwa ///... jakiś fragment programu... if (SysTick_Config(FREQUENCY...
z tego co ostatnio liczyłem to taka pętla: Dodano po 1 A no i bez nop'a kompilator przy pewnych ustawieniach wytnie Tobie całą pętlę.
[syntax=c]void _delay_init() { SysTick->LOAD = 0x00FFFFFF; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; // | SysTick_CTRL_TICKINT_Msk; } void _delay_ms(uint32_t time) { uint32_t ina, inb; while(time--) { ina = SysTick->VAL; do { inb = SysTick->VAL; inb = (ina - inb) & 0x00FFFFFF; } while (inb<72000); } }[/syntax]
Delay wykonany na pętli for nie jest mojego autorstwa. Już od kilku dni głowię się, czemu te wyświetlanie tak wolno chodzi. Próbowałem wszystkiego, wstawiłem tego delay'a na pętli for i zadziałało. Ewidentnie jest coś nie tak z tym delay'em na Systicku. Poprawiłem kod: [syntax=c]void delay_ms(int ms) { int c = 0; SysTick -> LOAD |= SYSTICK_F/1000...
Witam, i od razu przepraszam jeżeli temat się pojawił, ale jakoś nic nie byłem w stanie znaleźć. Stworzyłem sobie projekt wyjściowy(ustawienie PLL itp..) do pisania większych projektów dla LPC1768 i planuję napisać sobie biblioteki do peryferii typu timery uart wyświetlacz lcd. Jak wiadomo większość takich sterowników musi korzystać z funkcji typu delay()....
Witam, prosiłbym bym o pomoc, żeby ktoś wytłumaczył, albo podał przykład jak skonfigurować przerwania zewnętrzne w tym mikrokontrolerze bo walczę z tym i nic mi nie wychodzi i zaczynam podejrzewać, że to procek jest zepsuty, albo tej sztuki jeszcze nie opanowałem :D na początku pisałem własne kody, ale po nieudanych próbach w końcu wkleiłem gotowca,...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
Witam. Wygenerowałem kod w STM32CubeIDE. Problem polega na tym, że gdy debuguje go, to mogę swobodnie przechodzić krok po kroku do kolejnych instrukcji programu. Po wyłączeniu debugowania w celu pozwolenia mikrokontrolerowi działać swobodnie, ten nie chce działać. Znalazłem tako oto radę dotyczącą SysTicka: "You have to be very carefull when using HAL_Delay(),...
Zasadniczy probem twojego rozwiązania to delay() w obsłudze przerwania i ogólnie za dużo w nim robisz. Z zasady w przerwaniu wykonujesz jak najmniej kodu, aby z niego wyjść najszybciej jak się da. A tutaj wykonanie kodu w przerwaniu zależy od kolejnych przerwań. Ustawiaj tam sobie jakąś zmienną globalną kiedy chcesz coś wykonać, wybudź procek, opuść...
hmm może wkleje cały flik, a systick co ma z tym wspólnego i ma być w ogóle podzielony? przez 1? ------------edit A już chyba widze, po drodzę brakuje mi[syntax=c] LPC_SYSCON->SYSAHBCLKCTRL |= 1<<TIMER_SYSAHBCLKCTRL_BIT;[/synta... ------------edit2 Ok, lata :) teraz moja zwłoka wygląda jak poniżej, oczywiście trzeba jeszcze doszlifować bo funkcja...
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
Hej :) Natknąłem się na pewnie problem którego nie mogę rozwiązać otóż spróbowałem sobie zrobić prosty generator przerwań przy użyciu SysTicka (przykład z książki paprockiego) który zapalałby mi diode po 500ms. Nie wiem w czym może leżeć problem ale dioda mi nie miga. Poniżej wklejam kod main i funkcji void SysTickHandler(void): main: #include <stdint.h>...
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...
Z czym może to być związane ? Z tym, że jedna funkcję masz skompilowaną w swoim projekcie a drugiej nie masz. Nie za bardzo rozumiem dlaczego nie jest skompilowana. Fragment kodu: [syntax=c]#include "stm32f10x_lib.h" void delay_ms(); void RCC_Config(); void GPIO_Config(); volatile u32 timer_ms = 0; int main(void) { RCC_Config(); GPIO_Config(); SysTick_Config(72000000/1000);...
Dodałem tam systick delay 1 ms, ale na razie nie udaje mi się wprowadzić procesora w taki stan, więc w między czasie dam znać czy się udało. Oczywiście zmieniłem konfig pinu: [syntax=c] if (I2C_USE->SR2 & I2C_SR2_BUSY) { // Still Busy gpio_pin_cfg(I2C_PORT, I2C_SCL, gpio_mode_output_PP_LS); while (I2C_USE->SR2 & I2C_SR2_BUSY) { I2C_PORT->ODR ^= I2C_SCL;...
Projekt jest dośc spory, sklada się z wiely plikow. Udało mi sie juz uruchomic wyswietlacz graficzny, klawiaturę, ADC, przerwania itd. itp. tylko z tym log10 ciagle problem. Dlatego nie dołączam całego projektu. Stosu nie konfiguruje 'recznie', chyba robi to CoIDE i chyba potrafi wyliczyć ile potrzebuje miejsca na stos. Robiłem ten program na AVR z...
Tak karta jest sprawna - bardziej podejrzewam że jest uszkodzone gniazdo SIM. na logach się nie znam mam nadziej ze to są one ;) Fri Dec 9 01:16:21 2022 kern.notice kernel: [ 0.000000] Linux version 5.10.156 (cezary(at)eko.one.pl) (mipsel-openwrt-linux-musl-gcc (OpenWrt GCC 11.2.0 r19162-a036c1d43b) 11.2.0, GNU ld (GNU Binutils) 2.37) #0 Thu Dec 8 23:19:44...
Proste zadanie a kod z użyciem SPL totalnie nieczytelny i do tego niedokładny... Ja tylko nie wiem jak komentarz ma się do wpisanych tam wartości: /* SysTick end of count event each 10ms */ SysTick_Config(RCC_Clocks.HCLK_Frequency / 1680 / 2); Zakładając, że HCLK wynosi 168M, to w jaki sposób wpisanie do SysTick wartości 50k ma dać opóźnienie 10ms?...
PM0056 Programming manual strona 151 The RELOAD value is calculated according to its use: ● To generate a multi-shot timer with a period of N processor clock cycles, use a RELOAD value of N-1. For example, if the SysTick interrupt is required every 100 clock pulses, set RELOAD to 99. ● To deliver a single SysTick interrupt after a delay...
Udało się rozwiązać problem, kod poniżej. Rzeczywiście wystarczyło się dostosować do tego, że USB ISP zakłada że jest wywoływane po resecie. Nie brałem tego co tam jest napisane wcześniej na powożenia, bo w poprzednim projekcie problem nie wystąpił. Nie wiem do końca która linijka jest kluczowa, na pewno nie wszystkie mają znaczenie. Delay prawdopodobnie...
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...
Sądziłem, że rejestr IR związany jest tylko z przerwaniami i sprawdza się go w przerwaniu. Testowałem rejestr TCR ponieważ UM piszę "Stop on MR0: the TC and PC will be stopped and TCR[0] will be set to 0 if MR0 matches 0 the TC." Zaraz przetestuję z IR & 1 ---- Kicha :( Czekanie while (LPC_TMR32B0->IR & 0x01); nic nie daje. Kurczę na SysTick opóźnienie...
Witam, chciałbym zapytać o tworzenie projektu w Atollic. Szukałem w internecie materiałów polskich i obcojęzycznych ale nigdzie nie natknąłem się na instrukcje tworzenia projektu. Uczę się programowania na rejestrach według poradnika zamieszczanego tutaj. Widziałem instrukcje tworzenie projektu za pomocą CubeMx a następnie wyciania co nie potrzebne....
Dziękuję kolegom za cenne uwagi. Co do wersji z os.mbed.com, to próbowałem ją do siebie przeportować ale niestety efekt był podobny. Poprawiłem kod według wskazówek kolegi Freddie Chopin, przerwanie SysTick jest generowane co 10 us oraz wydłużyłem czasy dla półbajtów, ale efekt jest dalej taki sam. Pojawiło się też słówko volatile. Kod wygląda teraz...
To może wgraj oryginalną zawartość z Nucleo F411 jaka jest w nówkach na dzień dobry, by przynajmniej sprawdzić Nucleo plus ST-link. On tam miga i reaguje na przycisk może pamiętasz: No jest jakiś postęp chociaż nie wiem czy można to nazwać postępem. Wgrałem ten program, wyrzucił mi jakiś błąd elf loadera ale ostatecznie znalazł się w pamięci: Dodano...
Witam. Postanowiłem zgłębić tajniki mikrokontrolerów STM32. Wybór padł na procesor STM32F3 Discovery. Mam problem z poniższym kodem. Jest to przykład działania przetwornika ADC. Problem polega na tym, że nie wiem dlaczego to nie działa. Uruchamiam debugger, biorę krokową pracę, a program w zasadzie zatrzymuje się na linii ADC1ConvertedVoltage jest równa...
Tu jest problem, który odkładam od pewnego czasu z braku czasu. Przy szybkich kontrolerach obydwie metody są do kitu i powodują marnotrawstwo czasu procesora. Zastanawia mnie zrobienie tego "pod zegarem". Tzn kolejne kroki wykonywane w kolejnych przerwaniach timera. Nawet jeśli samo wysyłanie trwać będzie znacznie dłużej to w międzyczasie można kupę...
Stos dla przerwań ustawiłeś? 4\/3!!
Witam, Zaczynam zabawę z STMami i mam pewien problem. Z kilku kodów w internecie zlepiłem swój kod i niestety jak to zwykle bywa coś jest nie tak. Docelowo chciałem obsłużyć wyświetlacz TFT wykorzystując FSMC. Napotykam problem gdy próbuje zrobić w pętli głównej wysyłanie danych przy użyciu FSMC w pewnych odstępach czasu. Jeżeli w kodzie umieszczam...
Przyczepilem sie optymalizacji itp. opcji kompilatora ale w miedzyczasie wyszlo ze najwyrazniej rdzen zrzuca na stos rejestry r0-r3 i klika innych, wiec problem nie lezy tutaj. Wiem ze gdzies popelnilem blad, nie mam doswiadczenia z ARM-ami. Oczyszcze i zminimalizuje kod aby bylo absolutne minimum powodujace problemy i wrzuce. Systick szczesliwie miga...
Cześć, od 2 dni zmagam się z modułami NRF24L01 i dwoma płytkami STM32. Płytki STM32 NUCLEO L053R8 i STM32F103 wykorzystujac biblioteki HAL i cubemx. Niby oba układy zwracają poprawne rejestry : https://obrazki.elektroda.pl/1575646300_... Ale sama komunikacja w sobie nie działa. Nie odbieram żadnych pakietów. PYTANIE - czy w biblioteka...
Dzięki wielkie za pierwszą podpowiedź jutro sprawdzę sugestię, ale priorytety w NVIC rozumiem : Hmmmmmm... czyli w pierwszej grupie TIM1 ma preemption=0 i sub=2 natomiast systick jest w 0 grupie i ma preemption == sub == 0 czyli wg mnie powinien wywłaszczać. P.S: W timerze delay jest mi potrzebny bo wysyłam dane po rs485 i muszę odczekać czas ze względu...
Aktualnie najważniejsze pliki programu wyglądają następująco: main.c: [syntax=c]#include "main.h" //definicje stalych #define LINENUM 0x15 #define FONTSIZE Font12x12 #define LED1 GPIO_Pin_13 #define LED2 GPIO_Pin_14 #define PRZYCISK GPIO_Pin_0 //zmienne - definicje void Delay(__IO uint32_t time); extern __IO uint32_t TimmingDelay; unsigned short regVal;...
Mam problem z poprawnym skonfigurowaniem wyświetlania z Noki 3410 z STM32L-DISCOVERY przez SPI. Czasami na wyświetlaczu pojawia się zbiór kropek (dołączam zdjęcie), innym razem nic nie pojawia się na wyświetlaczu. Proszę o pomoc w napisaniu poprawnego kodu. Zdjęcie wyświetlacza: http://obrazki.elektroda.pl/8093275400_1... Oto mój kod:...
Witam. Od pewnego czasu walczę z chińską płytką (blue-pill) z STM32F103 na pokładzie i z tego co już się nauczyłem oraz co sobie w ReferenceManualu wyczytałem to wiem, że AVR'y odłożę na półkę:) Moja nauka jest w stylu 'bare-metal' wykorzystuję jedynie pliki nagłówkowe stm32f103xb.h i kilka od CMSIS które można wydobyć z STM'owych bibliotek, więc ich...
Witam, mam problem z uruchomieniem przykładu USB MSC device od ST. Przerobiłem go, aby zamiast karty SD wykorzystać dysk twardy na ATA. Funkcje obsługi dysku są na 100% dobre. Problem jest raczej w USB. Po prostu komputer wykrywa nieznane lub uszkodzone urządzenie. Za bardzo nawet nie wiem, jak się zabrać za szukanie błędów. Przykład USB Host mi działa....
Cześć, Od jakiegoś czasu borykam się z takim problemem: chciałbym odbierać po CANie ramki, wpisywać je w gotowy szablon i dalej wysyłać po USARCie na kompa w kodzie ASCII. Czegoś mi brakuje w tym kodzie i za każdą wskazówkę będę wdzięczny. Z góry dzięki:) To mój main: [syntax=c] unsigned char tx_uart[]=" ID: DL: F: T: DATA: ";//54 char ramka[55]; unsigned...
Do zastosowań w FPGA przewidziany jest CM1. .4 Interrupts The ARM Cortex-M0 processor can guarantee deterministic instruction execution and jitter free interrupt behavior for Zero-Wait-State memory systems when the IRQLATENCY input is correctly configured. If you are developing a system that requires deterministic execution or jitter free interrupt...
Witam Posiadam zestaw STM32F4-Discovery i próbuję uruchomić projekt, który na wyświetlaczu LCD będzie wyświetlał odczyty z akcelerometru. Program jest z ksiązki p. Marka Galewskiego (zmieniłem konfigurację portów GPIO, żeby była kompatybilna STM32F4; w książce opisywany jest akcelerometr LIS35DL, ale adresy rejestrów zgadzają się z tym z zestawu Discovery)....
W sumie może wrzucę cały program taktowanie to 16MHz ustawione w rcc_config i taka jest też wartość FREQUENCY main: [syntax=c] #include <stdint.h> #include "inc/stm32l053xx.h" #include "config.h" #include "gpio.h" #include "hdr/hdr_syscon.h" static void system_init(void); void rcc_config (void); void systick_delay(uint32_t us); void delay_ms(uint32_t...
(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;...
Witam serdecznie. Jak poradzić sobie z SysTickiem i przerwaniem, ponieważ po kompilacji środowisko zwraca taki błąd: [syntax=bash]D:\workspaceAtolic\Cortexy\... multiple definition of `SysTick_Handler' src\main.o:D:\workspaceAtolic\Cortexy\De... first defined here [/syntax] [syntax=c] #include "stm32f10x.h"...
Podaję ładniejszą formę obsługi opóźnienia na SysTick: [syntax=c] #include "LPC17xx.h" #include "lpc17xx_gpio.h" volatile uint32_t licznik_tykniec; /* 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...
Jeśli chciałbym żeby działał licznik i zarazem migała dioda, ale z innym opóźnieniem, to da się to zrobić tylko za pomocą SysTic'a? Dodano po 2 Zrobiłem coś takiego. Jakby mógł ktoś jeszcze pomóc z tą migającą diodą, aby świeciła na 100ms i była zgaszona na 1s. Licznik wg moich obliczeń działa co 0,5 Hz. [syntax=c]#include "stm32f10x.h" volatile uint32_t...
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...
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...
Witam Zmagam się z akcelerometrem ADXL345 + STM32F103. Połączenie po SPI. Otrzymuję na wyjściu wartość przyśpieszenia w kodzie U2. Zapisana jest na 13 bitach, w dwóch rejestrach 8 bitowych. Po odebraniu najbardziej znaczące przesuwam << 8 i łączę z mniej znaczącymi. Problem polega na tym, że wciąż otrzymuję wartość dodatnią, mimo że na najbardziej...
Ogólnie rzecz biorąc udało mi się skonfigurować buttona tak, żeby działał na przerwaniach i timerze. Ale coś zaś musiałem fundamentalnego skopać i wywala HardFault. Tym razem nie mogę uruchomić SysTicka. [syntax=c]int main(void) { volatile uint32_t count, count_max = 1000000; system_init(); pll_start(CRYSTAL, FREQUENCY); SysTick_CLKSourceConfig(SysTick_CLKSourc...
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...
stm32 delay systick stm32 systick delay systick interrupts
pikanie radia citroen volvo silnika kingston partycja
ciężko wchodzą biegi peugeot ciężko wchodzą biegi peugeot
Renault Scenic 2: Sterowanie przy kierownicy - rezystancyjne czy cyfrowe? Kod błędu 255 w Iveco Daily 3.0 2011 - DPF i SCR