Timery i dokładne odmierzanie czasu w różnych miejscach kodu. Zamiast korzystać z kilku timerów, można w różnych blokach kodu konfigurować 1 timer i wstrzykiwać odpowiednią funkcję przerwania. Oczywiście pod warunkiem, że nie będziemy musieli odmierzać czasu dla dwóch bloków jednocześnie. Wygląda na to, że potrzebujesz po prostu callbacka w jednym...
Jak wygląda sprawa z przerwaniami? Tam zamiast przerwań są używane callbacki. To nie tak jest. Callbacki są całkiem do czego innego. W programie HALowym, to użytkownik pisze obsługę przerwań sprzętowych (tak jak w klasycznym podejściu "rejestrowym") a specyfiką HAL jest tylko to że dostarcza pewnych gotowców na obsługę przerwań. Przykładowo weźmy uart....
W moim przypadku to wygląda tak, że mam wypracowaną własną warstwę abstrakcji sprzętu. Przykładowo do SPI jest maszyna stanów co mieli strumień bajtów danych + nagłówek z kolejek (typu FIFO jako bufor cykliczny). Pod to callbacki do sprzętu (open, write, read, close, ioctl), i rybka czy w środku jest if (queue) wyslij czy na przerwaniach. Nagłówek zawiera...
Na moje oko to nie ma prawa działać poprawnie. W tym kodzie praktycznie wszystko jest źle. Funkcja callback jest wołana po odebraniu danych do bufora, wcześniej przekazanego przy wywołaniu Receive. Ty nie bierzesz danych z bufora, do którego zapisała je obsługa przerwania z HAL, za to kolejno wielokrotnie odczytujesz RDR, nie wiedząc, co właściwie z...
I jest to prawidłowa reakcja w przypadku HAL-a, który pomimo tego że go nie używasz jest używany i jest częścią projetu. Musisz co zbedne wyrzucić. Lub bez zmian w projekcie napisz sobie funkcję o nazwie HAL_SYSTICK_Callback zamiast handler
To po prostu tak nie zadziała, bo w kodzie powyżej masz pełno różnych błędów. Zrób tak jak to opisał Piotr Jankowski w poście nr 6, czyli w przerwaniach. Twoje założenie, że modem odsyła tylko dwa znaki jest mocno błędne, choćby dlatego, że odsyła on zwykle sekwencję \r\n zarówno przed jak i po odpowiedzi. Do tego poza OK możesz dostać bardzo wiele...
W callback-u z przerwania RX wołasz ponownie funkcję odbioru HAL-a. To jest dopuszczalne? Nie wiem, nie znam się na HAL-u STM, ale na mój nos wygląda podejrzanie...
Czy lepiej zostawić operację na bitach w funkcjach wewnątrz biblioteki i jak będę zmieniał pracka to ewentualnie modyfikować te funkcje, czy może wydzielić to do osobnego pliku np. bridgeMspConfig i przekazywać te funkcje callbackami do biblioteki? Ja bym się nie cyrtolił tylko w bibliotece po prostu miał odpowiednie #ifdef-y i tyle. Callbacki mają...
Po co ten cały dziwny kod w callbackach. Przesuwanie bitowe w prawo liczby ze znakiem jest niesprecyzowane przez C (implementation definded behaviour) a Ty po prostu chesz skopiować dane z jednej tablicy do drugiej. Uzyj memcpy memcpy(txBuf, rxBuf, 4 * sizeof(*txBuf)); /* i */ memcpy(txBuf + 4, rxBuf + 4, 4 * sizeof(*txBuf));...
I tu był pies pogrzebany. Sądziłem iż skoro obsługuje callbacky to nie muszę głównego przerwania. Mam teraz kolejny problem. To oznacza że jak na projekt używający HAL masz źle to wszystko zrobione. HAL jest tak dziwnie zrobiony, że jeżeli nie wygenerujesz kodu startowego w Cube to zginiesz. Gdybyś tak zrobił to wtedy w pliku "..._it.c" miałbyć ten...
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...
Nie pisze tutaj, żeby się mądrować, tylko z prośbą o pomoc. Korzystam z przykładów firmy st dostępnych do pobrania. Jedyna modyfikacja którą wprowadziłem to zmiana deskryptora raportu (przedstawiona wyżej). W funkcji EP1_OUT_Callback() mam tylko: void EP1_OUT_Callback(void) { USB_SIL_Read(EP1_OUT, Receive_Buffer); SetEPRxStatus(ENDP1,...
stdin -> 0 stdout -> 1 stderr -> 2 jeśli chcesz mieć inne cyferki, to musisz coś "otworzyć", czyli użyć funkcji fopen(), oraz oczywiście zaimplementować funkcję _open(), która właśnie odpowiada za zwrócenie właściwej cyferki. Nie możesz sobie do fprintf() podać "czegokolwiek" i nawet nie wiem jak udało Ci się tam podać coś typu int, skoro funkcja oczekuje...
No a zdradź mi tajemnice dlaczego to mają być przerwania a nie callback-i. Jeżeli chcesz funkcje A wolac co każde przerwanie a B co 20 na przykład to zrób sobie licznik. Sprzętowo to tak jak MS napisał nie da się. Jak potrzebujesz licznik w liczniku to albo kaskadujesz timery albo robisz to programowo.
Jakiś specyficzny dla STM32 callback wpinany gdzieś po drodze nie jest zbyt abstrakcyjny. Callback jest ogólny dla każdego stanu, ale oczywiście ew obsługa jest jak najbardziej nie abstrakcyjna. Bo w końcu pisze się na konkretny procesor. Bo to nie jest specjalny problem, żeby skomplikować użycie całości w 99,666% tak zwanych "typowych przypadków",...
Witam ponownie! Odkopuję temat. użyłem Twojego skryptu linkera od stm32 (zmienilem tylko sekcję memory i o dziwo działa), do tego wrzuciłem Twoje callbacki. niestety... wywala mnie przy sprintf. mało tego wcześniej działał dla zmiennych typu int, a przy floatach się wywalal.. teraz niestety wywala się przy obu... jeszcze jakies propozycję? generalnie...
Witam. Postanowiłem uruchomić usb na mojej płytce z stm32. Skopjowałem przykłąd z exampla stm32_usb_device_lib. Dodałem kilka własnych plików : stm32_eval.h,.c Skonfigurowałem definicje pinów dla karty sd, wykrywanie usb itd. Używam startup'u i pliku make frediego chopina więc (myślę że dobrze zrobiłem, ale pewności nie mam, przerwania nie są wywolywane...
W przerwaniu USB_LP powinienes wywoływać jakąś biblioteczną funkcję, która obsłurzy zdarzenia USB. Nie wiem jak ta funkcja moze sie nazywac (nie korzystam z SPL), ale na pewno taka istnieje. Z tego co widzę, twój ISR jest pusty ;] nie dziw sie ze wlazi do funkcji i z niej nie wylazi... No jak to pusty: r0536872256 r1536872256 r24 r30 r44273956351 r54293656133...
(...) parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ https://obrazki.elektroda.pl/7610684000_... https://obrazki.elektroda.pl/2590996500_... https://obrazki.elektroda.pl/3191504300_... Dziękuję za szczegółowy opis problemu oraz udostępnienie...
W main.c czarów nie ma , bo stworzyłem nowy projekt golasa na potrzebę uproszczenia szukania problemu. Nie jestem programistą ani elektronikiem ,a do sprawy podchodzę hobbistycznie jako początkujący. Korzystam z System Workbenach for stm32 + Stm32CubeMX z bibliotekami HAL. Cube szykuje wszystko po czym ja tylko dodaję funkcję HAL_SYSTICK_Callback. plik...
Wydaje mi się że nie wystarczy jedynie po prostu wywołać podanej przez Ciebie funkcji. Po pierwsze należy odpalić funkcję dns_init(), a jako jej parametr najlepiej przekazać pierwszy z adresów DNS uzyskanych po zakończeniu algorytmu DHCP (o ile się go używa), ponieważ to zapewni niezależność od podłączenia urządzenia. DHCP zapewni uzyskanie adresu DNS...
https://obrazki.elektroda.pl/8115074100_... W związku z urlopem postanowiłem opisać wykonaną w ostatnim czasie konstrukcję. W zawodzie nauczyciela akademickiego jest to 36 dni roboczych plus w moim przypadku 26 dni zaległych z zeszłego roku. Jest to więc trochę czasu - za dużo. Wszystko zaczęło się od znalezienia tunera DVB-T Opticam...
Generalnie zrodziło się to na praktyce. Gość chciał taką funkcję abyśmy mu udostępnili i to jest jedna rzecz której wtedy nie zrobiłem. No i mnie bardzo to gryzie. Generalnie na praktyce pisaliśmy bibliotekę tak aby następna osoba której przekażemy nie musiała grzebać w rejestrach czy SPLu tylko wpisuje sobie HAL-> Init(); i ma wszystko zainicjalizowane...
Problem rozwiązany. Okazuje się, że aby odebrać kolejny pakiet danych należy po odebraniu poprzedniego wywołać funkcję: USBD_CDC_ReceivePacket(hUsbDevice_0); Jeśli tego nie zrobimy, żadne dane nie będą już dochodzić. Trochę kuleje dokumentacja od ST. Ta funkcja np jest opisana w niej jako: Receives Transfer completed callback. Czyli na moje, że jest...
OK. Zdaje się, że bez kodu trudno będzie to wyjaśnić. Inicjalizacja TIM1: [syntax=c] void timc_startup(void){ // timer clock and interrupt __HAL_RCC_TIM1_CLK_ENABLE(); // Set Interrupt Group Priority //HAL_NVIC_SetPriority(TIMc_IRQn, TIMc_IRQ_PRIORITY, 0); //HAL_NVIC_EnableIRQ(TIMc_IRQn); hTIMc.Instance = TIMc; hTIMc.Init.Period = TIMc_PERIOD-1; trace_printf("timHandle.Init.Period:...
Możesz dać gotowca jak masz i przeanalizuje to. Gotowca (źródła), który działa prawie identycznie (inne częstotliwości migania ale to drobny szczegół) jak Twoje założenia projektowe, masz u siebie na dysku. Jest to program demo wgrywany fabrycznie do płytek Nucleo i znajduje się w repozytorium programu STM32CubeIDE. Gdzie akurat u Ciebie na dysku jest...
UART jest skonfigurowany poprawnie w CubeMx. Sprawdzałem. Jest nadawanie i odbiór. Z kolei jednoelementowa tablica, która jest następnie przekazywana do funkcji HAL_UART_Transmit_IT jest zdefiniowana globalnie, więc dane nie powinny ginąć. Dalej nadawanie wygląda tak, że zdefiniowana jest funkcja obsługująca przerwanie od nadawanie przez UART. W obsłudze...
Zastosowałem się do Twoich wskazówek, porzuciłem HID na rzecz właśnie vendor specific. Posprzątałem także ConfigDescriptor i teraz wygląda tak: [syntax=c]const uint8_t ConfigDescriptor[SIZ_CONFIG_DESC] = { 0x09, // bLength: Configuration Descriptor size USB_CONFIGURATION_DESCRIPTOR_TYPE,// bDescriptorType: Configuration SIZ_CONFIG_DESC, // wTotalLength:...
Zobacz dokumentację lwip. To jest callback funkcja i masz to wszystko napisane. Attolic to eclipse tak że wystarczy że na jedziesz na nią, o ile czegoś nie namacili.
Az tacy cieniutcy to oni nie są . Nie sa const dlatego ze funkcje _mogą_ modyfikować elementy struktur. - Jest to gdzieś opisane ale nie podejmuje się teraz podać link-a Są. Rozumiem że poniższa funkcja też może modyfikować to co wysyła? HAL_StatusTypeDef HAL_USART_Transmit(USART_HandleTypeD... *husart, uint8_t *pTxData, uint16_t Size, uint32_t...
Dzięki za odpowiedź ! Spróbowałem grafiki 10x10 przy zadeklarowanym stosie [syntax=c]#define STACK_SIZE 0x000800[/syntax] Problem w tym że działam na Coocoxie, i nie mam pojęcia gdzi mogę zmienić wartość sterty ( on nie generuje plików startup.s). Co mnie jeszcze bardziej dziwi nie mogę znaleźć funkcji odczytującej z pliku. Nie jestem pewien czy to...
Witam. Rozpocząłem przygodę z programowaniem układów STM32F4. Nabyłem płytkę XNUCLEO-F401RE (kompatybilną z NUCLEO-F401RE) oraz skorzystałem z kursu który znajduje się pod tym linkiem [url=http://forbot.pl/blog/artykuly/prog...
https://obrazki.elektroda.pl/6710486900_... Każdy, kto zaczyna swoją przygodę z Arduino, zwykle na samym początku staje przed dylematem w jaki sposób prosto i przejrzyście zarządzać zadaniami, które uruchamiane powinny być w określonych i najczęściej różnych interwałach czasowych. Jest to problem tzw. harmonogramowania zadań. W niniejszym...
Tworzenie aplikacji użytkownika w C++ ma wiele zalet, więc nie jest zaskakujące, że język ten staje się coraz bardziej popularny wszędzie, w tym w systemach opartych na małych mikrokontrolerach. Projekt „mbed” jest w pełni skoncentrowany na tym języku. Wiele RTOSów zapewnia warstwę kompatybilności z C++, ale w przeciwieństwie do „dużych”...
Faktycznie, rozwiązanie kwestii działania SPI było dosyć proste i po sprawdzeniu - SPI działa. Odczytuję zapisany wcześniej rejestr poprawnie. Teraz mam inny problem. Poniżej zamieszczam program z pliku main.c, w którym są dodane miejsca wysyłania kolejnych numerów przez UART i program zatrzymuje mi się po wysłaniu numeru 88. Nic więcej się nie dzieje,...
Tak sobie myślę, że w zasadzie o to czy to jest OHCI czy UHCI czy Custom Host Controller to za bardzo martwić się w tej bibliotece nie trzeba. Skoro jest to biblioteka ST to musi być dopasowana do sprzętu host-a w procu ST. Kodem za bardzo nie ma co rzucać bo jest to kod całkowicie standardowy - prawie kropka w kropkę przykład ST. Zmieniony tylko proc...
Co do tłumaczenia not i korzystania z bibliotek to moje zdanie jest takie że początkującemu programiście takie podejście bardzo odpowiada. Ponadto wpajanie nawyku używania standardowych funkcji przygotowuje taką osobę do współpracy z innymi programistami. Zdarzyło mi się kilkukrotnie pisać kod z drugim programista i nie wyobrażam sobie żeby każdy z...
A więc tak: - dopisałem do syscall funkcję _exit() - usunąłem -march skopiowałem do flash.ld twoją definicję sekcji .bss. oto wynik: make ========================================... Build info: BOARD: maple MCU: STM32F103RB MEMORY_TARGET: flash See 'make help' for all possible targets ========================================...
Cześć, Ponieważ pojawiła się prośba o możliwość udostępnienia uproszczonej wersji na inny uC to przedstawię krótką instrukcję jak dostosować projekt do potrzeb. Generalnie w obecnej wersji obsługiwane są dwie rodziny procesorów czyli STM32F4xx i STM32H7xx - prawdopodobnie nie powinno być większych problemów z innymi podobnymi układami STM natomiast...
Dlaczego wyskakuje mi błąd "Undefined symbol Init_GLCDPORT?" [syntax=c] /* Includes ----------------------------------------... #include "main.h" #include "stm32f4xx_gpio.h" /* Private typedef ----------------------------------------... /* Private define ----------------------------------------...
Witam posiadam STM32 F042K6, posiadam również czujniki które zmieniają swój stan z wysokiego na niski podczas wykrycia przeszkody. Potrzebuje zamienić ify na przerwania tzn. [syntax=c] while(1){ przodprawo = HAL_GPIO_ReadPin(GPIOA, przod_prawo_Pin); przodlewo = HAL_GPIO_ReadPin(GPIOA, przod_lewo_Pin); prawo = HAL_GPIO_ReadPin(GPIOB, prawo_Pin); lewo...
Witam Mam problem z współpraca funkcji po wywołaniu client_browse_url("/aqua/wykres/update.p... uruchamia się w ip_arp_udp_tcp.c i wywołuje następną funkcje www_fd=client_tcp_req(&www_client_intern... ta funkcja także uruchamia się ale nie może wywołać...
stm32 funkcja default callback callback komunikat
połączenie gazowy wyświetlacz esp32 zmywarka uszkodzić
smart przełącznik smart przełącznik
Usunięcie konta na YouTube - możliwe przyczyny i rozwiązania Schemat ideowy aparatu do badania kabli ABK-45A – Kenetron/ZWAR, różnice z ABK-45