Stos dla przerwań ustawiłeś? 4\/3!!
Niestety program sie nie kompiluje bo wyskakuje mi błąd "Type 'RCC_APB2Periph_GPIOB' undeclared (first use in this function)" Tam był przykład dla STM32F1 dlatego zmień na: RCC_AHBPeriph_GPIOB Najprościej opóźnienie realizuje się tak: [syntax=c]for (volatile uint32_t i = 0; i < 0xFFFFF; i++);[/syntax]
Nie rozumiem konfiguracji timera w Twoim delay'u i dlaczego prescaler jest ustawiany co wywołanie, także chyba odpuszczę. Poza tym w timerach jestem zielony ;) Natomiast znalazłem coś takiego, prostego na google, zmodyfikowałem i działa: [syntax=c] // Oryginalny kod: http://www.stm32circle.com/forum/viewtop... #define SYS_CLK 24000000 /*...
Jeżeli nie potrzebujesz dokładnych opóźnień a takich Π•oko, to IMHO delay na pętlach w zupełności wystarczy. Timerów w stm32 niby wiele...ale prawie zawsze, w większych aplikacjach znajdzie się szczytniejsze dla nich zastosowanie. Z drugiej strony stosowanie pętli opóźniających na ARM-ach trąci profanacją :) Jeżeli nie interesuje Cie korzystanie...
Ten delay bez asm_volatile to dziala w ogóle, czy kompilator to pomija i wyrzuca?
No tak masz rację nie powinienem ustawiać 1 na magistrali popełniłem błąd niestety po poprawkach nadal efekt ten sam (same jedynki przy odczycie) tak teraz wygląda mój kod odpowiedzialny za funkcje zapisującą i odczytującą: [syntax=c] void delay_init(){ RCC_APB1PeriphClockCmd(RCC_APB1Periph_TI... ENABLE); TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;...
Myślę że tak czy siak problem jest jeden delay zamiast dwóch.
Masz wkleić dokładnie ten kod #define mojaLED PA5 #define mojGuzior PC13 void setup() { // inicjalizacja uzytych portów pinMode(mojaLED, OUTPUT); pinMode(mojGuzior, INPUT); } void loop() { // durny program z przykładu: https://mikrokontroler.pl/2019/03/08... if (digitalRead(mojGuzior)...
Słyszałeś kiedyś o formatowaniu kodu ? [syntax=c]void RCC_Conf(void) { RCC->CR= 0x00000083; // to jest bez sensu, można wyrzucić RCC->CFGR= 0x00000000; // j.w. RCC->CIR= 0x00000000; // j.w. RCC->CR|=RCC_CR_HSEON ; while(RCC->CR & RCC_CR_HSERDY == 0); FLASH->ACR |= FLASH_ACR_PRFTBE; FLASH->ACR |= FLASH_ACR_LATENCY_2; RCC->CFGR |= RCC_CFGR_PLLMULL9 |...
Witam. Na początku muszę zaznaczyć, że jestem raczej początkującym w temacie mikrokontrolerów i ogólnie elektroniki. Kupiłem sobie stm32f0 discovery oraz termometr ds18b20, podłączyłem wszystko jak trzeba - pin 1-wire do pc7, oraz piny zasilania odpowiednio do 3v i GND na płytce. Korzystam z IAR Embedded Workbench EWARM. Termometr działa, bo procedura...
Wywala błąd gdyż kompilator nie rozumie polecenia "nop();". Zastąp powyższe przez "asm volatile("nop")" albo dodaj include do pliku system.h w pliku delaya. W pliku system.h masz właśnie definicje nop() jako to co wyżej podałem, zajżyj do tego pliku.
Zrób to bez delay() a będzie dobrze ;-) Ja, wpisuję dane wtedy gdy host odbierze poprzednie. Sygnalizuje to przerwaniem lub flagą. Albert
Witam, mam problem z komunikacją po 1-Wire, termometr DS18S20 odpowiada mi na sygnał reset jednak nie wysyła danych, odczytuje cały czas z magistrali 0xFF. - Termometr działa na 100% - mam inną płytkę z ATmegą 32 w której go sprawdzam - i tam działa wszystko bez problemowo, Oto kluczowe fragmenty mojego kodu: [syntax=cpp] #define SYS_CLK 8000000 //...
[syntax=c]void _delay_init() { SysTick->LOAD = 0x00FFFFFF; SysTick->CTRL = SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_CLKSOURCE_Msk; // | SysTick_CTRL_TICKINT_Msk; } void _delay_ms(uint32_t time) { uint32_t ina, inb; while(time--) { ina = SysTick->VAL; do { inb = SysTick->VAL; inb = (ina - inb) & 0x00FFFFFF; } while (inb<72000); } }[/syntax]
nie, nic nie ruszałem odpalam LCD_Initialize(); po nim mam wywołaną funkcję która robi delaya 1000ms.
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...
Święte słowa. Ja właśnie metodą kopypejstu wyprodukowałem pierwszy swój program na STM32 migający ledami z systickiem jako delay. Weflaszowałem go przez bootloader i odpalił za 1szym razem. Ho ho - powiedziałem sobie. Wszystko ładnie zatrybiło. Zegary się poustawiały, przerwania, wektory. Wszystko. Właśnie dzięki temu że budowałem już z kawałków sprawdzonego...
Cześć, Potrzebuję wykonać komunikację w 2 strony pomiędzy komputerem PC i mikrokontrolerem przez ethernet. Sprzętowo wybrałem stm32F103 oraz moduł z układem ECN28j60. Układ nie będzie włączony do żadnej sieci, będzie to połączenie punkt-punkt. Znalazłem biblioteki, dostosowałem pod swój mikrokontroler. https://github.com/xaionaro/stm32-enc28j... Generalnie...
Dodajmy jeszcze, że implementacja OneWire przez wachlowanie pinem i delaye w przypadku STM32 raczej nie ma uzasadnienia. Bardzo łatwo można to zrobić na UART, linka nie podam ale jest stosowna nota aplikacyjna.
good day i m catch signal for NSS and SCK . It works in wrong way http://obrazki.elektroda.pl/7826648700_1... What should i do? description programm:NSS -low , delay then NSS-high OSC yellow - NSS. blue - sck. When i push Reset button clock is going, when i realise button - clock is stopping, NSS -low, delay, up
Witam, Mam problem z ADC - mianowicie udało mi się uruchomić odczyt z kanału 11 (ADC1), ale nie działa odczyt z kanału 10 oraz po odczycie w Jscope widzę, że pomiar z kanału 11 wpływa częściowo na pomiar z kanału 10. Kod: http://obrazki.elektroda.pl/5157297400_1... [/code]
Witam. Podobne tematy już były, ale nie znalazłem tematu z moim problemem. Mam płytkę STM32 discovery value line z STM32f10x na pokładzie. ST-link jest wykrywany w WINDOWS XP. STlink Utility działa poprawnie, łączy się, można przejść w pracę krokową, zobaczyć rejestry etc. Moje środowisko to eclipse + Code Sourcey. Jako GDB server uruchamiam serwer...
Przepraszam za nieścisłość wyświetlacz YM2004A jest wyświetlaczem 4 liniowym(20x4). Niemniej sterownik interpretuje to jako (40x2) i wyświetla znaki na 1 i 3 linii LCD. Początkowy kod inicjalizacji(ten który wkleiłem w pierwszym poście tematu) był z tego co zauważyłem napisany na sterownik HD44780. Sterownik mojego wyświetlacza to KS0066U. Z tego co...
Witam, prosiłbym bym o pomoc, żeby ktoś wytłumaczył, albo podał przykład jak skonfigurować przerwania zewnętrzne w tym mikrokontrolerze bo walczę z tym i nic mi nie wychodzi i zaczynam podejrzewać, że to procek jest zepsuty, albo tej sztuki jeszcze nie opanowałem :D na początku pisałem własne kody, ale po nieudanych próbach w końcu wkleiłem gotowca,...
Zapomniałeś tylko dopisać, że ustawiłeś samodzielnie bit UDIS w rejestrze CR1 timera, który właśnie coś takiego powoduje. Nie wiadomo jednak po co go ustawiłeś. Nie potwierdzam, nie zaprzeczam ale faktem jest, że obecnie nie ustawiam bitu UIDS w rejestrze CR1 i bez ustawienia bitu UG w rejestrze EGR preskaler nie działa poprawnie. Poniżej kod jakim...
Dzięki za odpowiedź, działa sprawdzałem w przykładzie z bibliotek. Funkcję biblioteczną delay() zastąpiłem tym samym fragmentem i chodzi jak marzenie.
Witam. Po ogarnięciu portów i/o chciałem przejść do konwersji ADC. Początkowo zakładam, że nie korzystam z przerwań, nie korzystam z DMA. Screeny z Cube: http://obrazki.elektroda.pl/6506556500_1... http://obrazki.elektroda.pl/5974943000_1... http://obrazki.elektroda.pl/2033015600_1... Plik main: /** ****************************************...
W tej pętli w opóźnieniu zrób volatile int i, bo kompilator wywala pewno pętlę i dioda mruga tylko Ty nie nadążasz patrzeć. Albo dołóż jeszcze jedna zmienną. int Delay( int delay) volatile int i; int j = 0; for( i=0; i < 4000* delay; ++i ) { j+=i; } return j; } I uważaj na zakres liczb całkowitych bo 32 bity to dużo, ale dzielone przez 4000 to już...
Właśnie już chyba z 10ty dzień próbuję odpalić wyświetlacz z tym sterownikiem na STM32F103RBT6. Całą bibliotekę przerobiłem odpowiednio z ATmegowej (napisanej wcześniej i na 100% działającej). I za cholerę nie chce odpalić. Sprawdzałem poprawność sygnałów na analizatorze logicznym. Niby jest OK. I teraz zagwozdka, czy wyświetlacz ten zasilany z 5V ruszy...
Zawsze można po przerwaniu DMA odpalić timer i poczekać na jego przerwanie i tam przestawić stan linii, to rozwiązanie ma taką przewagę nad delayem, że nie blokuje programu.
Masz rację - wydaje Ci się... (; Latencja to nie jest jakiś delay czy preskaler, po prostu przy nie-sekwencyjnym wykonywaniu rozkazów (skoki), potrzebne są te 2 cykle na załadowanie bufora. Spadek wydajności przez taką latencję oscyluje pewnie w rejonie kilku procent, więc nad czym się tu zastanawiać? Jeśli podniesienie częstotliwości "nic nie dało"...
O to kod, to jest prosty przykładowy, który miał się skompilować bez problemów :) [syntax=c] #include <stm32f4xx_rcc.h> #include <stm32f4xx_gpio.h> void Delay(void) { volatile uint32_t i; for (i = 0; i != 0xFFFFF; i++); } int main(void) { GPIO_InitTypeDef GPIO_InitStructure; // Wlaczenie sygnalu taktujacego port D RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GP...
(np. Delay) Porzuc delay-e. Program z delay nadaje sie jedinie do skasowanie (wyjatki sa bardzo nieliczne i do tego raczej nie dla początkujących)
dlaczego ta instrukcja nie działała jak dodałem średnik na końcu tej linijki while((SPI1->SR & SPI_SR_BSY) == 0) ,a jak go usunąłem to zadziałało? Bo `while (warunek);` jest tożsame z `while (warunek) { /* kompletnie nic */ }`. Jeśli dasz średnik, to następna linijka _NIE_ jest częścią pętli while, tylko po prostu jedną instrukcją która się wykona...
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...
AVR może nie, ale ARM już na pewno da radę. Wypróbuj np. coś z STM32 (kilkanaście zł za najtańszy), albo trochę szybsze LPC17xx.
1. Możesz zrobić przy pomocy usart: a) korzystając z multiplexera (gotowego lub cpld) b) przesiąść się na pic z remapowaniem peryferiów 2.Możesz zrobić przy pomocy timera. Jakie widzisz przeciwskazania że pytasz? 3. Możesz zrobić jak pisze Freddie. 4. Możesz zrobić normalnie na delayach. W końcu stm32 ma tyle mocy obliczeniowej, że nie ma czym się przejmować...
Konkretnie mam taki problem . W poprzednich wersjach "stm32f4xx_rcc.h" działało takie makro do włączania zegara gippo RCC_AHB1PeriphClockCmd(TM_HD44780_RS... | TM_HD44780_E_RCC | TM_HD44780_D4_RCC | TM_HD44780_D5_RCC | TM_HD44780_D6_RCC | TM_HD44780_D7_RCC, ENABLE); #define TM_HD44780_D7_RCC RCC_AHB1Periph_GPIOC Przy nowej bibliotece rcc Tylko...
Klęska urodzaju jak to nazywają, gdzie kilku się bije tam korzysta... ....Klient :-) Żegnajcie AVRy wasz czas minął ;-) Ostatnio na kanale reduktor szumu coś takiego: https://www.youtube.com/watch?v=nNOA2PbI... Zauważcie STM, chyba taki sam jak na blue pill, robi chyba jedynie za...
Witam, mam problem z termometrem DS18B20 gdyż nie chce mi odpowiadać na mój wysłany bit. Chodzi dokładnie o pierwszą funkcję sprawdzającą układ czyli o RESET. Z użyciem warunków presence zawsze wynosi 1, a aby działał poprawnie powinien posiadać wynik 2. Mój kod: [syntax=cpp] uint8_t Reset(void) { uint16_t presence=0; WireOff(); WZDelay::delay_us(480);...
Z tego co widzę z ST-Link Utility, program counter stoi w miejscu, konkretnie 0x20000458, czyli cos juz wykonał ale utknął możliwe .że w miejscu gdzie czeka aż przerwanie SysTick wykona sie okreslona liczbe razy. Czy trzeba jeszcze w jakiś sposób ustawić tablicę wektorów przerwań? edit: Jednak nie wykonuje się , dodałem linijkę zapalającą diodę przed...
warto sobie uświadomić ze najczęściej na rejestrach procesora operuje się tylko operatorami &=, |= i operacja : rejestr_x = a; rejestr_x = b; jest bez sensu, bo w zasadzie ta pierwsza moglaby sie nie wykonac (no chyba ze mamy tam delay miedzy tym to jeszcze moze czemus sluzyc).
gpio_pin_cfg(GPIOC,11,GPIO_IN_PULL_UP); // miso MISO na 99% też musi być jako AF6_PP Dodatkowo Twój proces transmisji jest nieco dziwny... Zrób tak: 1. Ustaw CS w stan niski 2. Poczekaj aż flaga TXE będzie równa 1 3. Zapisz coś do rejestru DR 4. Poczekaj aż flaga RXNE będzie równa 1 5. Odczytaj coś rejestru DR 6. Poczekaj aż flaga BSY będzie równa...
Cześć, Od jakiegoś czasu borykam się z takim problemem: chciałbym odbierać po CANie ramki, wpisywać je w gotowy szablon i dalej wysyłać po USARCie na kompa w kodzie ASCII. Czegoś mi brakuje w tym kodzie i za każdą wskazówkę będę wdzięczny. Z góry dzięki:) To mój main: [syntax=c] unsigned char tx_uart[]=" ID: DL: F: T: DATA: ";//54 char ramka[55]; unsigned...
We wcześniejszym wątku - [url=http://www.elektroda.pl/rtvforum/to... Co na początek ? zamieściłem program napisany (wsad do LPCXpresso) w asemblerze na twój układ który korzystał z tego timera i dokładnie był każdy fragment kodu opisany - co robi i jaki ma cel i był opis rejestr po rejestrze - opis tych fragmentów...
1. Czy wiesz, że Twój programowy timer liczy do 2001? 2. timerFlag źle zadeklarowane. Powinno być static volatile _Bool. Reszta zmiennych też dość radosna. 3. Kod, który wkleiłeś nie zawiera niczego, co odnosiłoby się do inicjowania portów dla wyświetlacza ani samego wyświetlacza, a problem masz podobno z wyświetlaczem, a nie z diodami LED. Mogą to...
Jeśli oba mają preemption 0 (a domyślnie wszystkie przerwania tak mają, chyba, że w STM32 jest inaczej niż wszędzie), to nikt nikogo nie może wywłaszczyć. Serdeczne dzięki za wytłumaczenie jak działa mechanizm priorytetów NVIC. Z tego rozumiem, że można zdefiniować maksymalnie 16 przerwań , które mogą się wzajemnie wywłaszczać (grupa 4) ? Subpriorytet...
Dzięki pomocy jednego z forumowiczy ( dziękuję mrh :) ), udało się ustalić, że przyczyną problemów komunikacyjnych z ds18b20 są źle skonfigurowane opóźnienia. Opóźnienia chciałem zrealizować na jednym z timerów 2-5 w trybie one pulse mode. Niestety nie udało mi się do tej pory znaleźć błędu, więc proszę o pomoc w walce z opóźnieniami. Zamieszczam kod...
Przerwania miałeś zastosować do czasu trwania Delaya, bo najprawdopodobniej gdy urządzenie odpowiadało MAX cały czas ustawiony był w trybie nadawania, a nie odbioru - w związku z tym do NUCLEO nic nie dochodziło. Do sprawdzenia transmisji sugerowane było zmniejszenie Delaya po zakończeniu wysyłania. O przerwaniach była mowa w programie końcowym.
I kontynuuję temat. Na razie kod taki: [syntax=c] /***************************************... * Function Name : Game * Description : Game test * Input : None * Output : None * Return : None * Attention : None ****************************************... /*typedef enum{ NONE=0,...
To tak teraz wygląda ale wcześniej dawałem tam delay-a i wyświetlały mi się współrzędne na moment i zaraz pojawiały się inne wartości tak jakby coś się pod te zmienne podstawiało i innej funkcji.
Nic nie stoi na przeszkodzie, aby nawet dla AVR wszystko było w jednym hex - w końcu te odrębne elementy zajmują oddzielne wirtualne adresy. Bzdura. Do lock/fuse/itp są zupełnie inne komendy. Programowanie tego wygląda kompletnie inaczej niż flasha. Nie jest to żaden "oddzielny adres". Jeśli chodzi o ARMy (np STM32) to ELFem lockbitów się nie ustawi....
Witam Odbierając dane w stm32 nie udało mi się zgubić żadnej danej nawet jak dam po każdym odebranej ramce 50ms Delay na testy. Max Transmisja jaką miałem to 4Mbit Akurat używam TCP to przesyłania programu wykonywalnego do STM32. Mam telegramy które wysyłam z PC do STM32 a on na nie odpowiada. Zapytania i odwiedź mam na jednym porcie Chciałem teraz...
rb401 Serdecznie dziękuję za zainteresowanie oraz pomoc, przypomniało mi się dzisiaj, iż gdzieś na zagranicznym forum doczytałem o próbie dodania dodatkowego delaya pomiędzy inicjalizacją zegara, a I2C, po dodaniu takowego wszystko działa jak należy. Jedyne co bardzo mnie dziwi to fakt, że wcześniej płytka działała aczkolwiek czasami faktycznie pojawiał...
Zmodyfikowałem delikatnie bibliotekę, zamiast korzystać z funkcji microdelay z dodanej biblioteki używam HAL_Delay(). Czyli zmieniłeś delay z MIKROsekund na MILIsekundy. Zapewne w bibliotece był potrzebny ten dokładniejszy, więc nawet jeśli przeliczyłeś argumenty, to pewnie po zmianie nie działa jak należy. Swoją drogą ta funkcja delay która tam była...
Próbowałem wplatać pomiędzy funkcje coś takiego: Delay(5000); void Delay(uint16_t nCount) { uint16_t TimingDelay; while(nCount--) { for(TimingDelay=0;TimingDelay<100... } } Ale co ciekawe cały program zachowuje się jak bym w ogóle tego nie odpalał...
Na pierwszy rzut oka w Twoim kodzie, jak i u autora, nie ma żadnej manipulacji trybem wyjścia portu - pinu. Po wrzuceniu tego na STM32F722RE okazuje się, że nie ma to znaczenia. Przy ustawieniu trybu pinu na wyjście z open drain, odczytanie rejestru IDR daje poprawne działanie, bez zmiany trybu na wejście. Sprawdziłem to na porcie A i pinie PA0. Nie...
Witam. Czy ktoś może rzucić okiem na mój program i stwierdzić gdzie jest błąd. Siedzę już 3 dni i nie mogę go znaleźć. Posiadam płytkę Butterfly, dolutowałem kwarc zegarkowy i dwa kondensatory o pojemności podanej na schemacie który dostałem z płytką. Po wgraniu hexa do procesora wygląda, że zatrzymuje się podczas konfiguracji RTC. Jak zaremuje część...
Dzień dobry, postanowiłem zacząć przygodę z rejestrami na mikrokontrolerach, skupiam się obecnie na STM32 C011 z racji, że znam już jakieś solidne podstawy HALowskie. I dostałem już niczym strzał z liścia pierwszy problem - mianowicie dioda dołączona do mikrokontrolera na wyjściu nie chce mrugać. Z dokumentacji mikrokontrolera wraz z całą płytką wynika,...
No wreszcie się udało, DZIĘKI Ci bardzo Freddie. Bez twojej pomocy siedziałbym nad tym chyba jeszcze z miesiąc. Błędami w moim przypadku było: - polecenie monitor reset halt , zapisane oddzielnie, - polecenie load (po wykasowaniu tego z poleceń zadziałało), load miałem więc tylko zaznaczone wraz ze ścieżką do pliku .elf - nie odznaczenie opcji Reset...
nie lepiej porównac z tym kodem z os.mbed.com który działał ? [syntax=c]TextLCD::TextLCD(PinName rs, PinName e, PinName d0, PinName d1, PinName d2, PinName d3, LCDType type) : _rs(rs), _e(e), _d(d0, d1, d2, d3), _type(type) { _e = 1; _rs = 0; // command mode wait(0.015); // Wait 15ms to ensure powered up // send "Display Settings" 3 times (Only top...
Witam, Mam problem - mam za zadanie zrobić coś w stylu skanera 3D na STM32. Na razie nie mogę opanować samej obsługi kamery w konfiguracji STM32F103VE+ wyśw. SSD1963 7" (zestaw EB-STM32_08_LCD7) i kamera OV7725 . Do zestawu dostałem przykładowe projekty w keilu. Bazując na projekcie do sprawdzania kamery z wyświetlaczem 4.3' wkleiłem działające biblioteki...
(at)pawik no wydaje mi sie ze wlasnie dobrze połączyłem (at)nsvinc zakladajac ze reszta bitow w CR1 dla SPI2 (slave) i SPI1 (master) jest dobrze ustawiona, dopisalem taki kod i umiescilem go po inicjalizacji calego SPI (SPI_cnfg): temp=SPI1->CR1; temp|= 0x0180; SPI2->CR1=temp; temp=SPI2->CR1; temp|= 0x0100; SPI2->CR1=temp; moze moglby to ktos debugnac...
No niezbyt masz to ustawione tak jak proponuję ja... Odznacz "reset and delay" oraz "halt", poniżej wpisz "monitor reset halt". Na dole zaznacz "set breakpoint at", wpisz "main" i poniżej zaznacz "resume". Profilaktycznie pokaż jeszcze dwie pierwsze zakładki. 4\/3!!
Dziękuje za rady!!! Dodano po 36 Ja wiem, że domyślnie jes coś innego, ale przecież można to zmienić i diody są dobrze przylutowane. Z innymi portami wszystko jest w porzątku ustawiamy jako fast GPIO, ustawiamy na output i high level: int main(void) { volatile uint32_t count, count_max = 1000000; system_init(); pll_start(CRYSTAL,...
Trochę to zajęło i powstała taka funkcja, która wydaję się działać tak jak zaplanowałem. Sprawdzona na urządzeniu i w debuggerze. void Beep(void){ TIM2->CCER &= 0x0000; TIM2->PSC = 0x05ff; // prescaler TIM2->CCMR1|= 0x0080; TIM2->CCER &= 0xFFFD; TIM2->CCER |= 0x0001; for (i=0;i<30;i++)i=i; // some delay...
Kurs na F0Discovery z wieloma przykładami był publikowany w ciągu ostaniego półtora roku w EP - oglądaj i ćwicz. Prosty program: [syntax=c]#include "stm32f0xx.h" //======================================... // defs for STM32F05x chips #define GPIO_MODER_OUT1 //======================================...
Witam, Na początku chciałem zaznaczyć ze jestem początkujący jeśli chodzi o procesory typu ARM, a tym bardziej o obsługę FreeRTOS. Mam problem z obsługą magistrali CAN pod tym system. Wykorzystuje biblioteki pobrane ze strony www.freertos.org . Niby wszystko ładnie się kompiluje ale na magistrali nic się nie pojawia . Odpaliłem proste zadania typu miganie...
Witam, Próbuje uruchomić komunikacje po maigsitrali CAN. Jednak bez sukcesu. Mierząc linie RX i TX (PB8 i PB9) cały czas mam 3.3V. Brak jakiejkoliwek reakcji. Kod poniżej.[syntax=c] #include "stm32f10x.h" #define RCC_APB2Periph_GPIO_CAN1 RCC_APB2Periph_GPIOB #define GPIO_Remapping_CAN1 GPIO_Remap1_CAN1 #define GPIO_CAN1 GPIOB #define GPIO_Pin_CAN1_RX...
Ciągle walczę i właśnie pobrałem sobie CubeIDE i teraz ta: 1. stworzyłem nowy projekt bez bibliotek zaznaczając m.in. Target projekt type na empty: https://obrazki.elektroda.pl/9699499800_... 2. w projekcie zobaczyłem pliki: - main.c - syscalls.c - sysmem.c 3. wrzuciłem sobie do projektu kolejne pliki: - stm32f103xb.h - core_cm3.h -...
delay.h [syntax=c]void Delay_ms(__IO uint32_t nTime); void SysTick_Konfiguracja();[/syntax] delay.c [syntax=c]static __IO uint32_t TimingDelay; void SysTick_Konfiguracja() { RCC_ClocksTypeDef RCC_Clocks; RCC_GetClocksFreq(&RCC_Clocks); SysTick_Config(RCC_Clocks.HCLK_Frequency... } void SysTick_Handler(void) { if(TimingDelay)TimingDelay--; } void...
.. wygląda mi na to że za szybko sterujesz magistralą na piechotę..na próbę powstawiaj małe delay we skazanych miejscach. void LCDSendCommand(unsigned short int data) { GPIO_ResetBits(CSGPIO, CSPIN); GPIO_ResetBits(RSGPIO, RSPIN); GPIO_Write(DBGPIO, data); GPIO_ResetBits(WRGPIO, WRPIN); [u] delay[/u]...
Przejzalem tematy na forum a nie moge uruchomic przerwania na pinie PC13 (nucleo l1 board) [syntax=c] #include "led.h" #include "delay.h" #include "button.h" int main(){ setup_LED(); setup_DELAY(); setup_BUTTON(); blink_led(); LED_ON; delay_ms(1000); LED_ON; while(1){ } while(1); } void SysTick_Handler(){ if (delay_counter > 0){ delay_counter--; } void...
Witam, Założyłem tutaj konto ponieważ jest to prawdopodobnie największe forum elektroniczne w Polsce, a co za tym idzie zakładam, że znajduje się tutaj sporo specjalistów którzy mam nadzieje pomogą mi w pewnym problemie. Zaczynam dopiero swoją przygodę z układami STM32. Już mniej więcej wiem jak działają GPIO, timery jednak chciałbym już iść dalej....
Jednak dane nadawane przez EEPROM się spóźniają powinny być zatrzaskiwane na zboczu narastającym a one na narastającym się dopiero zmieniają jakby miały być zatrzaskiwane na opadającym choć wyraźnie w manualu jest napisane że pracuje przy narastającym. Coś źle doczytałeś The READ instruction outputs the serial data of the addressed memory location...
Zamiłowanie do zbędnych optymalizacji, wstręt do liczb zmiennoprzecinkowych i inne cudowne-cuda których nie ma sensu robić na takich układach. Schematy tworzenia oprogramowania ("RTOS na pewno jest zbyt ciężki, zrobimy wiec pętlę główną!", "Nie, C++ na pewno zajmie zbyt dużo..." oraz "Najlepiej napisać to w assemblerze" [; ). Nie zaprzeczysz, że inaczej...
Dla optymalizacji Small: [syntax=c] void Delay(unsigned int delay) { Delay: 0x8000164: 0xe000 B.N ??Delay_0 ; 0x8000168 for(;delay>0;delay--) { ??Delay_1: 0x8000166: 0x1e40 SUBS R0, R0, #1 for(;delay>0;delay--) { ??Delay_0: 0x8000168: 0x2800 CMP R0, #0 0x800016a: 0xd1fc BNE.N ??Delay_1 ; 0x8000166 } [/syntax] Dla optymalizacji Medium: [syntax=c] void...
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...
Witam, małe uzupełnienie do wcześniejszego postu: Procesor: STM32F303RE Płyta ewaluacyjna: Stm32nucleo zmiany w linkerze: [syntax=c] /* +=======================================... | stacks sizes +=======================================... */ /* Handler mode (core exceptions / interrupts)...
Kod: [syntax=c] /************************* * stm32 uart main.c *************************/ #include "stm32f10x.h" #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_usart.h" #include "stdint.h" #include "misc.h" #define CLK_FREQ 36000000 /* User defined function prototypes */ void GPIOA_Init(void);...
A ja zaczynam rozumieć różnice między F0 a F4. Na F0 można skompilować projekt z pusta pętlą (tylko main i while), a na F4 nie. Na dobrą sprawę sam mógłbym spróbować napisać miganie diodą na samych rejestrach (na F072), gdyż o tym już poczytałem. Dodano po 2 Ufff, chyba udało się napisać pierwszy program n ARM STM32F072. Nie mam pojęcia jak działa,...
Aby ruszyć z czymkolwiek muszę opanować ręcznie odpalane DMA, nawet w przerwaniu kosztem oczekiwania aż wszystko zostanie przepisane. Do testów skonfigurowałem Timer co 5m w którym mam coś takiego. [syntax=c] void TIM2_IRQHandler() { //przerwanie co 5ms if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); GPIO_ResetBits(P10_PORT,...
Ale ten delay na pętli for jest nieistotny. Nie mam włączonej optymalizacji kodu i jakoś procek wykonuje tą pętlę. Chodziło mi tylko o dowód na to, że coś jest z tym moim delay'em na systick'u. Zauważyłem, że gdy używam delay'a na systick'u i zmieniam delay'a (przy sprawdzaniu czy bajt został dobrze wysłany do sterownika HD44780 - zamiast busy flag)...
no już Ci to napisałem. jezeli chcesz robić prawdziwe delaye to zrób sobie przerwanie timera (czy systicka) i inkrementuj jakąś zmienną w znanym sobie okresie czasu. Jak chcesz napisać sobie taką blokująca funkcję delay - to raczej w asemblerze, czy też inline asemblerze, aby nie byc zależnym od kompilatora jezeli chodzi o długość iteracji i optymalizacje,.
Konfiguruję ADC do pracy w STM32L152. Tradycyjnie, problem jest taki, że nie działa. Kod programu wygląda następująco: [syntax=c] int main(void) { RCC->AHBENR = RCC_AHBENR_GPIOAEN;//taktowanie portu A RCC->APB2ENR = RCC_APB2ENR_ADC1EN;//taktowanie ADC GPIOA->MODER |= GPIO_MODER_MODER0;//PA0 jako wejscie analogowe ADC1->CR2 = ADC_CR2_ADON;//wybudzenie...
Witam, Zakupiłem wyświetlacz TJCTM24024-SPI który wg sprzedawcy jest oparty na chipsecie ILI9341. Napisałem prosty program który ma przeprowadzić inicjalizację wyświetlacza: [syntax=c]//PA.02 - CS //PA.03 - DC //PA.04 - RESET //PA.05 - SCK (SPI1) //PA.06 - MOSI (SPI1) //PA.07 - MISO (SPI1) #define RES_H GPIOA_ODR|= (1<<4) #define RES_L GPIOA_ODR&=...
Robiłem pomiary, tzn zmieniałem stan na wyjściu pinu, gdzie pomiędzy wstawiłem pętle z nop-ami. Używasz HAL-a. Te funkcje są dość wolne GPIOx -> BSRR = 1<<pin; delay(); GPIOx -> BSRR = 1<<(pin + 16); Wracając jeszcze do przebiegów; niebardzo rozumiem o co chodzi z tą podwójną zmianą stanu wejścia WE: To nie jest podwójna...
Witam Probuje skompilowac gotowy przyklad z ksiazki (dokladnie miganie diod), wszystkie pliki , headery itd sa wlaczone do projektu, lecz wyskakuje mi nastepujacy blad kompilacji target CPU does not support ARM mode zawartosc pliku util_delay.c: [syntax=c]#include <util_delay.h> void Delay(volatile unsigned count) { while(count--); } [/syntax]...
Wiele użytkowników narzeka na biblioteki ST, więc postanowiłem zrezygnować z ich. Udało mi się ustawić RCC na 72MHz, ale teraz mam problem z GPIO. Po prostu nie chce mi ustawić "jedynki" w BSRR. Nie wiem co mam źle czy sama konfiguracja czy co innego. Mój kod: [syntax=c]int main( void ) { RCC_Init(); delay_init( 72 ); RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;...
Dzięki za chęć przetestowania tego u siebie. Ale mam niespodziankę: można wymusić niedziałanie na tym kodzie. Wiem że to dziwne i sam tego nie rozumiem, ale program zachowuje się tak jak pisałem: czyli wersja bez volatile nie zapisuje gdy tablica ALGO_TAB jest wypełniana jedynie na początku. Z volatile zapisuje zawsze. Programy z volatile i bez volatile...
Czy może być problemem że robię w powyższym kodzie f_mount(0, "", 0) bez wyjmowania karty? Nie. Generalnie opisujesz swój problem tak nieprecyzyjnie, że ja wciąż nie do końca wiem co i kiedy nie działa... Jeśli skopiowałbyś powyższy kod 2x (w całości, no może poza deklaracją zmiennych), to drugi zapis się uda czy nie? Jeśli pomiędzy dwoma kopiami dodasz...
Dałem tam tego delay(55) bo czujnik musi mieć czas na konwersję. Na atmega328 działało myślałem że tu też będzie. Usunę tego delay i zobaczę co wyjdzie Dodano po 1 Usunąłem tego delay() i jest to samo Dodano po 3 Według noty od HTU transmisja powinna wyglądać tak: https://obrazki.elektroda.pl/3189678000_...
Pytasz, w jaki sposówb zrealizować "to" w przerwaniu", tylko nie piszesz nic o tym, czym jest "to" - a to jest klucz do całego problemu. Bez podstawowych informacji o funkcjonalności urządzenia nie da się dokładnie NIC doradzić. Wbrew tem, co napisał kol. mjurczuk, cały kod Twojego programu zapewne powinen mieścić się w przerwaniach. Na pewno nie ma...
Musisz też odczekiwać pewien niedługi czas po każdym CR Niedługi? Po komendzie wysłania SMS do 60 sekund (chyba o modemie GSM jest ta dyskusja?). Odpowiedzi na niektóre komendy do 3 sekund, większość do sekundy. W dokumentacji modemu jest informacja o czasach odpowiedzi na poszczególne komendy. musisz w kodzie zbudować całkiem spory automat z parsowaniem...
Testowanie co 30ms jest skuteczne? A jak zostanie zinterpretowany impuls zakłócający, który pojawi się właśnie w momencie przerwania 30ms? Oczywiście że jest skuteczne. Tajemniczy "impuls zakłócający" chyba nie pochodzi z kosmosu, tylko z faktu, że jednak ktoś ten przycisk nacisnął, wiec jeśli zostanie to zinterpretowane jako naciśnięcie, to doskonale...
Znalazłem przykładowy program do migania diodą, która zawarta jest na module STM32F103*: Open On-Chip Debugger 0.10.0-dev-00019-g5352c55 (2019-02-14-15:31) Licensed under GNU GPL v2 For bug reports, read http://openocd.org/doc/doxygen/bugs.... Warn : Could not determine executable path, using configured BINDIR. none separate Info...
1. vTaskDelay możesz pogonić i wpisać tam jakiś delay_ms albo inną funkcję która czeka określoną ilość milisekund. 2. Strukturę Crc7 i funkcje na niej operujące możesz również pogonić, to służy do wyliczania CRC (ja z tego korzystam, bo muszę, ale Ty pewnie nie musisz ;) ). Zamiast spispi((crc.crc<<1)|1) zrób spispi(0x00) 3. [syntax=C] static...
Witam, walczę z UART i natrafiłem na przeszkodę w postaci odbioru danych (wysyłanie działa). Analizując mój kod przynajmniej teoretycznie powinien działać, ale w praktyce tego nie widać, więc proszę o zdjęcie mi klapek z oczu i wytknięcia błędów. Zamieszczam kod, który ma za zadanie sterowanie diodą w zależności od odebranego rozkazu. Konfiguracja UART...
Tak, już sam znalazłem ten problem. Faktycznie rozmiar bufora ustawiony był na 4. Dziękuję za odpowiedź. Przy okazji podpytam jeszcze o takie zjawisko: kiedy w pętli głównej mam funkcję reagującą na jakąś ramkę danych to jeśli nie umieszczę w pętli głównej choćby drobnego delaya to nie mogę nic odebrać.
Proszę kod bez dodatkowych pustych lini. biblioteka [syntax=c] /* Includes ----------------------------------------... #include "TC.h" #include "systick.h" #include "GLCD.h" #include <stdio.h>; /***************************************... * Function Name : MAX31855_SPI_Init * Description...
delay stm32 stm32 timer delay stm32 delay systick
wymiana poduszka amortyzator kabel miedziany zegar sterujący podtrzymania
podstawy lutowania m2405s schemat
Jak sprawdzić driver MOSFET-ów: krok po kroku Błąd C3-1140 w drukarce Samsung M2875ND - jak naprawić?