Odczyt rejestru DR przez debugger jest odczytem, a więc resetuje flagę RXNE w rejestrze SR. Wyłącz podgląd rejestru DR to powinno być lepiej.
Bit RXNEIE włącza przerwanie od dwóch flag: RXNE i ORE (overrun) - patrz tabelka USART interrupt requests . Odczyt z DR kasuje RXNE. ORE jest kasowane przez (cytat z opisu bitu ORE): "an read to the USART_SR register followed by a read to the USART_DR register".
Witam, Potrzebuje pomysł na zgrabne programowanie zewnętrznej kości EEPROM podpiętej przez I2C z STM32F103RB. Chcę żeby to się odbywało mniej więcej jak to ma miejsce w AVR, czyli jeżeli programuje procesor to i EEPROM. W STM na początku programu mam funkcję która programuje mi EEPROM domyślnymi wartościami, ale wiadomo że tak nie może zostać na stałe,...
Niemożliwe żeby nie działało, masz przecież bibliotekę, która wszystko ułatwia i rozwiązuje wszystkie problemy. RCC_ APB1 PeriphClockCmd(RCC_ APB2 Periph_SPI1, ENABLE); 4\/3!!
SWSTART: Start conversion of regular channels
Oczekiwanie na flagę TXE nie gwarantuje że transfer się zakończył (bo co ma pusty bufor do idącej w tym czasie transmisji?) - do tego służy flaga BSY. 4\/3!!
choć myślałem, że kiedy nie ruszam niczego co ma związek z CC to on nie porównuje.. To źle myślisz. Włączenie CC to tak naprawdę włączenie tego co dalej. Czyli sterowania kierunkiem liczenia reakcje wyjścia OC itp itd. Porównanie działa nawet gdy CC jest wyłączone.
Czytając o rejestrach liczników, jedyną taką flagą (którą znalazłem), jest TIMx_SR_UIF, czyli UpdateInterruptFlag. Co prawda nie będę włączał przerwania, ale jest to chyba jedyna flaga którą mogę w tym celu wykorzystać, czy też jest jakaś inna lepsza do tego celu? To jest właśnie flaga która jest Ci potrzebna. 4\/3!!
MOSI - (ang. Master Output Slave Input) - dane dla układu peryferyjnego MISO - (ang. Master Input Slave Output) - dane z układu peryferyjnego zastanow sie czy na pewno dobrze podlaczyles ?
To powinno Ciebie zainteresować: [url=http://www.elektroda.pl/rtvforum/to... statusowa SPI. Problem podobny to Twojego, więc radzę napisać po swojemu i po ludzku. I nie korzystać z tego wynalazku jakim jest ta biblioteka, szczególnie to takich trywialnych rzeczy jak SPI (;
Ważne jest co jest w apiflags. Sprawdź czy nie jest ustawiona flaga TCP_WRITE_FLAG_MORE.
A jak się upewnisz bez while'a o zmianie flagi? wszystkich sie nie da wyrzucić... W przerwaniu. Chyba, że lubisz/możesz sobie pozwolić na robienie while w pętli głównej. Ale ten błąd I2C nie wynikał z tego, że zastosowano while tylko dlatego, że w zły sposób była sprawdzana flaga.
A flaga jest zadeklarowana jako volatile ?
Już to kilka razy wrzucałem, ale u siebie mam tak: [syntax=C] io_pin_cfg(SDA_GPIO, SDA_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_OUT_... GPIO_CRx_CNF_ALT_OD_value));// SDA - alt output, open-drain, 10M io_pin_cfg(SCL_GPIO, SCL_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_OUT_... GPIO_CRx_CNF_ALT_OD_value));// SCL - alt output, open-drain, 10M...
Musisz jeszcze skasować flagę końca konwersji w rejestrze statusowym. Pisałem żebyś manuala poczytał! JEOC: Injected channel end of conversion This bit is set by hardware at the end of all injected group channel conversion. It is cleared by software. 0: Conversion is not complete 1: Conversion complete Tu jest troszkę inaczej niż w regularnych kanałach...
Przestawienie kierunku po rozpoczęciu wysyłania ostatniego bajtu jest błędem. Należy go przestawić dopiero _PO_ tym gdy ustawi się flaga TC. Ty natomiast sprawdzasz tą flagę _PRZED_ rozpoczęciem wysyłania (ale tak czy siak po przestawieniu kierunku), co jest mało sensowne. Wewnątrz pętli powinieneś sprawdzać flagę TXE, a TC tylko przed zmianą kierunku...
Zerowanie flagi na końcu przerwania - niedopuszczalne
W takie cuda mi się wierzyć nie chce :) że te funkcje robią jako opóźnienie. Tak wogóle to musisz sprawdzać flagi RXNE. Bo to właśnie TA flaga oznacza, że w SPI jest nowa dana do odebrania czyli jednoznacznie zakończyło się nadawanie. Flafa TXE nie oznacza że skończyło się nadawanie tylko że możesz zapisać daną do rejestru bo jest pusty ale nie wykluczone...
Ja właśnie dostałem płytki z chin zrobione pod STM32F030 preferowane STM32F030CCT6. Zamówiłem więcej płytek żeby może używać płytki do innych projektów. Do projektu docelowego mam 2 sztuki w zapasie, ale przy braku na rynku reszta płytek pójdzie na półkę albo do śmieci :( STM32F030C8T6 można aktualnie kupić. Tak wiem o istnieniu STM32F030C8T6, to miał...
Nie musisz z odbiorem czekać na flagę BSY - od tego masz flagę RXNE. Flaga BSY przydaje się przed "przestawieniem" CSa. 4\/3!!
Wpisujesz do rejestru danych 0x60 i ze względu na 1 stopniowy FIFO, TXE jest ustawiany w następnym cyklu APB, więc chwilę później wpisujesz "losowy bajt". Bezpośrednio po wysłaniu polecenia (0x60), ustawiana jest flaga RXNE, ponieważ interfejs coś już odebrał, a Ty odczytujesz to coś = "śmieci" i wychodzisz z funkcji. Właściwe dane przyjdą dopiero w...
I2C1->CR1 = 1025 czyli jest ustwaiony ACK i PE I2C1->CR1 = 2 czyli FRQ = 8Mhz I2C1->CCR = 801 czyli CCR = 801 uC taktowany jest z HSI 8 MHZ I2C_GenerateSTART(I2C1, ENABLE); while( (I2C1->SR1 & (1<<0))==0 ); I2C_SendData(I2C1, 0b10100000); while( (I2C1->SR1 & (1<<2))==0...
Nie znam nowych avrów, ten kod przypomina mi STM32, natomiast w starych była globalna flaga uruchomienia przerwań, sprawdzałeś czy tutaj takiej nie potrzeba? I przez analogię do STM, czy po zmianach częstotliwości zegara, nie trzeba poczekać ileś cykli aż się ustabilizuje? Jak tam prosty przykład? No i przeniósłbym zliczanie minut do przerwania, u siebie...
Najoptymalniej jest ustawić flagę a w pętli głównej jeśli ta flaga jest ustawiona to wywołać funkcję.
Kompilator języka C (zakładając poprawną konfigurację projektu/make'a) nawet jakbyś wrzucił milion niepotrzebnych plików, to wyrzuci z nich funkcje, których nie używasz (tak zwany martwy kod). Nie będą więc one w kodzie wynikowym No tak, ale np. gcc zrobi tak tylko gdy wywołasz go z flagami -ffunction-sections i -fdata-sections. A jeszcze potem trzeba...
A jest jakiś inny interfejs CAN na magistrali? Nie wiem dokładnie jak jest w STM32, ale jeśli inny interfejs nie potwierdzi odbioru, może być ustawiona jakaś flaga błędu. Pozdro.
- Nie do końca wiem co poszczególne linijki kodu powodują w samym układzie. Jeśli masz problem ze zrozumieniem rejestrów uC ich obsługi, co robi flaga, dlaczego i kiedy trzeba ją kasować, użyj HAL. Następnie podejrzyj (nie zawsze jest łatwo, bo HAL jest uniwersalny przez co czasem nieźle "zakręcony") jak to jest zrobione. Łatwiej będzie Ci zrozumieć...
Racja, w F1 jest jedynie flaga IDLE ktora moze się przydać. Jej procedura czyszczenia jest jedynie trochę dziwna.
A ta flaga nie jest ustawiana w momencie opróżnienia bufora nadajnika czyli po wysłaniu danych ?
Co do TIM3->SR &=~TIM_SR_UIF; przyznam, że dalej nie rozumiem jaka jest różnica w obydwu przypadkach kasuje tylko JEDEN bit nie CAŁY rejestr. W jednym przypadku zeruje jeden bit, w drugim przypadku zmieniam jego stan na przeciwny. Operacja logiczna na którą się tak uparłeś i zamierzasz bronić do ostatniej kropli krwi generalnie ma same wady i zero...
Czyli próbowałeś już I2Cx_CR1_SWRST? Jak przeglądasz te rejestry statusowe, to TYLKO flaga BUSY jest ustawiona? Nie ma żadnych innych errorów? 4\/3!!
Zrób to bez delay() a będzie dobrze ;-) Ja, wpisuję dane wtedy gdy host odbierze poprzednie. Sygnalizuje to przerwaniem lub flagą. Albert
W przerwaniu przydałoby się kasowanie flagi od przerwania (rejestr EXTI_PR)
Debouncing w przerwaniu - tylko nie mów, że robisz to przez aktywne oczekiwanie wewnątrz przerwania. Jeśli tak, to zauważ, że to, że skasowałeś flagę przerwania i jesteś w przerwaniu wcale nie oznacza, że flaga nie może zostać ustawiona ponownie. Możliwy jest taki scenariusz: wciskasz przycisk, pojawia się zbocze opadające które ustawia flagę a więc...
Problem pojawia się na mikrokontrolerze STM32F100RB, aczkolwiek wydaje mi się, że nie ma on związku z samym mikrokontrolerem. Próbuje odczytywać dane z ultradźwiękowego anemometru, który jako jedyną magistralę cyfrową posiada RS485 (ma też wyjścia analogowe). Podłączam go do mojego sterownika przy pomocy takiego konwertera: . Jest on oparty na układzie...
Cudnie, tylko jak ( I2C1->SR1 & I2C_SR1_ADDR ) == 0 to flaga busy nie będzie w ogóle sprawdzona, to samo w drugą stronę :) Chyba, że nie musi, nie zgłębiałem się.
Bardzo dziękuję za pomoc, skorzystałem ze sprawdzania flagi od DMA i śmiga. Swoją drogą, to nigdy bym nie pomyślał, że flaga ta ustawia się w innym momencie niż generowane jest przerwanie. A tu się okazuje, że TC to nie TC.
Skoro zerujesz ręcznie piny to czego się spodziewasz jeśli nie wyzwolenia przerwania od zbocza opadającego? Moduł EXTI działa niezależnie od tego czy ma włączone przerwania czy nie - jeśli są wyłączone to po prostu nic się nie wywoła, ale flagi zostaną sprawdzone. Jeśli włączysz przerwanie, a flaga była ustawiona, to przerwanie zostanie aktywowane najszybciej...
Przecież ten układ nie ma FPU, więc flagi kompilacji są zupełnie bezsensowne... Wystarczy samo -mcpu, -march jest zbędne. Flaga "-nodefaultlibs" dla linkera też jest dziwnym pomysłem, biorąc pod uwagę fakt, że w tych "default libs" jest pewnie nawet dzielenie liczb całkowitych.
Podaj zawartości jeszcze rejestrów od zegara itp, to tajemnica 72MHz się wyjaśni :) Oto kod inicjalizacji SPI1 void spi_init (void) { SPI_InitTypeDef SPI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* Configure SPI1 pins: SCK, MISO and MOSI ---------------------------------*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7;...
Witam. Posiadam STM32F4-discovery, do którego chciałbym podłączyć kartę SD poprzez interfejs SDIO. [syntax=c]#include "stm32f4xx.h" // Device header int main(){ //////////////// SDIO ////////////////// // USED: // PORTC -> AF12 -> PC[12:8] // PORTD -> AF12 -> PD[2] ////////// GPIO CONFIG ////////// ///// Enable clock for SDIO ports RCC->AHB1ENR...
Ok, dzięki. Chodziło mi o to, czy bit USART_SR_RXNE jest flagą przerwania, czy też jest gdzieś inna flaga dla przerwania. Bit ten jest opisany jako "Read data register not empty" i nie miałem pewności czy nie ma jeszcze innej, osobnej flagi specjalnie dla przerwania. Ale wynika z tego że nie. Czyli w przerwaniu wystarczy odczytać rejestr DR.
Ta flaga RXNE jest w tym trybie chyba wystawiana po prostu po 8 cyklach zegara i tyle, czyli w zasadzie zawsze razem z flagą TXE. Nie prawda, ponieważ rejestr DR nie jest rzeczywistym rejestrem przesuwnym używanym do transmisji - możliwe jest więc, że flaga TXE ustawiana jest od razu po zapisie do DR, natomiast RXNE dopiero gdy faktycznie zostanie...
Sprawdziłem to co zaproponowałeś i wyniki są następujące. Wykomentowałem linijkę, w której flaga jest resetowana (flag=0) w procedurze przerwania od timera. Czyli jawnie w kodzie nie ma żadnego miejsca gdzie flaga byłaby zerowana. Efekt - bez zmian. Na wyjściu z przerwania od EXTI widzę 1. Na wejściu przerwania timera - 0. Co więcej, przy kolejnym wejściu...
Eeech szkoda mówić ... Stało się tak: 1) Ściągnąłem źródła Linaro i zacząłem czytać dokumentację w katalogu INSTALL 2) Zainstalowałem Cygwina wraz z komponentami wymienionymi w dokumentacji Linaro jako potrzebne (plik prerequisites.html w katalogu INSTALL) 3) Odpaliłem w Cygwinie konfigurację z flagami: ./configure --with-pkgversion='Linaro GCC 4.6...
Sprawdzałem jakie warowności przyjmuje flaga uip_flags PT_THREAD(handle_dhcp(void)&... { PT_BEGIN(&s.pt); /* try_again:*/ s.state = STATE_SENDING; s.ticks = CLOCK_SECOND; do { printf("Flafga przed discover - %d\n\r",uip_flags); send_discover(); printf("Flafga po discover- %d\n\r",uip_flags);...
Rzeczywiście, dawno nie używałem DMA i "zapomniałem" co to kanał :cry: . Poprawiłem też długości słów (obydwa po 1 bajt) ale tak naprawdę nic się nie zmieniło. Dalej nie otrzymuję danych. Mogę dodać, że zegary od TIM2, DMA1, USART2 włączone. Może robię coś nie tak przy sprawdzaniu tych flag w przerwaniu od DMA, ale starałem się pisać zgodnie z manualem....
po prostu - masz thread, który pisze do SD. odbierasz ramke, który jezt zablokowany na kolejce, semaforze, mutexie czy tez notyfikacji. Przykład: Jak odbierzesz ramkę wstawiasz do kolejki dane (lub tylko referencję). Thread zapisujący na kartę się odblokowuje i zapisuje. Możesz miec (jezeli wstawiasz do kolejki same rwskażniki do buforów) dwa (lub węcej)...
zujnik jest podłączony bez rezystorów wzmacniających, ponieważ odczytałem ze schematu, że nie są potrzebne(próbowałem także z rezystorami 4k7). Przy sprawdzeniu bufora z danymi w programie Stm Studio, nic się nie zmienia a flaga busy jest ustawiona jedynie przy odłączeniu kabla SDA od czujnika. Proszę o pomoc w znalezieniu przyczyny braku odczytu i...
A to nie jest tak że jak włączę np timer i będzie sobie chodził i jak się w końcu przekręci, (przepełni) to ustawi flagę np UIF (piszę z pamięci mogę pomylić nazwę, ale chodzi o przepełnienie). Flaga jest ustawiona, włączam przerwanie w peryferialu i następnie w NIVC. Jeśli flagi nie skasuję to odpali się przerwanie czy nie?
Hmm, pierwsze co zdiagnozowałem to to że mój STM nie jest taktowany 72Mhz, bo w takiej konfiguracji: SysTick_Config((CLK_FREQ/1000) *200); flaga w poniższej funkcji : void SysTick_Handler(void) { static unsigned short count = 0; flaga = 1; } jest ustawiana co około 2s, a według obliczeń powinna być co 200ms...
Jeśli pisząc "wiesza" masz na myśli HardFault to nie. Wygląda na to, że cały czas stoi w linii z whilem gdzie sprawdzana jest właśnie ta flaga. Nie chce w tym czasie wejść do przerwania. Generalnie po tych wszystkich zmianach program zachowuje się tak jak przedtem, tzn. gdy wszystko chodziło z FLASHa.
Wiedziałem o tym tylko nie bardzo właśnie wiem co to zmienia, tak czy tak powinna się ta flaga wyzerować po pierwszym przerwaniu, nie? Bo nad wysyłaniem mogę zapanować ustawianiem TXE w CR1 tylko czy o to chodzi?:P No i za każdym odebranym znakiem przelatuje mi też część przerwania odpowiedzialna za wysyłanie a to już bez sensu :P Czy w ogóle nie powinienem...
Nie robiłem za dużo w STM32, nawet nie wiem jak są zdefiniowane RESET (zapewne #define RESET 0) i SET (zapewne #define SET !RESET). Jeżeli tak jest to są to jednoznaczne operacje. Czy to jest za szybkie, to w sumie zależy jak Twój program jest skonstruowany. Jeżeli masz nieodpowiednio napisany program w jakichś innych miejscach, to jest to możliwe....
W sumie to mam pytanie czy dobrze rozumiem jak to ma działać. Tak skonfigurowany DMA wykonuje transfer raz, w momencie ustawienia bitu ENABLE. Kod z moimi komentarzami (wypisane z DSa). [syntax=c] void DMA_Conf(void) { RCC->AHBENR = RCC_AHBENR_DMA1EN; /* Procedura konfiguracji kanałów DMA 1. Ustawić adres rejestru peryferiów w rejestrze DMA_CPARx Dane...
Flaga USART_CR2_TXINV w CR2 USARTu.
USART1->ISR &= ~USART_ISR_RXNE; To jest po pierwsze zbędne - flaga jest czyszczona automatycznie jeśli coś odczytasz - a po drugie błędne - do czyszczenia flag słłuży rejestr ICR, a nie ISR (który jest tylko do odczytu). Na pinie RX warto albo ustawić wewnętrzne podciąganie, albo zrobić podciąganie zewnętrzne.
if (RTC_GetITStatus(RTC_IT_SEC) != RESET) { RTC_ClearITPendingBit(RTC_IT_SEC); Po co warunkujesz kasowanie flagi?
Wydaje mi się, że problem tkwi po stronie SPI - bufor, przepełnienie albo jakiś błąd? Szklana kula - poczekaj - pożyczyłem znajomej wiedźmie. Nie wiem czy nie stłukła. Jaka szkoda, może by się przydała ;) Jakieś podpowiedzi odnośnie buforu SPI w trybie "receive only" - zauważyłem, że pojawia się flaga OVRRUN i BUSY po zatrzymaniu programu w debuggerze?...
Dużo już naklepaliście w tym temacie, ale wyrywkowo moje przemyślenia... Request jest generowany w momencie pojawienia się wolnego slotu, ale to może być 8-bit, zamiast 16-bit. Nie wiem, czy dokładnie to masz na myśli, ale dla SPI FIFO TX o długości 4B i aktywowaniu DMA zasysane są tylko 3 bajty i znika flaga TXE, podobno właśnie po to, by następny...
1. Dla SysTicka nie włączasz NVIC, bo to przerwanie jest w NVIC zawsze włączone (w ogóle nie da się go wyłączyć inaczej niż wyłączając globalne zezwolenie na jakiekolwiek przerwania). 2. Generowanie przerwania włączasz w SysTicku [; Reasumując: - SysTick->LOAD - wartość "przeładowania" - SysTick->CTRL - dla takiego działania jak chcesz ustawiasz tam...
Może spróbuj przed włączeniem taktowania timera ustawić bit (Bit 0 UG: Update generation) w rejestrze EGR [syntax=c]TIM3->EGR = TIM_EGR_UG; [/syntax] Pozdrawiam
Witam, Pracuje nad kodem programu do komunikacji przez UART (mikrokontroler <-> komputer) i zastanawiam się nad sposobem implementacji w przerwaniach. Na razie zrobiłem to w taki sposób: - Nadawanie danych wykonuje w taki sposób, że w programie głównym zmieniam w wskaźniku adres początku tablicy którą aktualnie przesyłam przez UART, w przerwaniu...
Poradnik jest bardzo fajny i pomocny. Wielkie dzięki za opracowanie. A piszę, bo chciałem zgłosić, jak mi się wydaje, subtelny błąd. Mianowicie w części o ADC, zadanie nr 13.3 wiersz 22 - pętla oczekująca na zakończenie konwersji. Wcześniej piszesz, że po zakończeniu konwersji wszystkich kanałów regularnych ustawiana jest flaga EOC. Ale jednocześnie,...
Temat jest znany już dawna. Wg, również i moich, testów dostępne były diody z czasem resetu ok 9 us oraz 35 us. Prawdopodobnie masz te drugie. A może jeszcze jakiś nowy twór pojawił się na rynku. "Moje" diody resetują się przy czasie powyżej 200µs, więc to jeszcze coś nowszego. Dobrze byłoby dograć tę bibliotekę, by czas resetu był parametrem....
ale widać nie chce Ci się czytać i wolisz przekonywać nas, że masz dobrze tylko coś innego nie działa Nie chodziło mi o to, że ja mam na pewno dobrze, tylko czemu tak jest. Jak bym uważał, że mam dobrze to bym nie pytał ;). A źle miałem policzone CCR i TRISE, poprawiłem, działa ładnie na flagach.
Czy proponujesz zatem taki zapis: ... Jeśli w tym rejestrze wcześniej jest coś co chcesz zachować to może zostać, ja proponuje użyć operacji przypisania "=" zamiast sumy bitowej "|=" - używając sumy zakładasz że wcześniej jest tam "znana wartość", co niekoniecznie jest prawdą i czasem można się nieźle przejechać na takim założeniu... Widocznie przekroczenie...
Flagę TXE powinno się sprawdzać PRZED wpisaniem czegoś do DR (to akurat nie jest wielkim problemem), ale przed odczytaniem DR powinno się sprawdzać czy flaga RXNE jest ustawiona - dopiero wtedy można odczytać to co jest w DR. Bez tego wciąż nie odczytujesz tego co chcesz - na etapie inicjalizacji odczyt masz praktycznie natychmiast po wpisaniu (bufor...
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 nie ma od tej flagi jakiegoś przerwania ?
Chciał bym żeby po przerwaniu program od razu startował w nowym efekcie. Ustawiaj w przerwaniu flagę. Program główny będzie ją sprawdzał, jak jest ustawiona zmieni efekt i skasuje flagę.
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...
Jeśli zajrzysz do definicji funkcji NVIC_SetPriority((), zobaczysz, że dla SysTick nie rusza ona wcale NVIC. Racja, wpisuje do innych rejestrów. Ale Manual pisze że SysTick też wchodzi o NVIC. Jeszcze kolejna sprawa. Skoro Aby mogło wystąpić przerwanie należy zarówno ustawić i to co generuje przerwanie np Timer jak i NVIC. Ale co np ze znacznikiem...
Spróbuję bez dodawania flag i zmieniania tych ustawień, ciekawe czy pójdzie... Pójdzie, ale parsowanie nagłówków będzie błędne, bo np. będzie uważał, że kompilujesz projekt dla ARM7TDMI-S (czy cokolwiek tam jest używane domyślnie jak nie podasz żadnych flag).
Witam, Mam urządzenie z którym chciałbym się skomunikować. Za pomocą Realterm wysyłam do urządzenia 3 znaki: /#1 i urządzenie odpowiada całą paczką danych. Przepięcie linii USB/RS232TTL do mikrokontrolera sprawiła mi jak zwykle kłopot. A mianowicie wysyłam do urządzenia te 3 znaki z STM32 natomiast urządzenie nie odpowiada.... Może mi ktoś powie jak...
Podejrzewam że dlatego ze pierwszy raz kiedy biblioteka HAL wywołuję UG dla przeładowania rejestru prescallera, a drugi raz kiedy timer doliczy do odpowiedniej wartości. Ale pisze to nie patrząc na HAL-a. Tak ze po prostu przed właczeniem przerwania wyczyść flagę.
I2C w stmach jest skomplikowane, od tego jest odpowiednia nota aplikacyjna. Obsługa jest różna dla różnej wielkości danych 1,2 i więcej bajtów powodem jest to ze rejestr danych jest buforowany... Problematyczne jest również kasowanie odpowiednich flag...
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....
Dlaczego tak? Rzeczywiście sprawdziłem, że po wysłaniu jadnego bajtu przez SPI do slave'a flaga RXNE jest ustawiona w stan wysoki. Rozumiem, że SPI to po prostu rejestr przesuwny, ale jeśli tak jest to czy po prostu w rejestrze SPI do odczytu nie jest dostępny po prostu ostatnio bajt jaki przyszedł? Wciąż nie rozumiem ,jaki błąd popełniłem w moim kodzie....
Witajcie, mam problem i najprawdopodobniej wiem w czym on tkwi. Mianowicie, próbuję odpalić DHT11 na STM32F030 (magistrale pędzone 16MHz) i mam problem z generacją 1us. Próbowałem już wielu sposobów a mimo to jest problem. Możliwe również, że problem tkwi gdzieś indziej. Będę wdzięczny za pomoc. Kod: [syntax=c] #define delayUS_ASM(us) do {\ asm volatile...
Cześć. Mam pewien problem z SPI w trybie Full-duplex Transmisja polega na tym że wysyłam 6 bajtów ale odbieram tylko 1 bajt, Wygląda to tak że wysyłając pierwszy bajt jednocześnie muszę odczytać jeden. Pozostałych Slave nie wysyła, pojawia się na MISO stan H. (po MISO leci 6 bajtów) Jak poradzić sobie z dwiema flagami. W końcu doczytałem w dokumentacji...
Paczka dla STM32L4 ściągnięta parę dni temu: Czyli widać porządek w bibliotekach u STM-a. Jest nowa V1.9 dla F303 ale niestety jest zwalony zip tak że nie mogę sprawdzić. Ale np fla F7 jest tak jak dla F303. Widać zależy od paczki. Mają mix.
No to proszę wyjaśnijcie mi do czego służy flaga BUSY w tym rejestrze i dlaczego ona nigdy nie zmienia stanu?
jeśli flaga jest ustawiana po zakończeniu konwersji, to w trakcie pomiaru nie jest ona ustawiona, więc powinno być: while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == 0); // czekaj na koniec konwersji następnie odczyt, i tak w kółko…
Całość kodu jest dość spora:) Czekam na flagę na pewno, ale nawet jeżeli nie, to zauważ że pomiędzy wywolaniami odczytu adc są spore odcinki czasu. Ano, zazwyczaj w takich sytuacjach używam volatile, tyle że wtym przypadku optymalizacja jest wyłączona. Program w zasadzie skończony, a zajmuje 20kB ze 128, więc optymalizacji nie właczałem. Dodano po 4...
Miałem podobny problem z przerwaniem od RTC (przeliczanie/odświeżanie dnia/miesiąca/godziny itd do struktury). Po zainicjowaniu przerwań: [syntax=c]/* Enable the RTC 1s Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemp... = 4; NVIC_InitStructure.NVIC_IRQChannelSubPri... = 0; NVIC_InitStructure.NVIC_IRQChannelCmd...
Witam, przepraszam że nie odpisywałem ,ale musiałem zająć się chwilowo innym projektem. Ale wracając już do tego. Otóz właśnie nie do końca , trochu kolega źle zrozumiał mój poprzedni post ale to tylko dla tego że moja zdolność wypowiedzi w języku polskim jest tragiczna. Otóż już postaram się wytłumaczyć o co mi chodziło. Jeśli robię coś takiego( czyli...
oczywiście wspomogło, ta biblioteka jest małokorzystna (albo raczej korzystający z niej :D) a jeszcze pytanko małe , ustawiam sobie tą flagę: volatile bool flag_ADC ; w przerwaniu od ADC, i później w pętli głównej coś takiego: [syntax=cpp] if (flag_ADC == 1) {//GPIOC->ODR ^= GPIO_Pin_9; // ADC1ConvertedValue = ADC1->DR; sprintf(buf, "wart ADC: %u",...
SPI_DMATransmitReceiveCplt to stała - adres funkcji bo tak się nazywa funkcja która ma być wykonana. wartość hspi->hdmarx->XferCpltCallback po przypisaniu: dla optymalizacji Level2 wynik przypisania bez zmian tzn 0 dla optymalizacji Level1 wynik przypisania prawidłowy czyli SPI_DMATransmitReceiveCplt Co do 100% pewności błędu w kodzie to faktycznie...
Pochodzi od czujnika przerwania wiązki, drgań styków nie ma : ), znalazłem że czyszczenie flagi przerwania powinno być na początku, ale to niestety nie pomaga, i nadal pozostaje problem z wykrywaniem obu zbocz a nie tylko jednego Dodano po 10 Przeszukałem forum, kilka kursów po polsku i angielsku i ten kod z pierwszego postu jest identyczny jak te z...
Dzięki, nie doczytałem tego, że przez odczyt flaga też się kasuje. Sprawdziłem, oczekuje na EOC. Obawiam się tylko, że ten EOC to jest jeden i ten sam, dlatego ciągle czyta tylko z jednego kanału, a nie dwóch. Czegoś musi brakować...
Zapytałem się czy istnieje bit w rejestrze który wskaże mi koniec transmisji. Napisałeś, że jest, więc ja napisałem że flaga STOP działa jeśli I2C jest jako SLAVE. http://obrazki.elektroda.pl/5391711300_1... Chyba się nie zrozumieliśmy. P.S. Pojawił mi się przed chwilą problem. W pętli zapisuje coś po I2C, a potem odczytuje (jako 2 oddzielne...
Działa. Wystarczyło zmienić szukany znak z backslasha na '\n'. Ostatecznie modyfikacja wygląda nastepująco: if (character == '\n') { __fputc_('\n', stream); __fputc_('\r', stream); continue; } Dopracowałem rownież funkcje usart_put_char, zamiast wprowadzać delaya sprawdzam flage czy UART zakończył poprzednią transmisję....
No i niestety utknąłem. Mam jakieś dokumentacje przetłumaczone na polski i angielski, udało mi się zrobić backup aktualnej zawartości pamięci i umiem wrzucić nowy program, mam jakieś biblioteki (cmsis), mam dużo przykładów do różnych urządzeń peryferyjnych. Natomiast nie udało mi się w żaden sposób uruchomić debugowania a bez tego dalej nie ruszę. Nie...
Witam, podobny temat był już poruszany w poniższym wątku: [url=http://www.elektroda.pl/rtvforum/to... jednak u mnie problem jest nieco bardziej niepokojący. Używam HopeRF oraz STM32F103C8T6. W przeciwieństwie do opisanego tam przypadku mam aktywną antenę zewnętrzną podpiętą na długim kablu (3m) i położoną z dala od uC (min. 2...
Ale czy nie jest tak, że flaga BUSY jest ustawiana przy START i zerowana przy STOP? A zmiana kierunku transmisji wiąże się z powtórnym START bez poprzedzającego STOP, więc nic dziwnego, że się zawiesza. To trzeba jakoś inaczej rozwiązać, może w tym miejscu po prostu w ogóle to wywalić, a sprawdzanie BUSY na początku I2C_Start przenieść na zewnątrz tej...
zapewne tak: if (!flaga) yield() else { ... } 4\/3!! Nie, używałem zmiennej globalnej do której task 1 coś pisał, drugi ją czytał. Ale w momencie jak doszedł trzeci, także mogący te dane modyfikować, to odpuściłem sobie takie zabawy i zrobiłem to na zasadzie dwóch kolejek: task1 (pisze) -> task2 (czyta) albo jeśli jest potrzeba przetworzenia tych danych...
Oto cała funkcja [syntax=c]void sendString(int len,unsigned char* Data) { while(len--) { while(! (USART3->SR & USART_SR_TC) ); TickCnt = 1; // musi byc opoznienie dla modulu BM78 while (TickCnt); USART3->DR= *Data++; } }[/syntax] Wydawało mi sięże powodem mogło być RCC proca lub z jakiegoś powodu wadliwa konfiguracja USART. Zdebugowałem to zapisując...
Cześć, nie mogę dojść dlaczego wykorzystywany przeze mnie stm32f103rbt6 dostaje nieoczekiwany reset, widzę to po tym, gdy chociażby próbuję inkrementować zmienną i na podglądzie widzę, że po chwili znowu zaczyna liczyć od nowa, a nie jest jeszcze przepełniona. Dodatkowo sprawdziłem rejestry, które mogą być odpowiedzialne za reset i widzę, że flaga IWDGRST...
Witam, mam dziwny problem przy obsłudze przerwania od ADC End of Conversion. Gdy przetwornik ADC jest skonfigurowany do pracy z DMA procesor nie wchodzi do if`a gdzie jest zerowana flaga zakonczenia konwersji. Wchodzi jedynie do funkcji obslugi przerwania i po sprawdzeniu źródła przerwania wychodzi z niej. [syntax=c]void ADC1_2_IRQHandler ( void ) {...
stm32 flaga przerwać stm32 flaga licznik stm32 flaga przerwania
kontrolka wtrysku punto dekoder cyfrowy telewizji kablowej gniazdo wkręcane
obrotomierz skacze wskazówka amica pa4560a420
Kolektor słoneczny w układzie otwartym z pompą - zasady działania i wyzwania MAN TGL 12.180 - Niepracujące cylindry: Diagnostyka i rozwiązania