właśnie tak pamiętałem ctrl + \ nie \ tylko / (ma być ten obok shift) Musi działać, ewentualnie masz zmienione skróty klawiszowe, albo coś przechwytuje ten skrót. Dodano po 49 Ktoś opisał to wczoraj tutaj, dziękowałem ale znikło bo były prace konserwacyjne. To byłem ja. Oddać mi proszę mojego posta, ;)
jak uruchomić zegar przy 48MHz ? Ja robię to tak, jak opisano w RefMan (jakieś 5 linijek kodu), a jak mi się nie chce, to wyklikuję w CubeMX, który generuje kilkadziesiąt linijek kodu. Masz jakiś lepszy pomysł?
To że generowane jest przerwanie i kod się zawiesza nie jest winą OpenOCD tylko kodu... sub.w sp, sp, #24576 ; 0x6000 sub sp, #32 w tym miejscu funkcja alokuje sobie na stosie 24576 + 32 bajtów - nie sądzę aby twój stos to przeżył... 4\/3!!
I co zrobiłeś. Pokaż kod. Z czym w tym kodzie albo w działaniu sprzętu masz kłopot?
Akurat Windows 10 ma już standardowe drivery do standardowych VCOM, a CubeMX aktualnie generuje dla STM32 kod ze standardowymi identyfikatorami klasy w deskryptorach, więc po wpięciu kabelka system od razu widzi VCOM, bez dociągania driverów.
Spróbuję zrozumieć ten kod, może uda się. Tam tak naprawdę nie ma czego rozumieć. To jest minimalnie zmodyfikowany FatFS - bardzo znana biblioteka, powszechnie wykorzystywana z mikrokontrolerami. Polecałbym nawet, żeby zamiast zajmować się analizowaniem kodu mojego projektu, zacząć od dużo lepszej dokumentacji samej biblioteki, na stronie jej autora....
A po co nam dajesz źródła pliku C? Sprawdź co generuje kompilator w plikach wynikowych *.map. Tam masz cały kod z C przerobiony na assemblera i od razu widać co się dzieje. Tak jak kolega zauważył - jak kompilator coś za bardzo zoptmalizuje (np. funkcję delay, bo stwierdzi, że jej działanie nic nie zmienia w wyniku) to nagle się okazuje, że czasowe...
Cześć! Spotkałem się ostatnio z błędem stm32 HID device w Windows 10 (na Windows 11, Linux wszystko jest ok). Kod generowany przez CubeMX. Code error 10. Zna ktoś może przyczynę tego błędu? Pozdrawiam Edit: Znalazłem. Class/CDC/Inc/usbd_cdc.h , zmienić trzeba max_packet_size z 512 na 64.
Z tego co wymieniłeś wszystko jest OK (zakładam, że 3. to wskaźnik na funkcję, a nie jakieś dziwne rzutowanie). Ja bym się jednak początkowo skupił na zainicjalizowaniu w main() wszystkiego co inicjalizuje Keil w startupie, czyli po prostu wywołaniem SystemInit() - jeśli to zrobiłeś to następnym krokiem będzie zastanowienie się, czemu kod w Keilu generuje...
Proszę o jakieś wskazówki co może być nie tak z tym kodem, z góry dzięki. Założenie, że jedno naciśnięcie mechanicznego przycisku generuje jeden przepiękny impuls prostokątny.
To co generuje Arduino dla STM32, to taki mały potworek. Do tego są 2 liczące się konkurencyjne toolchainy pod STM32 dla Arduino, jeden od Rogera Clarka (https://github.com/rogerclarkmelbourne/... a drugi, oficjalny, od STM (https://github.com/stm32duino/Arduino_C... W sumie jest też prawie oficjalny od arduino.org i kilka pomniejszych....
Nie chcę inkrementacji. Wysyłam cały czas tą samą zmienną kilkukrotnie z jednej lokalizacji pamięci. W przerwaniu jest przeliczana na inną wartość w taki sposób: Ok. Niemniej jednak skopiowałem ten kod z #8 do CubeIDE 1.5.0, zrobiłem parę korekt pod moje PCB, dokonałem poprawnej implementacji flagi BUSY i wszytko działa jak powinno z inkrementacją...
Zaletą Atolica jest to, że praktycznie wszystko jest gotowe do pracy... Na screenie raczej nie musisz nic zmieniać... Generalnie sam zaczynam pracę z ARM-ami i z Atolicem, nie miałem problemów. Teraz walczę z Eclipse, żeby zupełnie mieć darmowe i nieograniczone środowisko. Jeśli chcesz jakąś pomoc napisz jakie konkretnie masz błędy lub co nie chodzi....
Dziękuję za podesłane pliki. Szkoda że na nie ruszą na C6T6. Porównuję to z moimi ustawieniami i po za tym, że uruchomiony jest RCC_osc32 na konfiguracji zegarów to nie znajduję różnicy. Sprzęt skonfigurowany tak samo. Parametry te same i dalej nic. W internecie znalazłem informacje, że CubeMX ma problemy z generowaniem kodu dla I2C na niektóre procesory....
(at)Karaczan - to nie kwestia tworzenia średnio optymalnego kodu - bierzesz mbed, spl, hal do ARM i głupie miganie diodą jest w stanie zeżreć 1k RAM i FLASH ;) A jedziesz bezpośrednio na dokładnie tych i tylko tych rejestrach peryferiów, których w projekcie używasz i masz 10x mniej kodu. To kwestia inicjalizacji/konfiguracji wielu rzeczy, które Arduino...
Jeżeli funkcja nie jest zadeklarowana jako static, to usunąć niepotrzebną funkcję może jedynie konsolidator, POD WARUNKIEM, że wywołując kompilator uaktywnisz opcję generowania oddzielnych sekcji dla poszczególnych funkcji - to b.ważne dla optymalizacji rozmiaru kodu. Kompilator nie "analizuje całego projektu", chyba, że używamy LTO.
Strasznie skomplikowałeś tak prostą rzecz. Nie trzeba wyliczać napięć skutecznych i z nich napięć szczytowych. Stosunek tych napięć jest stały, więc można to przeskalować i od razu wszystko obliczać na napięciach szczytowych. Z kolei zamiast ustalania okresu przerwań Timera można wykorzystać przerwania do Timera PWMa. PWM i tak nie jest w stanie wiernie...
Kod generuję z CubeMX, więc jest standardowy. Możesz rozwinąć "w stanie wysokiej impedancji"? Bo zakładałem że od strony linii CAN jedynym sprawcą problemu może być SN65HVD232.
Zanim zacznę wyważać drzwi chciałbym sprawdzić czy przypadkiem nie są już otwarte. Czy kojarzycie może generator kodu w stylu CubeMx z tym, że kod generowany byłby w oparciu o rejestry a nie HAL/LL. Generalnie zależy mi tylko na GPIO, czyli wizualnie konfiguruję porty i dostaję gotową wstawkę operującą bezpośrednio na rejestrach.
Witam, Aktualnie pracuję z wykorzystaniem tego modułu. Obsługę smsów przychodzących będę implementował dopiero w nadchodzącym miesiącu. Ogólnie sprawa jest dosyć prosta: - Do modułu łączysz się za pomocą UART z arduino o parametrach 9600/8/n/1 - Z modułem komunikujesz się za pomocą komend AT (znajdziesz w internecie dokumentację) - Moduł jest dosyć...
Co sądzicie o STM32CubeMX i HAL? Chciałbym poznać opinię kogoś, kto tworzy soft nieco bardziej zaawansowany niż przykłady w tutorialach typu mruganie diodą. Są jakieś poważne argumenty "przeciw"? Spodobało mi się banalnie proste generowanie kodu do obsługi kart SD/FatFS i FreeRTOS, ale pewnie ma to też jakieś wady. PS Jeżeli na forum jest podobny wątek...
Na tą chwilę trenowałem trochę generowanie trójfazowego PWM i nieźle do tego celu nadają się STM32 Kilka lat temu budowałem taki SPWM 3f na Arduino UNO (Mega 328), z silnikiem BLDC od pralki Samsunga. Działało. Na podstawie projektu znalezionego w sieci. Zwykły silnik indukcyjny nie działał ale wynikało to właśnie z użycia BEMF do rozpoznawania pozycji...
Witajcie, od dłuższego czasu przymierzam się do przejścia na bibliotekę HAL lub LL dla STM32. Od wielu lat używam swoich własnych bibliotek (napisanych bezpośrednio na rejestrach) lub biblioteki STD. Jednakże przed użyciem HALa powstrzymuje mnie konieczność użycia CubeMX. Niby wszystko ok, ale nie do końca. Nie podoba mi się układ kodu generowanego...
Porównywanie rozmiarów kodu wynikowego windowsowego pliku wykonywalnego, kodu źródłowego tegoż pliku i zajętości pamięci kodu w mikrokontrolerze moim zdaniem zupełnie mija się z celem. Różne biblioteki (lub ich brak), różne środowiska, różne architektury, implementacja z uwzględnieniem możliwości i peryferiów STM32 i pewnie jeszcze kilka rzeczy można...
Rozwiązanie jak w Windows zamiast naprawić błąd ukrywa się go ale w sumie to można w HAL zakomentować sprawdzanie LOCK aby dać funkcjom drugie życie tyle, ze ponowne generowanie kodu przez Cube zniszczy wszystkie takie "naprawy".
czy lepiej wymienić na płytkę STM z wbudowanym interfejsem Wszystko zależy od kilku czynników: Czy planowana aplikacja dla data logera tj. tego mikrokontrolera centralnego (pewnie takiego "mastera" w sieci CAN) jest bardzo wymagająca obliczeniowo czy nie(bo STM32F7 to dość wypasione mikrokontrolery pod tym względem). Czy oprócz zapisu danych ma być...
Jak kod generujesz w CubeMX to daj breakpoint w pliku stm32...xx_it.c w funkcji: [syntax=c]/** * (at)brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) { /* USER CODE BEGIN W1_HardFault_IRQn 0 */ /* USER CODE END W1_HardFault_IRQn 0...
Używałem trochę MSP430 (LaunchPad), potem ARMów Stellaris. TI dostarcza niezłe materiały szkoleniowe. Używałem jedne z pierwszych Launchpadów. Ale nie byłe zachwycony możliwościami (wszędzie podkreśllali 16bit a ja jakoś nie widziałe w tym wartości dodanej) . Wersje Stellaris (ARM), które uzywałem i środowisko IDE w tym czasie nie umożliwiało np. debuggowania...
Cześć. Piszę sobie program na STM32 w środowisku Keil uVision. Proszę powiedzcie mi jak zrozumieć generowane liczby mówiące o zajętości (wielkości) programu w pamięci Flash oraz ile pamięci RAM zajmuje program? W Keil nie ma optymalizacji kodu znanego z WinAVR -Os. Co odpowiada temu poziomowi w Keilu lub na który poziom bezpiecznie jest ustawić bo są...
Generalnie niepotrzebnie włączasz jakiekolwiek żądnia transferu DMA ze strony timera - to ADC ma generować takie żądania, a nie timer. Skoro zaś wszystkie pozycje są faktycznie wypełnione danymi, to znaczy, że transfer ma miejsce, tyle że wartości odczytane z ADC są złe. Może z tym 1.5 cyklu na pomiar przesadziłeś? Może timer generuje żadania konwersji...
1/ nadużywanie ustawiania bitów "|=". Nigdzie nie ma odpowiadającego wstępnego kasowania bitów, które są ustawiane, więc z góry zakładam, że ten kod może być zawodny. Najlepszym rozwiązaniem jest pojedyncze wpisanie do rejestru jednej wartości zawierającej żądane ustawienia wszystkich pól. 2/ [syntax=C]TIM1->PSC = 23999; TIM1->ARR = 1;[/syntax] Na timer...
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
Podzielniki więc muszą być w zbiorze 1,2,3,4,5...n-1,n. Kod na dzielnik który jest powszechnie spotykany nie ma mozliwości zrobić takiej podziałki ze względu na to że reaguje jedynie na zbocza narastajace sygnału zegarowego(dzieli więc wstępnie przez 2, a więc 50 MHz nie osiągnę). Jeśli w Twoim układzie zegar wyjściowy przy 50 MHz może miec wypełnienie...
No dobrze by było. W CoIDE, kiedy program nie widzi jakiegoś dołączanego pliku (#include) to wyświetla przy nim znak zapytania. Taki znak zapytania wyświetla własnie przy #include "math.h". Pisałem do nich o tym, odpisywali mi inni forumowicze żeby zrobić to albo tamto... Wszystko robiłem jak pisali a znak zapytania był dalej, chociaż kompilator nie...
Witam, od jakiegoś czasu zastanawiała mnie jedna sytuacja. Dzieje się to przy odpaleniu debuggera w środowisku System Workbench for stm32 (konfiguracja generowana przez CubeMX). Program otwiera nowe pliki z niepokojącą informacją, że coś nie jest dostępne. W ogóle nie przeszkadza to w wykonywaniu kodu i pewnie Eclipse z nakładką na STM-y tak ma, ale...
To nie ma znaczenia - magistrala do której jest podpięty definiuje tylko sposób dostępu przez kod użytkownika i źródło zegara. Wyjścia timera są dołączone do pinów raczej fizycznie, co najwyżej konfiguracja portu odpowiada za multiplexacje kilku układów peryferyjnych na jedno wyjście. 4\/3!!
Chodziło mi o chwilowe przerwanie (bardzo chwilowe, jakieś us) które objawi się tym że przebieg zacznie być generowany od początku. Czyli faza przebiegu zostanie "zresetowana". Ciężko będzie to zauważyć na oscyloskopie. Choć w sumie zależy to jeszcze od tego jak jest napisany kod tej biblioteki. Być może jakimś cudem nie następuje to zjawisko resetowania.
Inicjalizacja podstawowa wygląda dobrze. Teraz tylko wywal odbiornik, zostaw sam nadajnik i do niego podepnij się z analizatorem. Potem ustaw "Operating Mode" na "Loopback" i wygeneruj kod. Nie martw się, też się kiedyś z tym ostro namęczyłem :P Warto dokładnie poczytać RMa i inne pdf które wypuściło ST, czasem są tam niezłe ciekawostki (np. ten Loopback)....
BlueDraco dziękuję za wskazówki. Pobrałem STM32CubeIDE i wszystko super działa. Dodano po 23 Przed pobraniem STM32CubeIDE 1.6.1 używałem STM32CubeMX do generowania kodu z konfiguracja natomiast po wygenerowaniu kodu do programowania używałem Atolic TrueStudio w wersji 9.3.0. Po zainstalowaniu STM32CubeIDE, które łączy ze sobą funkcjonalność STM32CubeMX...
Przypuszczalnie tak, na "normalnym" STM32 miałem podobny kod i działał bez problemów. Dla fantazji możesz jeszcze sprawdzić wszystkie pozostałe flagi statusowe, może zapalony jest jakiś dziwny błąd albo coś takiego. Swoją drogą - zatrzymał się na tym pierwszym oczekiwaniu na wysłany adres, cz tym drugim? 4\/3!!
Ja na samym początku przerzucam wektory przerwań na początek pamięci RAM. A później wstrzykuję swoją funkcję w miejsce oryginalnego wektora. Po rozmyślaniu na ten temat doszedłem do następujących wniosków. 1. Możliwość dynamicznej rejestracji przerwań (najlepiej w wysoce abstrakcyjny sposób, tak aby funkcje nie musiały być publiczne) byłaby z pewnością...
Musisz pokazać kod w którym zmieniłeś przyporządkowanie MACa. U mnie - z MAC generowanym na podstawie unikatowego ID - działa na wielu urządzeniach i w wielu sieciach bez żadnych problemów, niczego nie musiałem zmieniać dodatkowo.
Faktycznie ta biblioteka jet do kitu! dużo z nią problemów a być może nawyki dotychczasowe i ogólne zasady powodują że staje się to nielogiczne. Rozłożenie na dwie linie pomogło! Dzięki. Pewnie się przesiądę na wersję z rejestrami ale muszę okiełznać na razie procesor. Biblioteka generuje mi duży kod wynikowy. Proste rzeczy a już mam ponad 5k wynikowego....
Witam, Za co odpowiadają te linie kodu: [syntax=c]TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing; oraz TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;[/syntax] Szukałem w książce oraz w manualu, ale nie do końca wszystko rozumiem. Czy pierwsza linia powoduje ustawienie timera w tryb "normalnej" pracy. Tzn. jeśli doliczy do końca (przepełnienie)...
(at)chudybyk znam tą dokumentację, ale ciężko się przez to przekopać. Chodzi mi raczej o źródło, które pomoże samemu od podstaw pisać programy podobne do tych generowanych przez CubeMX, ale jednak piszesz je sam, dzięki czemu wyciągasz z tego jakąś wiedzę. Przede wszystkim - wiesz co się dzieje w tym kodzie, w przeciwieństwie do kodu generowanego przez...
Witam, przygotowuję w ramach dyplomu aplikację mającą poruszyć temat przetwarzania sygnałów audio na stm32. Jako, że dostałem zupełnie wolną rękę w interpretacji tego tematu, chciałbym spróbować generowania dźwięków instrumentów muzycznych - coś w stylu syntezatora. Póki co potrafię wygenerować sinusoidę za pomocą niestabilnego filtru i dalej nie wiem...
To jest fragment który sam dopisałem. W cubemx ustawiłem 2 timer na generowanie pwm na kanale 1,2 i 3, prescaler ustawiony na 0, period 89, do tego dma które miało współpracować z kanałem pierwszym. Taktowanie ustawiłem na 72mhz. Początkowo myślałem że problemy sprawia przerwanie od dma, lecz po usunięciu kodu włączającego dma sytuacja się nie poprawia....
Popieram przedmówce. Używam Keila od lat. Wersja darmowa ma limit kodu 32kB. Nie przeszkadza to w prostych projektach nawet z kodem generowanym przez CubeMx. Uzywam do Discovery, Nucleo o chińskich STM32F103. Probowałem też open source pare lat temu i nie podobało mi się. Np. ja czesto nie programuję podczas testowania flasha tylko debuguje i uruchamiam...
../Src/main.c: In function 'main': ../Src/main.c:250:16: warning: passing argument 1 of 'atoi' makes pointer from integer without a cast Jeśli to jest mało istotny warning, to faktycznie kod jest na pewno w porządku. Co prawda w C++ takie coś generuje errora na najniższych ustawieniach, ale jak wiadomo C++ jest głupie (;
Sprawdź na której instrukcji asemblera hardfault występuje. Ja sądzę, że na instrukcji STR. 1. Ona przyjmuje adres, sprawdź co to za adres pod który instrukcja zapisuje. 2. Dostęp do FSMC kończy się hardfaultem jeśli nie działa zegar FSMC. Sprawdź czy optymalizacja nie eliminuje lub nie krzaczy twojego configa (a całkiem możliwe, że krzaczy, bo nikt...
Zacznij od migania diodką ! Przesyłam Ci kilka działających przykładów związanych z GPIO, EXTI i timerem "systemowym". Biblioteki ST są dobre na starcie, ale kod, który się generuje na podstawie tych bibliotek jest 2 razy większy (w porywach) od tego napisanego "ręcznie". Natomiast nie polecam całkowitego "odcinania" się od nagłówków (*.h) napisanych...
Ale tak szukam i szukam ale nigdzie nie mogę znaleźć żadnej tablicy gdzie mógłbym ten kod dopasować. Słabo szukasz http://www.whdload.de/docs/pl/rawkey.htm... Pamiętaj, że jest jeszt kod puszczenia klawisza, chyba 0xF0 i kod puszczanego klawisza. Niektóre klawisze generują kilka kodów (backspace itp). Fajny ten FT260. Ale czy rozumiem że wystarczy go...
Sprawdziłem czy czasem układ nie jest zepsuty i może echa nie generuje. Na szczęście wszystko działa prawidłowo, USART z ATmegi32 leci prawidłowo więc na pewno błąd mam gdzieś w kodzie. Czy może ktoś wskazać lub podpowiedzieć co mam zrobić? Generalnie lepiej znam się na AVR dlatego w STM32 potrzebuje dokładnej wskazówki.
(at)katakrowa Dzięki za zainteresowanie ;) Co do pytań: 1. Tak, ADC/DAC to WM8994, do niego są podpięte gniazda jack na płytce. 2. Zrobiłem to na tej platformie bo po prostu miałem ją pod ręką i dobrze znam STM32. Na początku nie wiedziałem jakie i ile efektów ta płytka pociągnie. Latencję da się tu zmniejszyć dwukrotnie (zmniejszając bufory audio)...
Nie mam żadnej płytki z STM32F072CBxx, dlatego sprawdzić na żywym nie mogę. Odczyt rejestru nie może generować błędu, jeżeli projekt jest skompilowany dla tego właśnie mikrokontrolera. Jeżeli błąd jest podczas odczytu, a projekt zawiera definicjami rejestrów dla stm32f072xb, to sprawdziłbym co jest podłączone do programatora. Czy to na pewno jest STM32F072CBTx?...
Optimized CRC-8-CCITT calculation. Zapomnieli tylko dopisać, że "optimized for small size", bo na pewno nie zoptymalizowany pod względem wydajności czy wygody używania. Do generowania kodu liczącego różne CRC polecam po prostu https://pycrc.org/ . Jak ktoś chce kod który jest szybki, to wybiera algorytm "table driven" - tablica o wielkości `sizeof(crc_t)...
u zrobiłem prościutki przykład Ciekawe :) Dzięki za przykład. Póki co dysponuję tylko wielokrotnością ST-Linka, tj. od różnych wbudowanych w dev-boardy po kilka standalone ;) Może kiedyś dorobię się czegoś lepszego. Chociaż musiałbym zobaczyć co jest na pokładzie devkita Gecko, wydaje mi się, że to się zgłaszało jako J-Link... Te __attribute__((noreturn))...
Witam wszystkich. Przenosze kod z STM32 L 053 na STM32 F 030 Ruszylo mi prawie wszystko czyli: RCC GPIO SPI Pracuje na kodzie dostarczonym przez ST pod pewien moduł radiowy. Kod jest oparty o HAL generowany z Cube. Mam problem z DMA. Problem ten jest wynikiem nie wykonywania się jednej linijki kodu. Zamiast wskaznika (adresu funkcji) wpisywane jest...
Mój problem polega na nieskutecznej próbie uruchomienia układu stm32 + IP101GA(tryb RMII). Korzystając z automatycznie generowanej inicjalizacji modułu ethernet przy pomocy STM32CubeMX , podczas podłączania urządzenia do sieci ethernet(do switcha) następuje zawieszenie sieci lokalnej, tzn. komputer i drukarka w tej sieci przestają działać. Usunięcie...
A ja odradzam używanie AC6 do pierwszych projektów, a nawet do drugich - pliki startowe w AC6 są mocno niekompletne i jeśli chcesz pisać kod samemu, a nie generować pod CubeMX - czeka Cię sporo niespodzianek. Jeśli zaczynasz przygodę z Cortexami - zaczynaj od Keila - zero problemów z konfiguracją, wszystko działa, a i paskudny SPL też jest w komplecie,...
a tak wygląda log kompilacji: To co wrzuciłeś nie ma nic wspólnego z logiem kompilacji. Ma być widać DOKŁADNE wywołania kompilatora, a nie info o tym jak się nazywają Twoje pliki i to ile warningów generują. Proponuję wiec poszukać jak skompilować projekt z opcją "verbose". Dodano po 4 Wrzuciłem ten Twój kod do pierwszego lepszego projektu jaki mam...
Potrzebuję pomocy z tym. Jeśli ktoś będzie tak łaskawy podpowiedzieć mi co jeszcze muszę ustawić, aby TIM2 generował mi przerwanie co 1ms. Mam tyle: [syntax=c] RCC->APB1ENR |= RCC_APB1ENR_TIM2EN ; TIM2->PSC |= 1 ; TIM2->ARR |= 36000 ; // przerwanie co 1 ms TIM2->CR1 = TIM_CR1_ARPE; // TIMx_ARR register is buffered TIM2->DIER |= TIM_DIER_CC1IE ; TIM2->CCMR1...
albertb: Idąc tym tropem, każdy kompilator powinien z instrukcji a = 5 generować dwa takie same podstawienia, bo jakiś procesor może się pomylić i zignorować instrukcję. Jeśli specyfikacja architekury i ABI mówi, że stos ma być wyrównany, to ma być. Po to jest specyfikacja. Architektura ARM dopuszcza np. knwencję little-endian i big-endian, ale kompilatory...
Jeśli o mnie mówisz to ani się nie czepiam? Patrzyłem na przykłady z książki z BTC o STM32 i w nich są przykłady użycia czy to I2C, czy ADC i za każdym razem zegar włączany jest dla peryferium, AFIO oraz GPIO. I nie wiem dlaczego? Wywal książkę do kominka i posługuj się Reference Manual, bo się w życiu nigdy nie dogadamy. Jest napisane wprost do czego...
(at)gdL W ramach konstruktywnych uwag: 1. Generowanie przebiegu w pętli mi się nie do końca podoba - wiem, że dzięki temu wyciskasz z tego AVR-a ile się da, ale to nie do końca poprawne i eleganckie - np. na pewno na "obrót" pętli while schodzi pare taktów procka i trochę sygnał sekunda po sekundzie płynie (choć to b. niewielki efekt, ale jest, jak...
Definicja tcp_timer_needed() jest w pliku tcp_impl.h, żródła w timers.c. Plik tcp_impl.h zaincludowany w tcp.c z resztą tu nic nie zmieniałem. Po dopisaniu #include "lwip/timers.c" program się kompiluje owszem i wszystko działa ale mam potem problem z kompilacją gdy chce dodać liczniki softowe pod freertos a to za sprawą includeowania pliku timers.h....
Witam, próbuje sterować diodą RGB podłączoną do Nucleo l053r8. Konfiguracja portów została ustawiona tak jak i przerwania. Problem mam z ustawieniem pracy kanałów i wlaczeniem generowania sygnalu na wyjściu licznika. Czy poniższy kod wskazuje prace kanałów? niestety cały czas kompilator wywala mi błąd. TIM2->CCMR2, TIM_CCMR2_OC3M_PWM1 | TIM_CCMR2_OC3PE...
Z STM32CubeMX kilka razy coś robiłem i choć wielkim specem od bibliotek HAL nie jestem to na oko widać, że po tych trzech zrzutach ekranu prezentujące dwa kawałki kodu i sam program do jego generacji wiele wywnioskować się niestety nie da. Najlepiej dodaj cały kod wtedy będzie można rzucić okiem na coś konkretnego. Ja np. kiedyś generując kod w w CubeMX...
Dane nadaję w postaci paczki, kod ASCII litery P, potem 3 bajty prędkości, po czym bajt z kodem litery K. W programie testowałem również czy nadając daną wartość odczytuję ją poprawnie, dla każdego bajtu tak było. Wydaje mi się, że to nie tu tkwi problem, jednak mimo to załączam kod obsługi przerwania od UART1: [syntax=cpp] void USART1_IRQHandler(void)...
Witam Mam dziwny problem. Do STM32F103RBT6 podłączyłem sobie RTC PCF8563. RTC generuje mi sygnał o częstotliwości 1Hz który wyzwala przerwanie w ARMie. I tutaj pojawia się problem. Niektóre zbocza są jakby pomijane i nie generują przerwania. Taką samą sytuację miałem kiedy wykorzystywałem przerwanie wewnętrzne RTC_IT_SEC. Przerwanie nie zawsze było...
Obecnie: - ARM -> testuję LM4F, a używam STM32: korzystny stosunek możliwości/cena, generalnie łatwo dostępny, tragiczna "bubloteka" ST (nie używam); Do ustawiania peryferii w STMach używasz MicroXplorera (do tej pory jest on chyba ograniczony do ustawienia tylko GPIO) ? Kiedyś podobne narzędzie było wspierane przez Keila, teraz gdzieś "zaginęło"....
Z drugiej strony tez nie mogę mieć przerwań z trzech timerow z częstotliwością 20-30kHz Niby czemu nie? Przy 30kHz masz na jeden cykl timera 2400 instrukcji, 3 timery, czyli 800 instrukcji między przerwaniami, a kod samego przerwania generalnie będzie zajmował 3 linijki... Gdybyś używał timera 1 albo 8, to on ma licznik "powtórzeń", ale w innych tego...
I to sie nie kompiluje. Pewnie zgłasza jakiś błąd, który wypadałoby tu przytoczyć jeśli oczekujesz pomocy. Jeśli to co pokazałeś jest CAŁYM plikiem nagłówkowym, to masz w nim co najmniej dwa problemy: - brak include-guardów, - brak #include <cstdint> Jest to goły projekt automatycznie wygenerowany + ta moja bardzo zaawansowana klasa w pliku dodanym...
Witajcie ja z kolei mam inny problem z tymi timerami. Chce generować przerwanie co określony czas ( włączone przerwanie UPDATE ) i problem polega na tym, że co pewien czas jedno przerwanie jest gubione. Co ewentualnie robię źle kod poniżej: inicjalizacja: TIM_TimeBaseInitTypeDef TIM_InitStruct; TIM_InitStruct.TIM_ClockDivision = 0; TIM_InitStruct.TIM_Prescaler...
Witam. Mam pewien problem. Mianowicie - napisałem program który generuje sygnał 100kHz o wypełnieniu 50%. Kod wygląda tak : https://obrazki.elektroda.pl/9658314300_... Czyli po prostu mniejsze wypełnienie. Z moich wyliczeń wynika, że stan wysoki musi trwać 344 cykli zegara, a stan niski 18. Czy jest jakiś sposób aby timer wyzwalał przerwania...
Witam. Piszę z prośbą o pomoc. Mam problem z kodem generowanym przez CubeMX. Posiadam płytkę NUCLEO-f103rb oraz płytkę z zestawem czujników nucleo-iks01a2. Uznałem, że dobrym punktem wyjścia do nauki obsługi tych czujników będzie przejrzenie kodu wygenerowanego przez CubeMX. W Additional Software Components wybrałem więc jedną z gotowych aplikacji (IKS01A2_LPS22HB_FIFOMode)....
np. ATMEGA168PB-XMINI - w Seguro za 48 zł - płytka kompatybilna sprzętowo z Arduino, dodatkowo na pokładzie programator + debugger co trudno przecenić Prawda, względnie dobra oferta. Za niewiele więcej jest też STM32 Nucleo, też ma wyprowadzenia zgodne z arduino, też ma na pokładzie programator, debugger i vcom na usb (w jednym). Można programować...
patrząc po długości wątku i tak szybciej byłoby ci znaleźć mocniejszy komputer i na nim wygenerować potrzebny kod Generowałem te kody na początku, ale wiele to mi nie pomogło. Programy są bardzo rozbudowane i za chiny ludowe nie mogłem, w tym gąszczu plików znaleźć konfiguracji. Przeglądając programy ludzi, którym to działa, widziałem raptem kilkanaście...
Inicjalizacja może być przeprowadzana z prędkością do 400KHz ... potem można zwiększyć do 25MHz. Czy na początku inicjalizacji generujesz min. 74 takty zegara ("dummy clocks") przy CS ustawionym w stan wysoki ? Najlepiej pokaż cały twój kod bo tak to można gdybać dość długo ;) Ja często korzystam z tego diagramu, i karty wstają bez problemu bez względu...
Wiem, że HAL ma dużo błędów ale łatwo w min skonfigurować zegar, peryferia. Nie trzeba używać funkcji HAL do obsługi np USART gdzie odbiór ma niedociągnięcia. HAL SPI dadaje sie do transmisji dużych bloków danych i prościej napisac dwie linijki używając rejestrów. I2C działa całkiem dobrze. Ja nie walczę dwa dni z np konfigurowaniem EXTI, których używam...
Proszę o dalsze sugestie Sprawdź ten kod poniżej. W odczycie nie bardzo wiedziałem po co odczytujesz rejestr 2 razy, no ale może to przez ten twój błąd. [syntax=c]//NSS w stan niski GPIO_WriteBit( GPIO_SPI1 , GPIO_SPI1_NSS_PIN, Bit_RESET); // Oczekiwanie aż bufor nadawczy będzie pusty while((SPI1->SR & 0x0002) == 0); //Adres rejstru// SPI1->DR...
Witam, Wrzucę swoje 2 grosze: #0. C++ to jest generalnie do bani ;) Do dnia dzisiejszego niektóre elementy standardu są tak niejednoznacznie wytłumaczone że różne kompilatory mogą w pewnych kwestiach(template) generować trochę inny kod. Ciekawe jak radzą sobie kompilatory na uC ? #1. jeśli chcesz używać STM32 M0 (które wielkością flasha nie grzeszą)...
Kiedyś, jak używałem starych bibliotek to do zapisywania we flashu używałem czegoś takiego: motohours = motohours+*(uint16_t*)Address; //sczytuje Niezłe :) A na przyszłość, jak chcesz przechowywać jakieś dane to polecam użyć rodziny STM32L1XX. Posiada ona wbudowany EEPROM, podobnie jak atmegi. Jest łatwiejszy dostęp od strony programistycznej.
Mimo wszystko nie działa. Jak linijke RCC->APB2ENR|= RCC_APB2ENR_TIM1EN dodam gdzieś poniżej pierwszego odwołania do rejestrów TIMERA1 to diody nie zapalają się w żadnej kombinacji, wtedy chyba nie wchodzi do przerwania w ogóle. edit: [syntax=c]#include "stm32f10x.h" void TIM1_UP_TIM16_IRQHandler(void) { GPIOC->ODR ^= 0x300; /*break point*/ } int main(void)...
chodzi o ALIGN ? Dokładnie, chodzi o ALIGN, ale nie tylko, bo generalnie ALIGNem wyrównujesz początek, a chodzi o wyrównanie końca... <: Wszystko zależy od konkretnej konstrukcji skryptu linkera i startupa... Zobacz jak to jest zrobione w moich przykładach (stm32). jaką flage trzeba dodać, aby kompilator ignorował przypisywanie do samego siebie?...
Otóż chodzi m i o to aby poznać co generuje taki kompilator C, C++ itp. jako wynik i się w tym orientować bo np. C czy Python jako tako ogarniam i chciałbym poznać od "podszewki" to co mi tworzy na wyjściu. Do podglądu nie potrzeba sprzętu. Skompiluj sobie program na dowolną platformę, gcc ma możliwość zostawienia pliku asm, który wygeneorwał, możesz...
Wtedy nie byłoby warninga. A czemu nie? Na szybko zadeklarowałem w pliku "test.h" funkcję statyczną funkcja(). W pliku .c umieściłem definicję tej funkcji wraz z włączeniem pliku test.h, a następnie zakomentowałem (czyli brak jest tej definicji), ale plik .h nadal włączam. Kompilator generuje ostrzeżenie: [syntax=c] In file included from src/test.c:3:0:...
(...) by uzyskać częstotliwości 32Hz (okres 0,03125s) oraz 64Hz (okres 0,015625s). Czy możesz ustalić kombinację okresów z tych dwóch dzielników tak aby w ciągu sekundy otrzymać 60? Możesz też zaproponować kod w Arduino generatora taktującego dla TMS3450. Interesuje mnie jak najmniejszy błąd odmierzania czasu. Wprowadzenie Dziękuję za szczegółowe przedstawienie...
No to po kolei. Co do arduino i słowa oryginał - pisząc to jako oryginał miałem rozwiązanie nie eggbot-a, a jego klona pod nazwą sphere-o-bot który faktycznie używa Arduino. Dlaczego wybrałem zrobienie elektroniki na ATMega - zgodną z Arduino ? Z prostego powodu... miałem zamiar udostępnić projekt PCB i schemat (po części poza ceną też nie dawałem z...
Częstotliwość SPI z pewnością nie przekracza tej, dopuszczonej przez producenta (10MHz). Czas pomiędzy CS_Low a pierwszym zboczem narastającym to 20us (wg datasheet'u min., to 20ns). Jednak wydaje mi się ze dzieją się tu strasznie dziwne rzeczy. Mianowicie mam taki kod: http://obrazki.elektroda.pl/5479282200_1... Natomiast każde kolejne...
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...
Z zasady w obsłudze zdarzeń nie ma oczekiwania. Obsługa z oczekiwaniem musi być rozbita na dwa zdarzenia. Nie ma się o co spierać. Piszemy w C, bo tak jest łatwiej i wygodniej (a na ARM - pewnie i kod lepszy, ale na PIC16 czy 51 żaden kompilator nie wygeneruje kodu lepszego niż średnio dobry programista). Piszemy pod RTOS, bo łatwiej i wygodniej, chociaż...
Mam uruchomioną tą kamerę też pod STM32F407IGT6 ( nie discovery ) i tam jest właśnie pod FSMC wysyłane, jednak było to głupie przekopiowanie gotowca. Nie za bardzo mogę zrobić to pod FMC bo potrzebuję obrobić odebraną ramkę w przyszłości w ramie procesora, choć teraz zależy mi tylko, żeby zobaczyć, że coś się zapisuje do mojego bufora, mam też ram zewnętrzny...
Poza tym Zrobienie takiego man-in-the-middle, może być trudniejsze niż się na początku wydaje, a atiny nie jest też demonem prędkości, a nie ma sprzętowego licznika do obsługi enkoderów. Co ty opowiadasz... Mamy enkoder, który generuje max kilka impulsów na sekundę i to ma być problem? No, niby tak, ale robienie man-in-the-middle z attiny i enkodera...
Witam. Jakie są różnice pomiędzy FreeRTOS 6.1.1 a 7.1.0? Prosty program mrugający diodą działa mi pod wersją 6.1.1 a pod 7.1.0 ląduje w default_handler. Przerwanie następuje po wykonaniu tego kodu freertos'a. void vPortStartFirstTask( void ) { __asm volatile( " ldr r0, =0xE000ED08 \n" /* Use the NVIC offset register to locate...
Cześć :) Dopiero zaczynam z STM'ami, natomiast dużo dał mi poradnik szczywronka, za który bardzo dziękuję. Problem jest następujący: korzystam z nucleo-F103RBT6, ustawiam licznik (TIM2 lub TIM3) tak aby po przekręceniu się generował Update Event i wpadał w przerwanie, w którym kasuję flagę UIF. Cały czas podglądam w debuggerze co się dzieje i bardzo...
Witam, problem i zarazem pytanie jak w temacie. Napisałem funkcję obsługi 1-wire z wykorzystaniem bibliotek API STM32 do komunikacji z czujnikiem temperatury DS1820. Funkcja wywoływana jest w przerwaniu od timera. Nie było z nią problemów gdy rdzeń STM-a pracował częstotliwością 168 MHz, przy niższych wstępowały błędy komunikacji. Podejrzewałem, że...
Debugger coś mieszał. Podłączyłem ulinka i zaczelo śmigać... Ale mniejsza - teraz trafilem na znacznie gorszy error ;/ Mianowicie napisałem sobie ISRa który daje semafor funkcją xSemaphoreGiveFromISR(). Konfiguracja priorytetów 4:4. configMAX_SYSCALL_INTERRUPT_PRIORITY = 9 ISR ma priorytet 10 Grzebanie w NVICu jest w sekcji critical. Niestety funkcja...
Kolego, kompilator nic nie wie o adresach, typach pamięci i całym tym bałaganie. Cóś jednak wie czasami - bo jak by nie wiedział to jak by avr-gcc generował poprawny kod dla NAS? Zanim zaczniesz pisać takie rzeczy to zrób test ile trwa kommpilacja pliku zawierającego kilkuset kB tablicę. No tak coś koło tej. 0.2sek może 0.5sek, szczególnie że secjalnie...
To nigdy nie działało dla ARMów [; Żeby zrobić reset trzeba zakończyć jedną sesję GDB i rozpocząć nową, tyle że za drugim razem nie trzeba ładować kodu do flasha (jeśli debugowanie jest we flashu). _______________________ Zrobiłem paczkę z kilkoma najważniejszymi plikami - echo, make, mkdir, rm oraz sh. Instalator który stworzyłem dodaje stosowne ścieżki...
generowanie impulsów stm32 generowanie impulsów generowanie pradu
kontrolki mrugaj volvo zasięg telewizji naziemnej volvo silnika
pioneer instrukcja obsługi polski pioneer instrukcja obsługi polski
Kodowanie pompy ABS Audi A2: Kody i procedura Rozładowanie akumulatora w systemie Satel Integra