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]
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?
Myślę że tak czy siak problem jest jeden delay zamiast dwóch.
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...
nie, nic nie ruszałem odpalam LCD_Initialize(); po nim mam wywołaną funkcję która robi delaya 1000ms.
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 /*...
Witam, Kiedy chcę ustawić kursor na czwartym wierszu w wyświetlaczu LCD HD44780 wędruje on na początek drugiego wiersza. Dodam, że kiedy długością napisu w drugim wierszu wychodzą poza limit 16 znaków to zostają one wyświetlone w wierszu czwartym. Istotne fragmenty kodu poniżej. Inicjalizacja: [syntax=c] void LCD_Init(void) { // dla 8 bitowej...
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
Już ktoś wyżej pokazał. Operacja &= wymaga wykonania przez procesor min. 3 instrukcji, które w C można symbolicznie zapisać jako: t = SR; t &= maska; SR = t; Jeżeli po pierwszej z tych operacji timer ustawi inny znacznik przerwania w SR, to trzecia z nich skasuje go (oprócz tego znacznika, który miała skasować). Dokładnie to samo zrobi bitbanding, tyle,...
Uruchomiłem rtc i działa bez problemu na płytce stm32VLDISCOVERY. Do tego chce uruchomić alarm rtc w przerwaniu aby móc wchodzić uc w tryb STOP mode. Init przerwania: [syntax=c] //Konfiguruje linie EXTI dla rtc alarm EXTI->RTSR = EXTI_FTSR_TR17; EXTI->FTSR = 0; EXTI->PR = 0xFFFFF; EXTI->IMR = EXTI_EMR_MR17; //Irq enable dla rtc alarm NVIC_EnableIRQ(...
Jakie środowisko? Zakładam, że CooCox, ponieważ w innych takie rzeczy raczej nie występują. Odkąd pamiętam, to taki zapis zawsze poprawnie konfigurował SysTick do generowania przerwań co 1ms (1000Hz): [syntax=C] #include core_cm4.h #define FREQUENCY 168000000ul // lub dowolna inna, ale prawdziwa ///... jakiś fragment programu... if (SysTick_Config(FREQUENCY...
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 |...
Rozumiem, ze jak mam 3 zadania/watki/taski, to bajer polega na tym, ze wszystkie zmienne uzyte w danym watku, sa zrzucane/zapamietane - kontekst. Dotyczy to tylko zmiennych automatycznych. Zmienne statyczne są "wspólne" (istnieje tylko jedna kopia, niezależnie od ilości wątków). A co jak sie zadeklaruje jakas tablice TAB Generalnie nie da się zadeklarować...
Zrób to bez delay() a będzie dobrze ;-) Ja, wpisuję dane wtedy gdy host odbierze poprzednie. Sygnalizuje to przerwaniem lub flagą. Albert
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.
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.
[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]
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...
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...
jak widzisz, kumpel poległ. Tylko dlatego, że nie potrafił dodać swojej płytki Nucleo do Arduino. Problemem są zdewaluowane kursy na polskich stronach, odnoszące się do starych wersji. Jak zrobiłem wg tych wcześniejszych linkowanych kursów, też nie było płytek Nucleo dostępnych w 'Boards'. Oczywiście problem rozwiązany w minutę za pomocą angielskich...
Ś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...
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]
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.
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...
Błędy są tylko przy linkowaniu to log. Z tego co kojarzę to -flto ma być czymś lepszym niż -fwhole-program. arm-none-eabi-gcc -mcpu=cortex-m4 -mthumb -mfloat-abi=hard -mfpu=fpv4-sp-d16 -ffast-math -Os -flto -Tstm32f4_flash.ld -static -Wl,-Map=out/Rejestrator.map,--cref,-u,R... -Wl,--start-group...
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.
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...
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...
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ć...
(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)
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"...
Ustawiłem FPU w Eclipsie w następujący sposób http://obrazki.elektroda.pl/8684137500_1... ale teraz wywala inne błędy... może czegoś nie ustawiłem ? 12:38:34 **** Incremental Build of configuration Debug for project Stm32f4 **** make all 'Building target: Stm32f4.elf' 'Invoking: Cross ARM C++ Linker' arm-none-eabi-g++...
W ZL'u zrobiłem to tak: void GPIO_Conf(void) { RCC_APB2PeriphClockCmd(RCC_APB2Perip... | RCC_APB2Periph_USART1 | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitTypeDef GPIO_InitStructure; GPIO_PinRemapConfig(GPIO_Remap_USART... ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; // Tx GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;...
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...
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...
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...
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...
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.
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).
(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...
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...
Dziękuje za odpowiedź. Zdecydowałem się jednak na komunikację poprzez I2C. Jeśli prędkość nie będzie wystarczająca to spróbuje po tym SPI. Jednak niestety natrafiłem na następujący problem. Napisałem sobie kilka funkcji pomocnych przy obsłudze I2C. Chcę odczytać dane tylko z żyroskopu na razie z jednej osi. Podczas odczytywania cały czas wyświetla mi...
Widzę, że nikt się nie skusił na 500pkt.... Pracuję nad tym dzień i noc, teraz próbuję podejść od drugiej strony przerabiając projekt do kamery, pozamieniałem wszystkie wyprowadzenia GPIO aby pasowało to do mojej płytki, ale niestety nie chce działać - wyświetlacz cały biały. Wydaje mi się, że problem tkwi w pliku GLDC.c, ale nie wiem gdzie... main.c...
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.
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...
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...
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...
Hm, wygląda na to, że straciłem parę dobrych godzin, a postęp jest w zasadzie zerowy. W każdym razie to co się dzieje na pewno: - nie jest skutkiem tail-chainingu, - nie jest skutkiem nieprawidłowej obsługi przerwań, - nie jest skutkiem drgania styków. Nie wiem, może robię coś zupełnie głupiego albo czegoś nie rozumiem, ale wygląda na to, że program...
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...
Mam STM32f103rb - NUCLEO. Początkowo robiłem bez przerwań i zapytanie modbusowe do urządzenia wysyłałem w pętli while(1) z użyciem Delay'ow. W ten sposób: [syntax=c] int main(void) { /*uruchomienie zegara*/ konf_zegary(); /*Initialize GPIOA PIN8*/ GPIOA_Init(); /*Initialize USART1*/ USART1_Init(); /* Initialize USART2*/ USART2_Init(); /*ramka modbus*/...
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,...
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...
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....
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...
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!!
.. 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]...
No i ten "delay" na pętli for... 4\/3!!
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 -...
A delay between an RCC peripheral clock enable and the effective peripheral enabling should be taken into account in order to manage the peripheral read/write to registers. This delay depends on the peripheral’s mapping: - If the peripheral is mapped on AHB: the delay should be equal to 2 AHB cycles.
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,...
Teraz wiem ze ten przykład mi działa to zaraz się przekonam czy faktycznie to MCO2 się do tego lepiej nada. Spróbuj może tego: [syntax=c] void mco2enable() { volatile uint32_t tmpreg = 0x00U; // set mco2 port clock RCC->AHB1ENR |= RCC_AHB1ENR_GPIOCEN; // delay after an RCC peripheral clock enabling tmpreg = RCC->AHB1ENR & RCC_AHB1ENR_GPIOCEN; (void)(tmpreg);...
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...
The correct disable procedure is (except when receive-only mode is used): ... 2. Wait until TXE=1 and then wait until BSY=0 before disabling the SPI. ... Note: During discontinuous communications, there is a 2 APB clock period delay between the write operation to the SPI_DR register and BSY bit setting. As a consequence it is mandatory to wait first...
Witam, Mam problem z komunikacją mojego STM32 F103RB z płytką Adafruit CAP1188. Wydaje mi się że problem może być w moim kodzie - konfiguracja SPI lub sposób komunikacji z modułem. Według dokumentacji CAP1188 najpierw powinienem wysłać 2bajty resetujące (0x7A), następnie wskaźnik do adresu z którego chcę odczytywać, lub wpisywać (0x7D), dalej - adres...
Nie kilka tylko 9. Ogólnie test i ewentualny reset magistrali powinien mniej więcej wyglądać tak: * test linii SCL -> jeżeli LOW to nic nie można zrobić, jeżeli HIGH przechodzimy do kolejnego punktu * test linii SDA -> jeżeli LOW to wykonujemy sekwencje resetu, jeżeli HIGH return OK Sekwencja resetu (9 razy): * wykonujesz SCL LOW, DELAY, SCL HIGH, DELAY...
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ż...
To ja dodam podobne pytanie, dla STM32vldiscovery. Migająca diodka i dźwięki typu beeep:). Ustawienia źródła (kwarc 8MHz), pętli PLL (x3=24MHz), ten sam program programowany z Keil działa wg ustawień (Systick 1ms, delay = 1000 daje 1sek. pasuje). Oraz ten sam program .bin (lub .hex) programowany przez STM32 ST_Link Utility i diodka mruga dużo wolniej,...
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...
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...
Poprawiłem adres na 0x20 i próbuje użyć funkcji HAL_I2C_Mem_Write() i HAL_I2C_Mem_Read(), aby sprawdzić czy dobrze przesyłam dane, ale podczas debugowania wyświetla się problem, który staram się naprawić. https://obrazki.elektroda.pl/8895164800_... Jako test chciałem napisać to w taki sposób: uint8_t test = 0x11; // 0b00010001 HAL_I2C_Mem_Write(&hi2c1,...
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]...
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...
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,...
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,...
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...
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...
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...
Potrafię wykonać miganie diody, ale nie potrafię tego wyłączyć za pomocą przerwania. :) I słusznie bo klawiszy nie robi się przerwaniami zewnetrznymi z bardzo wielu względów, o których nie chce mi sie pisać, bo było to pisane juz na tym forum wielokrotnie. Użyj przerwania któregoś z timerów. Dodano po 3 Gdy wykonywałem to wcześniej (w pętli sprawdzałem...
Mam takie dziwne dzialanie ADC, nie wiem czy to jakiś błąd sprzętowy, dziwna właściwość niedoczytana albo coś pominąłem, ale sprawa wygląda dziwnie. Procesor STM32F100RB (z płytki stm32vldisco.). Uruchomiłem cztery kanały, ale tu chodzi o ADC1 kanał 1 (PA1). Po uruchomieniu ADC działa prawidłowo przy pojedyńczych odczytach, jednak pracuje w takim kodzie:...
[syntax=C] int main(void) { char bajt=0; char bajt2=0; char a[10]; Delay_config(); Delay_us_Init(); usart_Init(); gpio_init(); // konfiguracja pinów dla SPI1 - Master RCC->AHBENR |= RCC_AHBENR_GPIOAEN; gpio_pin_cfg(GPIOA, GPIO_Pin_4, GPIO_AF5_PP_50MHz); // NSS gpio_pin_cfg(GPIOA, GPIO_Pin_5, GPIO_AF5_PP_50MHz); // SCK gpio_pin_cfg(GPIOA, GPIO_Pin_6,...
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...
Problem rozwiązany. Błędna inicjalizacja wyświetlacza Poprawna sekwencja inicjalizacyjna: [syntax=c]LCD_WriteCommand(0x01); delay(10); LCD_WriteCommand(0x28); LCD_WriteCommand(0xcf); LCD_WriteData(0x00); LCD_WriteData(0x83); LCD_WriteData(0x30); LCD_WriteCommand(0xed); LCD_WriteData(0x64); LCD_WriteData(0x03); LCD_WriteData(0x12); LCD_WriteData(0x81);...
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...
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...
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...
Generalnie w pierwszej zakładce wybierz projekt którego używasz, a w ostatniej odznacz "reset and delay" (to załatwiasz "ręcznie" komendą poniżej), możesz też profilaktycznie dorzucić "main" w "Set breakpoint at" w "Runtime options", oraz zaznaczyć "Resume" poniżej. Upewnij się, że na obydwóch kompach opcje konfiguracyjne (debuggera i OpenOCD) są identyczne....
Hejka, od niedawna mam płytkę stm32 discovery. Próbuję już 2 dzień i mi nie działa transmisja po rs232.. układzik łączący z kompem zrobiłem na max3232 i jak sprawdzam echo (rx z tx) to wszystko ładnie śmiga. A jak podłącze to do pinów PA9 i PA10, to cały czas otrzymuję znaki puste. Wydaje mi się, że program poprawnie napisałem.. [syntax=c] #include...
Witam, zajmuję cię projektem na uczelnie. Na razie próbuje poruszać serwami Dynamixel RX-64 przez CAN. Używam przejściówki CAN->RS-485. Aby poruszyć serwem wystaczy jako identyfikator wysłać wartość (0x100 << 21) oraz jako dane nową pozycję serwa. Problem polega na tym, że serwo w ogóle nie reaguje. Używam bibliotek firmy ST i udało mi się...
Wyłączenie optymalizacji to będzie raczej ficzer kompilatora, nie języka. W GCC jest jakiś atrybut, który pozwala zdefiniować poziom optymalizacji dla konkretnej funkcji - coś w stylu NOP does nothing. NOP is not necessarily a time-consuming NOP. The processor might remove it from the pipeline before it reaches the execution stage. Please note that...
Nie wiem, co jest grane, może to wina, że na magistrali nie pojawiaja się wszystkie bity naraz? To że nie naraz nie ma znaczenia. Jedyne co można by brać pod uwagę to odstęp czasowy między ustawieniem ostatniego z ośmiu bitów a zboczem sygnału WR (choć nie wiem na którym zboczu jest faktyczny wpis do sterownika, sprawdź może). Może jakiś delay przed...
Proszę spójrz na dokumentacje i porównaj sobie ze zdjęciem przebiegów z sygnałów Z analizatora stanów CS wygląda tak jak w dokumentacji Delay od RES też nie przeszkadza (o ten delay chodzi chyba?). Przepraszam za moje komentarze w kodzie, ale zdarza mi się zapomnieć poprawić komentarz po naniesieniu zmian. http://obrazki.elektroda.pl/3644937000_1...
nie pracują zarówno karty 2GB i 4GB, jedna karta 2GB ruszyła. Dodałem delay 50 ms przed rozpoczeciem inicjalizacji, powtorzylem 4 razy init i niestety caly czas to samo. Możliwe że karty te domyślnie pracują w trybie SDIO i trzeba przełączyć je na tryb SPI
Cześć, dopiero zaczynam temat mikrokontrolerów STM32. Posiadam płytkę NUCLEO-F429ZI. Proszę o pomoc w napisaniu kodu , który będzie realizował włączenie diody po naciśnięciu przycisku. Poniżej wklejam kod, który udało mi się napisać. Ma on za zadanie uruchamiać po kolei trzy diody, jedna po drugiej. Dodano po 41 Już wiem jak to napisać, zamykam ;) [syntax=c]...
Witam Zbudowałem tester wysokiego napięcia który został zamieszczony na tej stronie... https://www.printables.com/pl/model/3471... Układ działa tzn wyświetla jednak na wyjściu B0 nie mam sygnału PWM. Sprawdzane na trzech różnych STM32...
stm32 delay stm32 timer delay stm32 delay systick
osłona paska rozrządu klucz elektrolityczny lumel amperomierz
rower elektryczny romet posnet thermal
Kod DF262 w Renault - co oznacza? LG Therma V – ustawienia krzywej grzewczej, sterowanie pogodowe, optymalizacja COP