Ale co mi to da?
Ja szukam kodu który robi problem, a Ty mi każesz dłubać w procesorze...
Jeśli Arduino na STM32 nie da się używać bez HAL, no to się nie da i nie ma sensu tego robić, bo za co się nie zabierzesz, to będzie droga przez mękę...
Wróć do „Dokąd zmierza świat?”
Ale co mi to da?
Uparcie odpowiadasz na posty, których nie czytałeś.
Ale Ty dalej nie czytasz tego co piszę, tylko dyskutujesz z tym, co sam wymyśliłeś...atom1477 pisze: ↑02 cze 2025, 14:40Uparcie nie chcesz się tego dowiedzieć. Dałbyś w przerwaniu zapalanie LEDa, i już byś wiedział o wiele więcej.
Nie zapala się: procek chodzi w inną funkcję przerwania. A tam zastaje na przykład while(1).
Zapala się: procek wchodzi do Twojej funkcji, ale np. nie kasuje bitu przerwania (przez co wchodzi w to przerwanie w kółko).
LED to skrót myślowy. Nie misi tam być fizycznego LEDa, tylko wystarczy multimetrem czy oscyloskopem sprawdzić napięcie na pinie.
A to jakiś wstyd nie umieć czegoś, co nigdy wcześniej nie było potrzebne?
Obaj jesteście debilami...
Kod: Zaznacz cały
TIM3->DIER|=TIM_DIER_UIE; // Włącza przerwanie
NVIC_EnableIRQ(TIM3_IRQn); // Ustawia przerwanie
Chcesz wyjść na większego idiotę od tego drugiego?
Ale Ty jesteś tępy...drzasiek90 pisze: ↑01 cze 2025, 23:20Tobie naprawdę nie warto pomagać.
To ty sobie nie radzisz z tak prostym problemem, nie ja.
Nie mój kod wywala błąd tylko Twój projekt do którego dodałeś kawałek mojego.
Nie pokazałeś całego projektu tylko fragment kodu więc nie wiadomo co dodajesz i gdzie.
Ale już zostało wszystko wyjaśnione gdzie jest problem i co powinieneś zrobić aby mieć obsługę przerwania i aby nie było błędu!
Jeśli tego nie rozumiesz to jesteś po prosru miernym programistą i naprawdę powinieneś rozważyć aby zająć się czymś innym.
Temat jest wyczerpany i średnio ogarnięty programista na podstawie tych informacji będzie wiedział co zrobić.
A ty rżnij głupa dalej bo na "dziękuję za pomoc" jesteś za słaby.
Więc lepiej odwrócić kota ogonem i jeszcze obrażać tych co ci pomogli.
Jesteś niemożliwe wkurzający i irytujący.
Co się tak uparłeś wyjść na idiotę?drzasiek90 pisze: ↑01 cze 2025, 22:50Czytasz czasem jakie głupoty piszesz?
Nie przeanalizowałes sam co ci wyrzucił kompilator więc dostałeś ode mnie informację gdzie i w czym jest błąd.
Podałem ci dwie możliwe opcje.
Do obsługi przerwania musisz mieć jego obsługę.
Więc albo utwórz swoją (pokazałem ci jak bo nie wiesz jak, ale wtedy nie używaj biblioteki która już to samo implementuje) albo nie twórz swojej i skorzystaj z tej którą już masz w bibliotece.
A jak nie potrafisz takich prostych rzeczy to zajmij się malowaniem albo jaka inna sztuką - ty byś zapewne takiej rady udzielił.
Ale i tak tego nie zrozumiesz.
Przecież to Ty utworzyłeś własny TIM1_UP_IRQHandler używając extern "C"...drzasiek90 pisze: ↑01 cze 2025, 22:41To znaczy, że HardwareTimer (z biblioteki STM32Duino) już ma własną wersję obsługi tego przerwania, i Twój kod ją duplikuje.
Opcja 1: Nie używaj HardwareTimer
Opcja 2: Nie twórz własnego TIM1_UP_IRQHandler
Już tego próbowałemdrzasiek90 pisze: ↑01 cze 2025, 22:28Kod: Zaznacz cały
extern "C" void TIM1_UP_IRQHandler(void) { if (TIM1->SR & TIM_SR_UIF) { TIM1->SR &= ~TIM_SR_UIF; // Wyczyść flagę } }
Kod: Zaznacz cały
/root/.arduino15/packages/STMicroelectronics/tools/xpack-arm-none-eabi-gcc/14.2.1-1.1/bin/../lib/gcc/arm-none-eabi/14.2.1/../../../../arm-none-eabi/bin/ld: /root/.cache/arduino/sketches/2BC163F6C542CC480C7C3C122E542D51/libraries/SrcWrapper/HardwareTimer.cpp.o: in function `TIM1_UP_IRQHandler':
HardwareTimer.cpp:(.text.TIM1_UP_IRQHandler+0x0): multiple definition of `TIM1_UP_IRQHandler'; /root/.cache/arduino/sketches/2BC163F6C542CC480C7C3C122E542D51/sketch/STM32-Baremetal-Qencoders.ino.cpp.o:STM32-Baremetal-Qencoders.ino.cpp:(.text.TIM1_UP_IRQHandler+0x0): first defined here
collect2: error: ld returned 1 exit status
exit status 1
Compilation error: exit status 1