Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
Po kilku godzinach program odpaliłem ..... podświetlanie się załącza dopiero po naciśnięciu kilka razy klawisza, monitor pokazuje start i numery naciśnietych klawiszy i to nie za każdym naciśnięciem. nie wiem jak "zatrzymać" dany ekran menu żeby zrealizować inna funkcje np; zmiana stanu wyjścia /* * sterownik który wykończy mnie i innych ..............
Poniewaz wszystkie wczesniejsze #define masz w warunku #if 0 #endif czyli niespelnionym. Zreszta w CubeIde powinienes miec to zaznaczone na szaro (wylaczone). A czy to nie powinno być zrobione tak, że ja powinienem zamienić #define EVE_EVE3_50G z linijki 119 na #define EVE_RVT35 zamiast linijki 104? https://obrazki.elektroda.pl/8326677800_...
Trzeba dodać, że static inline będzie powielał kod w miejscach wywołania, co powoduje że kod działa szybciej (brak call'i) ale rozmiar kodu będzie większy. Niekoniecznie - o tym decyduje kompilator. Ale jeśli użyjesz gdzieś pointera do funkcji to już funkcja skompiluje się normalnie. Co nie znaczy, że jej treść nie będzie mogła być wstawiana w miejsca,...
Zaprojektowałem i zbudowałem płytkę wyposażoną w procesor STM32F107RCT6 oraz dekoder popularny MP3 VS1003. Jest to kolejna wersja starszego projektu na PIC32, który przenoszę na nowy mikrokontroler. Większa część projektu PCB pochodzi ze starej wersji. Do komunikacji z VS1003 używam popularnej biblioteki Andy'ego Karpova, którą już wcześniej przeportowałem...
Jak coś już coś muszę na pollingu robić to: tick_ms_irq musi być wywoływane w przerwaniu od tmera co 1ms. BTW: Ten kod z HAL'a to niezła padaka: if, if, if, if .... :)
Witajcie, Potrzebuję zrealizować wizualizację danych o małej zmienności, które pochodzą z kilkunastu sensorów. Autorskie rozwiązania typu TFT+GUI+TP odrzuciłem ze względu na brak kompatybilności z różnymi systemami i dodatkowe koszty związane z opracowaniem sprzętu. Po analizie dostępnych rozwiązań padło na Domoticz + MySensors ze względu na możliwość...
Witam, chciałem się poradzić wyjadaczy (albo każdego kto się zna i może coś doradzić) od STM32F103 nt. wydajnej obsługi portów na tym procku. Nie pisałem dużo rzeczy na te procki a już szczególnie nie takie które wymagały świetnej wydajności. Teraz bardzo zależy mi na tym, zarówno na obsłudze portów typu (odczytaj port/zapisz na port, odczytaj/zapisz...
Właśnie przerabiam bibliotekę hd44780 która działa na atmega ale na stm32 nie może mi ruszyć inicjalizacja ekranu. Jeżeli kolegom nie będzie się chciało analizować całości to proszę chociaż oto jak koledzy robią inicjalizację ekranu. Plik .h [syntax=c]/* * hd44780.h * * Created on: 08.11.2017 * Author: Pawel */ #ifndef HD44780_H_ #define HD44780_H_...
Zmieniłem trochę w projekcie. Zastosowałem najnowszą wersję FatFS. Plik z konfiguracją funkcji zadeklarowanych diskio.h pobrałem ze [url=http://www.siwawi.arubi.uni-kl.de/a... strony i przerobiłem go by pasował do STM32L. Po testach objawy wyglądają tak: Karty 512MB i 16GB: porgram mniej...
To ja zaproponuje taki nagłówek :D [syntax=c]#ifndef GPIO_H_ #define GPIO_H_ #define CNF_ANALOG 0 #define CNF_FLOATING 1 #define CNF_INPUT 2 #define CNF_RESERVED 3 #define CNF_GPPP 0 #define CNF_GPOD 1 #define CNF_AFPP 2 #define CNF_AFOD 3 #define MODE_INPUT 0 #define MODE_OUTPUT_2MHZ1 #define MODE_OUTPUT_10MHZ2 #define MODE_OUTPUT_50MHZ3 #define ANALOG_MODE...
I czemu Ty na miłość boską wkładasz całą funkcję w header ? To właściwe miejsce na funkcję "static inline" Albert
Pisałem gdzieś jak się je włącza, na co Freddie napisał, że są funkcje w CMSIS, które z resztą na forum też już wklejałem. [syntax=c]/** * (at)brief Enable Interrupt in NVIC Interrupt Controller * * (at)param IRQn The positive number of the external interrupt to enable * * Enable a device specific interupt in the NVIC interrupt controller. * The interrupt...
pomijając parę innych kwestii, chociażby możliwość deklarowania funkcji jako inline (tak, wiem, w przypadku zwykłego słówka "inline" jest to tylko sugerowanie kompilatorowi, żeby inline'ował, ale np. w przypadku gcc można funkcji nadać taki atrybut: __attribute__((always_inline)) i wtedy kompilator nie ma wyboru, nawet gdy ma optymalizacje ustawione...
Odwracasz kota ogonem. Nigdzie nie pisałem, że ta oszczędność do czegokolwiek jest potrzebna. Ale skoro autora to gnębi, to mu odpowiadamy. A poznanie kompilatora może kiedyś się przydać. Piszesz o asemblerze, modyfikatory typu const, static, inline po coś wymyślono. Dobrym nawykiem jest informować kompilator o swoich intencjach, a nie pisać byle się...
Tak to jest jak się z tej ogłupiającej biblioteki korzysta. Zajrzałem do core_cm3.h , tam funkcja SysTick_Config(ticks) przyjmuje postać: static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk)...
ja pobralem najnowsza paczke mam plik func tego typu __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __get_PRIMASK(void) { uint32_t result; __ASM volatile ("MRS %0, primask" : "=r" (result) ); return(result); } /** \brief Set Priority Mask This function assigns...
Ok, compiling cppsupport.c... ..\..\..\Libraries\ISIX_RTOS\include\isi... warning: #260-D: explicit type is missing ("int" assumed) ..\..\..\Libraries\ISIX_RTOS\include\isi... error: #65: expected a ";" ..\..\..\Libraries\ISIX_RTOS\include\isi...
Witam wszystkich. Uzywam Eclipse + OpenOCD (0.9.0) + GCC. Do tej pory używałem STM32F103 (Cortex-M3), a teraz przesiadłem się na STM32F373 (Cortex-M4). Wziąłem ze starego programu skrypt linkera, startup, vectors.c i posklejałem do kupy odpowiednio je modyfikując. Program generalnie odpala się, mogę sterować GPIO. Następnie spróbowałem uruchomić SysTicka....
Jeśli jest jakaś literatura, proszę o naprowadzenie Oczywiście że jest. Nazywa się programming manual (w załaczeniu do M4) oraz "Cortex-Mx Technical Reference Manual" na stronach ARM-a. Są też fajne książki Josepha Yiu (wygoogluj sobie - kupisz na amazonie) Jaka jest najprostsza metoda do zapisania wartości rejestru lr do zmiennej języka c? Jak to...
Taka mała ciekawostka: NVIC->IABR jest tylko do odczytu. Indeksy tablicy zaczynamy od 0. To jest trochę mylące ale EXTICR1 = EXTICR[0] Używaj makr. Włączyłeś zegar dla AFIO ? Są funkcje w cmsisie do ustawiania przerwań, ale ich nie używałem, więc należałoby zerknąć do pliku nagłówkowego EDIT: [syntax=c]/** * (at)brief Enable Interrupt in NVIC Interrupt...
Jeśli scalaki masz na płycie i mozesz zagwarantować brak zakłóceń na magistrali, to się baw tym I2C w STM32 ;] "Ludziom działa"... Jeśli chcesz rozwiązanie wyjątkowo proste i odporne, to pozostaje przejściówka I2C<->SPI (lub UART) na oddzielnym procku w którym I2C nie ma błędów, czyli np. LPC1111. W dsPICach I2C też ma błędy, i ogólnie w prockach...
Do konfiguracji GPIO, zamiast tego pasztetu który masz, polecam coś takiego: [syntax=c]#define CNF_ANALOG 0 #define CNF_FLOATING 1 #define CNF_INPUT 2 #define CNF_RESERVED 3 #define CNF_GPPP 0 #define CNF_GPOD 1 #define CNF_AFPP 2 #define CNF_AFOD 3 #define MODE_INPUT 0 #define MODE_OUTPUT_2MHZ1 #define MODE_OUTPUT_10MHZ2 #define MODE_OUTPUT_50MHZ3...
Kto wie, co w tych bibliotekach od ST siedzi, znalazłem gdzieś na forum, że przy wywołaniu tej funkcji (i przy używaniu tych bibliotek) komuś wywala HardFault Exception (tylko przy podpiętym debugerze i IDWG). Po odpięciu JTAGa śmiga. To nie jest funkcja ST, tylko ARMa - jest ona częścią biblioteki CMSIS, którą tworzy jedynie ARM, ST nie ma z nią nic...
>kasia.p Policzmy: dla 115200bd, można przesłać 11520 bajtów na sekunde. Jeśli chcesz popchnąć ramkę z danymi 500 razy na sekundę, to 11520/500=23. Czyli możesz wysłać paczkę danych o wielkości 23 bajty 500 razy na sekundę. Ograniczmy się do łopatologii, zakładając: - enkodowanie base16, czyli potrzebujesz 3 bajty do popchnięcia 12 bitowej danej,...
Przestawiłem ową interesującą mnie linijkę z (1ul << 2) na: [syntax=c] static __INLINE uint32_t SysTick_Config(uint32_t ticks) { if (ticks > SysTick_LOAD_RELOAD_Msk) return (1); /* Reload value impossible */ SysTick->LOAD = (ticks & SysTick_LOAD_RELOAD_Msk) - 1; /* set reload register */ NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS)...
Jednak Cię okłamałem - tablice IP mają dla każdego przerwania osobny element (; Sorry W razie wątpliwości zawsze można podejrzeć kod z CMSISa (; [syntax=C]/** * (at)brief Set the priority for an interrupt * * (at)param IRQn The number of the interrupt for set priority * (at)param priority The priority to set * * Set the priority for the specified interrupt....
Temat jakoś umiera śmiercią naturalną. Pozwolę sobie nieco odświeżyć. Hardware: - HY-mini (Cortex M3) - LCD ze sterownikiem ssd1289 (FSMC) - karta sdhc (SDIO) Software: - fatfs R0.10 („testowałem” też wcześniejsze wersje) - „HAL” dla fatfs – silnie wzorowany na przykładach dołączonych do HY-mini i przykładach sugerowanych...
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...
Ponieważ dalej mi to spędza sen z oczu, a przy okazji daje fragment z książki o której mówiłem na temat STM32 opisującej przerwania. Zabaczcie jeszcze cos ciekawego. W bibliotece STM są takie dwie funkcje przeliczające nr priorytetu mając grupę, preempriority oraz subpriority. Z książki o STM: NVIC...kieruje się następującymi zasadami arbitrażu 1. Jeśli...
-> BlueDraco Postraszyłeś tym DMA i teraz początkujący Kolega uczy się: "DMA jest trudne i złe, lepiej napisać to na przerwaniach". BŁĄD!! Po to jest DMA w prockach, zeby z niego korzystać, i odciążać rdzeń tu gdzie tylko się da. I tym sposobem moja konstrukcja mieli ciągły strumien z UARTa rzędu 230kB/s dekoduje, sprawdza poprawnosc, przetwarza,...
Nie zauwazylem zadnej struktury dla SysTicka poza tymi definicjami. Zajrzyj do core_cm3.h , tam jest gotowa funkcja z CMSIS SysTick_Config(uint32_t ticks) i tam też znajduje się odpowiednia struktura w tym headerze. SysTick jest dostarczany z rdzeniem przez ARM. Dlatego konfigurację NVIC, ITM czy SysTick nie szukasz na stronach producenta mikrokontrolera...
Przy DMA też wisi przy sprawdzaniu I2C_CR1_STOP, I2C_SR1_ADDR, I2C_SR1_BTF. W poolingu działa, ale też po chwili wisi najczęściej w sprawdzaniu I2C_SR1_ADDR. [syntax=c]void i2c_Init(I2C_TypeDef *I2Cx, uint16_t bus_speed) { if(I2Cx == I2C3) { RCC->APB1ENR |= RCC_APB1ENR_I2C3EN; RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN; gpio_pin_cfg(GPIOC, 9, GPIO_AF4_OD_50MHz);//sda...
(at)Piotr Piechota Ja robiłbym coś w stylu: [syntax=c] static inline uint32_t bitfield_update(uint32_t bf, uint32_t mask, uint32_t value) { return (bf & ~mask) | (value & mask); } .... const uint32_t mask = RCC_PLLSAICFGR_PLLSAIN | RCC_PLLSAICFGR_PLLSAIP | RCC_PLLSAICFGR_PLLSAIQ | RCC_PLLSAICFGR_PLLSAIR; const uint32_t value = 192 // N=192...
Hej, dzięki za odpowiedź - nie działało, bo wywaliłem pliki z USARTem, a w jednym miejscu użyte było printf, co co ciekawe nie wywalało się w czasie kompilacji, ale po wywaleniu tego fragmentu jestem w stanie uruchomić debug. (Faktycznie nie popisałem się z tym .elf, noob ze mnie) Teraz jednak mam problem - SPI1->SR po kilku (około 20 - 40) odczytach...
Po pierwsze to powinieneś solidnie komentować takie funkcje. Opisz sobie dokładnie które zmienne powinny mieć jakie jednostki. Gdybyś to zrobił to byś zobaczył że do zmiennej która trzyma wartość w stopniach przypisujesz radiany. Dalej - zastąp RAD2ST makrem DEG2RAD(x). Będzie czytelniej. Jeżeli nie masz jakiejś kosmicznej konieczności stosowania liczb...
Witam Zmagam się z problemem obliczania CRC na STM32F4. Problem polega na tym że mam ramkę danych 100 bajtową złożoną z 96 bajtów danych a na 4 ostatnich obliczona suma CRC za pomocą wbudowanego modułu. Dane wysyłane są poprzez DMA+USART. Również do obsługi CRC używane jest DMA. Chodzi o to że dane są wysyłane poprawnie i poprawne odbierane. Problem...
W F030 strona ma wielkość 1kB co oznacza, że zmieści się tylko 256 zmiennych Jak to obliczyłeś? Pewnie 1024/4 bajty = 256, ale tutaj tak to nie działa. Strona 1024 bajty to 1024 bajty, inaczej 512 półsłów. Zapis do stron pamięci w STM32F0 wymaga zapisywania półsłów, do jednej strony oczywiście można zapisać 512 półsłów. W poniższym przykładzie zapisuję...
(at)Freddie no fakt, trzeba by często w to trafiać. Sprawdzę to jeszcze u siebie jak wrócę z roboty, teraz nie mam STMa pod ręką. A mimo wszystko nalegam, aby Autor pokazał kod asemblerowy programu. Dodano po 2 Data race o którym piszesz faktycznie tam jest - wczytałem się wreszcie porządnie if((zapalona) && (TIM9->CNT > 5000) ) pomaga...
Witam, mecze się z DS18B20. Naskrobałem poniższy kod ale wydaje się działać połowicznie. Ale po kolei, pierwsze co robię to ONE_WIRE_Init (), a potem ONE_WIRE_Read_Tmp(). I przy tej drogiej funkcji mam problem bo zwraca ona za każdym razem 0x0808 (jak by komendy nie zmienić zawsze tak samo, a nawet bez komend). ONE_WIRE_Init_Sequence() działa poprawnie...
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...
Witam, niestety muszę prosić o pomoc u podstaw, bo poległem. Problem jest taki: chciałem skompilować testowy program za pomocą arm-none-eabi-gcc z biblioteką CMSIS, bez żadnych eclipse, bez żadnych płytek rozwojowych - po prostu dioda podłączona do wyjścia procesora. Biblioteka chyba nie przewiduje bycia używanym przez arm-none-eabi-gcc więc: 1. utworzyłęm...
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.
U mnie sa roznice. Kompiluje na O2 (przy asm i tak to nie ma znaczenia). Procek dziala na 72MHz. Jeszcze raz powrorzylem test. Zapis do pamieci bb u mnie jest wolniejszy: [syntax=c] int a; volatile int xx = 1; volatile int k; static inline void bitband_str_prepare(void) { asm volatile(" \n" "movw r7, #0x84A8 \n" "movt r7, #0x4225 \n" ); } static inline...
To są jednak rejestry sprzętowe i należy to minimalnie zmodyfikować (nie sprawdzałem poprawności adresów itp) [syntax=c]#define DWTEn() (*((volatile uint32_t*)0xE000EDFC)) |= (1<<24) #define CpuTicksEn() (*((volatile uint32_t*)0xE0001000)) = 0x40000001 #define CpuTicksDis() (*((volatile uint32_t*)0xE0001000)) = 0x40000000 #define CpuGetTicks()...
Witam Kolegów. Zauważyłem dziwny problem przy pomiarze Vref jeżeli procesor popracuje trochę czasu. Otrzymane dane są zawyżone o 16% (zawsze identycznie). Dzieje się to po włączeniu generacji PWM-ów. Inne kanały ADC działają poprawnie. Rejestry ADC są ustawione identycznie. Ktoś może zetknął się z takim problemem. ADC oczywiście po kalibracji etc etc....
Witam! Od jakiegoś czasu usiłuję napisać aplikację obsługującą kilka wątków (taki wstęp do RTOS) i przełączającą kontekst między nimi. Problem tkwi w tym, że podczas wczytywania kontekstu (LoadContext()) wywala FaultHandler. Zdebugowałem ustrojstwo i wynikiem są dwa bity CFSR: IMPRECISERR oraz STKERR. Nie wiem co może być przyczyną, być może czegoś...
Witam, Próbuje uruchomić obsługę karty SD pod STM32f103ZET6. Wykorzystuje do tego bibliotekę, używaną wcześniej pod STM32f407. Zmodyfikowałem tylko inicjalizacje SPI i dorzuciłem testową funkcję zapisu do karty. Mimo to karta nie chce ruszyć. Przy próbie otwarcia jakiegokolwiek pliku dostaje: FR_NOT_READY. Próbowałem już na dwóch kartach SD, formatowałem...
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]/** ****************************************...
składanie zmiennej przez |= miało pokazać co musiałbym zrobić aby uzyskać podobny kod wynikowy do tego co wygenerował kompilator. I ja tak nie piszę lecz takie coś na podstawie prostej operacji wygenerował kompilator. Tak wygląda mój kod bo widzę, iż ktoś sięciągle czepia przykładu jak mniej więcej wyglądać musiałby kod źródłowy aby uzyskać taki dziwny...
inline static static inline funkcja static inline
cyfral panel otwieranie garaż pilot wymiana świece kosiarki
samsung ue65cu7172 odkurzacz roboclean
Schemat podłączenia przetwornika Huba Control 520.99042 Wymiana przegrzanego rezystora: czy to konieczne?