Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
bo masz stos za mały to jest zmienna lokalna i ona się tworzy na stosie, w crossworksie standardowo jest 128-bajtowy stos dla stm32 trzeba w propertiesach projektu poszukać i zmienić
http://pl.wikibooks.org/wiki/C/Operatory zmienna op= coś to to samo co zmienna = zmienna op coś gdzie op to jakiś operator (dodawanie, dzielenie, mnożenie, fajek palenie, czy tak jak w tym przypadku suma logiczna).
Czy zmienna kierunek jest globalna i volatile? Już po pierwszym przerwaniu powinna przyjąć wartość 1 lub 2, a nie być cały czas 0. Czy zaobserwowałeś zwiększanie wartości zmiennej enkoderA ?
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
Ja to bym zapisał ewentualnie tak: commandTW w wyniku wyżej opisanych operacji, zostanie promowana z typu uint8_t do uint16_t i przesunięta do starszej części zmiennej command .
Mam STM32F4 DISC1 (z programem napisanym w C#.NETMF), który odbiera dane z aplikacji Windowsa (napisanej w C#.NET). Aplikacja wysyła zadany przebieg czasowy a STM32 go odczytuje i zapisuje w tablicy. Następnie zgodnie z zadanym przebiegiem czasowym ma sterować procesem. STM32 jest widziany jako wirtualny port COM. Prędkość transmisji - próbowałem 9600...
w końcu standard C nigdzie nie definiuje, że stałe muszą być we FLASH. Standard C nie wie nic o FLASH, ale to nie powód. poza sensem - kompilacja takiego kodu i linkowanie zajmie niepotrzebnie dużo czasu. Takie obiekty się prekompiluje, robi z nich bibliotekę i linkuje z własnym kodem. Czyli należy się zaprzyjaźnić z objcopy i ar. Rzeczywiscie - plik...
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....
https://obrazki.elektroda.pl/5694434400_... Moduły zasilaczy warsztatowych, takie jak DPS5005, dostępne są od dłuższego czasum.in. na AliExpress. Doczekały się wielu recenzji, w większości pozytywnych. Jednakże często wskazywanym problemem z tymi modułami jest kiepskiej jakości oprogramowanie – interfejs użytkownika pozostawia...
1) Czy dla zmiennych o rozmiarze poniżej 32bity zawsze przydzielane jest 4 bajtowy rozmiar pamięci? To kwestia wyrównania. Gdyby nie te int-y wcześniej nie byłoby problemu. A że są, to kompilator stara się by każda zmienna 32bitowa była umieszczona pod adresem podzielnym przez 4 - tak by się dało ją odczytać/zapisać w jednym cyklu. Wielkość całej struktury...
Może problem jest w tym, że kompilujesz C++ z agresywnymi optymalizacjami (-O3) i efekt jest zaskakujący. Na embeded używanie O3 jest powszechne. Kompilator podczas kompilacji (w zależności od wybranych optymalizacji -OX, oraz dodatkowo włączanych flag/funkcji -fxxx), może rozwinąć zmienną / wyliczyć jej wartość i ją podstawić / może uznać że zmienna...
[syntax=arduino] void loop() { // ------------------- jeszcze na LCD ... //-------------------- jeszcze 8 pomia... //-------------------- jakaś pamięc do... switch (key) ... } [/syntax] To Ci działa? Bo on chyba nie bardzo wie co to "key". Nie widzę ani deklaracji, ani żeby się cośtam wpisywało....
to zamiast define zrób zmienna
No, z przerwaniami to już masz program wykonujący wiele zadań jednocześnie - nie wiadomo, w którym momencie w gpsread starą jego wartość do 128 - a więc w następnym przerwaniu możesz wpisać do gpsread[128] - poza zakresem? A lepiej pisać if (++wpp >= sizeof gpsread) wpp = 0; - jak potem zmienisz rozmiar gpsread, to nadal będzie dobrze.
Dzień dobry szanowne grono, mam kilka podstawowych pytań odnośnie płytki STM32 Nucleo-G491RE dokładnie, oraz modułu marki Digilent Pmod I2S2. Płytka ta zawiera przetwornik ADC oraz DAC, oba 24-bitowe, z częstotliwością próbkowania do 108 kHz dla ADC oraz 200 kHz dla DAC. Na studiach wykorzystywaliśmy taką płytkę, ale było to typu przepisz instrukcję...
(at)excray, (at)es2, w stm32 jest coś takiego jak rejestr powtórzeń licznika - więc zmienna / licznik stanu nie ma sensu ;) Dygresję nie na temat usunąłem.
Witam! Natknąłem się niedawno na pięknego potwora nazwanego RUST https://www.rust-lang.org/ Chciałbym tym wątkiem rozpocząć dyskusję, czy ten język może prowadzić w dobrym kierunku - szczególnie w obszarze embedded, czyli mikrokontrolerów. Chciałbym by koledzy podzielili się doświadczeniami z tym językiem, wrażeniami i opiniami. Jak zwykle bywa, nowy...
Natomiast STM nie lubi działać na zmiennych typu char. Dla STM32 nie ma znaczenia czy zmienna ma 8-, 16- czy 32-bity... 8MHz dla RCC_SYSCLK_Div2 i RCC_PLLMul_2 pozostałe parametry bez zmian Możesz zdradzić nam powód, który każe Ci ustawiać dzielnik dla najszybszej i najważniejszej magistrali w tym układzie na jakąkolwiek inną wartość niż 1? Nie dziw...
Cześć, Chciałbym Was podpytać o najlepsze rozwiązanie. Sterownik na stm32 otrzymuje co kilkadziesiąt godzin czas do aktualizacji RTC w formie unixowej jako zmienna 32bit. Wykorzystywana jest ona następnie do przesyłania do innych urządzeń również jako zmienna 32bit. Pytanie - czy za każdym razem muszę robić konwersję 32bit na BCD do RTC i na odwrót,...
Nie bez powodu, takie rozwiązanie znalazłem w kursie STM32 na forbocie, pomyślałem, że może tak zostać. Zrobiłem tak: GPIO_StructInit(&gpio); gpio.GPIO_Pin = GPIO_Pin_5| GPIO_Pin_6 | GPIO_Pin_7; gpio.GPIO_Mode = GPIO_Mode_AF_PP; gpio.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &gpio); Sprawdzałem w debuggerze i jak wstrzymałem program,...
1. Jaka jest różnica między tymi dwoma zapisami, czy dobrze to rozumiem? TIM3->SR &=~TIM_SR_UIF; (tu zerujemy?) Powinno być: TIM3->SR =~TIM_SR_UIF; (tu rozumiem,że zmienia stan na przeciwny?) efekt powinien być w tym wypadku ten sam. Różnica opisana jest w RM, w którym opisana jest sekwencja zerowania bitów rejstru SR timerów. Zapisanie zera kasuje...
Jeśli jest to zmienna 1-bajtowa to rzutowanie nie ma znaczenia. Przy okazji masz odpowiedź na pytanie czy ten kod jest "dobry" (; 4\/3!!
Cześć, Mam nadzieje, że i tym razem uda mi się skutecznie poprosić Was o pomoc. Potrzebuję pomocy z przeprogramowaniem nadajnika opartego o STM32, NRF24L01. W międzyczasie zmienił się nam protokół komunikacyjny po stronie urządzeń odbiorczych. Trzeba dostosować komunikację do nowego protokołu. Nadajnik komunikuje się z PLC (zbiera pojedyncze zmienne...
Dziekuję za gotowy kod. Właśnie sprawdziłem poprzez debugowanie że zmienna Load źle była oblicza abo jest 24 bit i wykraczało poza zakres. edit. Zmodyfikowałem linijke https://obrazki.elektroda.pl/3746908300_...
Cortex nie potrzebuje __attribute__ ((interrupt)); przy deklaracji procedur obsługi wyjątków! W Twojej procedurze zmienna stan zawsze będzie miała wartość 0, bo jest za krótka na to, aby zmieścił się w niej testowany bit.
1. Przyjmij że kompilator działa jak należy i przekazuje parametry do funkcji poprawnie. Gdzie pokaż jeszcze wywołanie funkcji. Optymalizacja -O0 nie zawsze Ci pokaże wszystkie zmienne lokalne. Przy debugwaniu w takiej sytuacji lepiej -Og. Ale wtedy różnica w szybkości prgramu może być 2-3 krotna. Wywołanie: static uint8_t str[12]; float32_t...
ze zmęczenia nie dopatrzyłem się że zrobiłem tylko definicję preprocesora bez deklaracji ;) Ale tym niczego nie zdefiniowałeś tylko powiedziałeś aby preprocesor zastąpił slowo "UART_BUFOR" słowem "32" tekstowo. Jak w pliku .c zrobiłeś volatile char UART_BUFOR[UART_BUFOR_rozmiar]; to zastanów się co się z tym stanie i czy da się to skompilować. Jeżeli...
Tak wiem, że nie muszę przywracać zabezpieczenia, tylko spróbowałem ale się nie udało :). Rzutujesz wskaźnik na int16_t, a zmienna uparcie jest "short int" - po co? Bo tylko tak działa! Nie wiem jak inaczej mogę to zrobić ?
Dlaczego nie użyłeś po prostu typu int? int i long mają na Cortexach po 32 bity. Chciałem mieć pewność że zmienna będzie "długa" bez zagrożenia, że znów się przepełni. :idea: można dołączyć nagłówek <stdint.h> i użyć typu int32_t albo uint32_t. Świetny pomysł! :D Zwłaszcza, że w tych deklaracjach widać długość zmiennych, chociaż tutaj takie małe...
Witam Próbuję utworzyć plik txt na karcie sd korzystając z biblioteki FatFs zaimplementowanej na moim procku STM32F3 discovery. Niestety nie udaje mi się stworzyć takiego pliku, karta jest pusta a zmienna fresult wynosi 9 czyli FR_INVALID_OBJECT. W związku z tym wszystkim mam pare pytań odnośnie współpracy STM32 z kartą microSD. 1. Jak należy przygotować...
Jak to skonfigurować? W Arduino nie mam zielonego pojęcia No właśnie, a internet też milczy... Wymyśliłem to tak - Potrzebuję sygnał którego rozdzielczość jest równa 0.25us czyli timer musi zliczać z częstotliwością 4MHz czyli przy zegarze 72MHz będzie to 18 cykli. Zegar co 18 cykli dodaje 1 do zmiennej x, jeśli zmienna x = 19 (4.75us) ustawia stan...
Działa :) Drugi wersja kodu generuje dobry przebieg na magistrali. Na pierwszej procek się wiesza nie wiedzieć czemu (i stąd zmienna stan przyjmuje 0). A ja wczoraj cały dzień wpisywałem dane bezpośrednio do hcan.pTxMsg bo myślałem, że nie ma różnicy. Uff... no dobrze to bawię się dalej. Jeśli będę miał jeszcze kłopoty to dam znać. Dzięki wielkie za...
Też nie aż tak 'znacznie'. - dsPIC marnuje mniej czasu na wejście w ISR i na wyjście z niego, więc STM32 nadrabia zegarem i wychodzi podobnie. - W dsPICu instrukcja MAC wykonuje się w jednym cyklu, w STM32 w trzech (chyba). - dsPIC ma podzieloną pamięć na X i Y, z dodatkiem, że pewne przestrzenie adresów są dwuportowe i DMA nie kradnie cykli rdzenia...
Witam, Próbowałem na podstawie książki "Mikokontrolery stm32 w praktyce" uruchomić na STM32F107 transmisję z wykorzystaniem USART-a. Połączyłem Rx i Tx ze sobą i próbuję wysyłać a następnie odczytywać wysłane dane. Poniżej jest mój kod: int main(void) { SetSysClockTo72(); EnablePerypherialClocks(); ConfigureNVIC();...
Zacznijmy od tego, co to jest zmienna Timer1? Jak wygląda jej deklaracja?... Jeśli chodzi o kod, nie pomogę ci ani trochę, bo nie korzystam i nie będę korzystał z głupiego FWLib, a ty tak. Systick włącza się łatwo i przyjemnie kodem [syntax=C] void systick_init(void) { SysTick->VAL=720000; SysTick->LOAD=720000; SysTick->CTRL=0x7; } [/syntax]
Kwestia się wyjaśniła. Rzeczywiście problem był ze zmienną Address. Jest typu int, a nie typu wskażnikowego jak zmienna mem. Zatem inkrementacja nie skutkowała przesunięciem o 4 bajty. Kod poprawiłem na poniższy i wszystko działa jak należy. [syntax=c] void writeFlash(void){ mem = returnPointerToFirstEmptyAddressInSector... Address = (uint32_t)mem;...
Niby nie, a mamy szybszą drogę upewnienia się, że wszystko jest jak być powinno z tym zegarem? Niczego i tak nie możesz być pewny - przecież ta funkcja nie wylicza ani nie mierzy częstotliwości, tylko zapisuje do zmiennej to co wynika z definicji wygenerowanych w jakimś tam pliku przez CubeMX. Które mogą być błędne, w efekcie zmienna będzie miała wartość...
(at)michalko:"Dokładnie, wystarczy zmieniać tylko adres bazowy głównego programu w skrypcie linkera. " No właśnie nie. Zmienna FLASH_BASE w tym wyrażeniu, to nie adres bazowy programu, ale adres bazowy całej pamięci FLASH 0x80000... (sprawdziłem). Najmniej inwazyjna zmiana, to właśnie podmiana w tym wyrażeniu FLASH_BASE na jakiś PROGRAM_BASE (celniej...
Witam! Chciałem umieścić stałe w pamięci flash ale coś mi nie wychodzi. [syntax=c] // Funkcja wykorzystująca stałe uint8_t Search(const char data[]); [/syntax] Przy wywołaniu funkcji w kilkunastu miejscach w programie w taki sposób: [syntax=c] Search("OK\r\n"); [/syntax] Zajętość flash=47428 i ram=10760 Po zmianach: [syntax=c] const char(* const AT_OK)[]...
Ta tablica nie jest potrzebna - ona jest tylko do celów demonstracji (jak zwykle w przypadku ST bardzo głupiej). Nieprawda. Tablica ta jest kluczowym elementem przy przepisywaniu zmiennych z jednej strony FLASH do drugiej, gdy pierwsza z nich jest już pełna. Procedura EE_PageTransfer() musi wiedzieć apriori ile najbardziej aktualnych wartości zmiennych...
Hejka, robię właśnie przesiadkę projektu z kompilatora IAR'a do GCC'a i mam problem z przeniesieniem niektórych ustawień, konkretniej chodzi o nie wycinanie przez linker konkretnych, nieużywanych zmiennych globalnych wygenerowanych przez zewnętrzne narzędzie, zawierających informacje np. o dacie buildu, checksumie itp. które są potem w przypadku reklamacji...
Witam serdecznie. Zwracam się do Was z prośbą o pomoc. Mam projekt, który bazuje na plikach od producenta i chciałbym do niego dodać możliwość komunikacji z terminalem za pomocą USART1. Z pomocą STM32 Cube wygenerowałem sobie projekt z USART1 który działa i przesyła mi dane na konsolę, ale po przekopiowaniu funkcji do mojego projektu docelowego to nie...
Hmmm. Wgrałem oryginalny program z Stm32 MassStorage. vectors.c startup.S i .ld o kolegi Freddie Chopin. Mam obecnie dwa przerwania z Usb: USB_HP_CAN1_TX_IRQHandler i USB_LP_CAN1_RX0_IRQHandler ( w vectors.c było bez jedynek kolo CAN ). Zrobiłem takie coś, orginalny program void USB_HP_CAN1_TX_IRQHandler(void) { CTR_HP(); }...
No kwarc jest ani 8 ani 24 tylko 14,7456 MHz, może faktycznie coś z ustawieniem traktowania magistrali... Predkość jaka wyszła mi na APB1 to 35,9424, czy muszę jakoś przeliczać GPIO_InitStructure.GPIO_Speed bo próbowałem już i przy 2 i 10 i 50..., no i jeszcze I2C_InitStructure.I2C_ClockSpeed = I2C_SPEED mam ustawione na 100k. czy mogę tu wpisać cokolwiek.......
Wyłączyłem optymalizacje. Wprowadziłem zmiany w startup. http://obrazki.elektroda.pl/7964964200_1... Main wygląda tak: [syntax=c]int main(int argc, char* argv[]) { // At this stage the system clock should have already been configured // at high speed. int x=0; x+=10; // Infinite loop while (1) { ++x;// Add your code here. } }[/syntax]...
Generalnie wszystkie operacje jakie robisz w przerwaniach są jak dla mnie zbędne. 1. Wyłączasz to samo SPI w obydwóch przerwaniach... po co? Przecież może sobie zostać włączone. Gdy jest wyłączone np mogą się pojawiać niechciane stany na pinach zegara czy CSa. 2. Wyłączasz kanał DMA, choć on się wyłącza sam. 3. Kasujesz flagi, choć one kasują się same....
Witam, problem polega na tym że utworzyłem trzy zmienne globalne typu const uint8_t i kompilator przypisuje dwóm pierwszym ten sam adres 0x80030D4 . Trzecia zmienna już miała inny adres. Utworzyłem więc dwie kolejne zmienne do testów aby sprawdzić jaki otrzymają adres: const uint8_t ZMIENNA_TEST1=3; uint8_t zmiennaTest2=10; lecz niestety debugger ich...
Jak chcesz wysyłać kilka zmiennych o różnych rozmiarach, to zrób strukturę. Ja mam np taką [syntax=c] struct CfgEEiic { uint32_t crc; // crc musi byc pierwszom zmienna w strukturze uint32_t CntWrite; uint32_t CntRst; uint16_t szt; uint32_t total; char txt[16]; }; struct CfgEEiic Cfg; [/syntax] Później wysyłasz tą strukturę przekazując adres i rozmiar...
Od jakiegoś czasu nie importuję gotowych rozwiązań bibliotek C, tworząc własne - o dużej gęstości informacji, co przypadkiem przekłada się na wydajność i wyliczony koszt zużytej energii/funkcję. Wymaga to dużego nakładu pracy - to prawda. Przepisywanie rejestrów nie jest czasochłonne, po jakimś czasie zdefiniowanie jakiegoś procesora zajmuje pojedyncze...
stm32 zmienna globalna stm32 zmienna globalny stm32 zmienna pamięć
nokia zablokować klawiatura panasonic automatyczna sekretarka hg553 vodafone
Schemat Philips 715GA006-M0E-B00 TPM191E – dostęp, typowe usterki, naprawa mainboard Ustawienie silnika Renault Premium 420 DCI: kluczowe kroki