Domyślnie są wyłączone, a co robi z nimi SPL - to już tajemnica jej twórców. Rozsądni ludzie nie korzystają z bibliotek typu SPL, a jeśli korzystają - to nie używają nadmiarowych wywołań, które mają za zadanie wpisać do rejestru to samo, co już tam jest. Poprawne zainicjowanie UART bez SPL - to jakieś 4..5 linijek kodu. ClearITpendingBit jest bez sensu...
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,...
A do AVRlibc jakoś nikt nie zgłasza pretensji- dlaczego? Przecież też biblioteka. Z takich "kłótni" to się czasem można czegoś dowiedzieć. Np. gdy w końcu zacznę mysleć nad ARM- ostatecznie głupoty w C można pisać na dowolny procesor- to będę wiedział czego unikać. Mimo że jest książka oparta na tej bibliotece, jest jakiś kurs- też oparty na bibliotece-...
Olej te ich dziwaczne wywody na temat obliczania wartości do rejestru odpowiedzialnego za baudrate i po prostu wpisz do tego rejestru wartość równą PRĘDKOŚĆ_ZEGARA_UART / BAUDRATE. Te całe zabawy w część stałą i ułamkową właśnie do tego się sprowadzają, chyba ktoś kto pisał dokumentację miał nadmiar fantazji. Wg tegoż BRR powinien być równy 6666 czyli...
Zastanawiam się tylko po co sprawdzać to: [syntax=c]USART3 -> CR1 & USART_CR1_TCIE[/syntax] nie rozumiem powodu. Przecież to jest "This bit is set and cleared by software." Programista nie wie czy ustawił to przerwanie czy nie? Dodatkowo ten zapis: [syntax=c]if(( USART3 -> CR1 & USART_CR1_TCIE) && (USART3 -> SR & USART_SR_TC ))[/syntax] wygląda dość...
To nie rozwiązuje problemu. Jeśli masz do skonfigurowania kilkadziesiąt pinów to dalej stoisz w tym samym miejscu - tracisz dużo czasu na klepanie konfiguracji dla GPIO. To rób konfigurację CubeMX a dostęp do GPIUO na rejestrach. Często używam tej metody nie tylko dla GPIO ale i dla USART, SPI. Transmisję realizuję swoimi funkcjami a init robię przez...
Przerwania, w odróżnieniu od starych ARMów są w całości zarządzane przez ARM'a czyli CortexMx. W dokumentacji ARM znajdziesz opisy rejestrów i jako to działa. Każdy producent, taki jak ST zmienia znaczenie linii przerwań, definiując je po swojemu za wyjątkiem kilku pierwszych zarezerwowanych przez ARM. Ponadto, Cortex'y mają możliwość nadania przerwaniom...
Lepiej tak: void USART1_IRQHandler(void) { if (USART1->ISR & USART_ISR_TXE) { // jeśli zakończona wysyłka to coś... USART1->CR1 &= ~USART_CR1_TXEIE; // kasowanie flagi tak mi się wydaje że to to. } } A to jest źle każde przerwanie powinno wyglądać tak: [syntax=c] void XXXX_IRQHandler(void) { uint32_t isr; isr = XXX->ISR & XXX->IER; if( isr & flag)...
Na wypadek, gdybyś nie zauważył: przy takich deklaracjach i treści procedury konfiguracji DMA, jakie masz obecnie, do rejestru adresu pamięci DMA wpisujesz wartość bajtową odczytaną z pamięci ze zmiennej TxBuf, rozszerzoną zerami do 32 bitów, czyli wysyłasz przez UART zawartość tablicy wektorów wyjątków.
W Twoim działającym przykładzie do rejestru wpisujesz adres tablicy ("&" może być albo może go też nie być - również zadziała wg mnie), natomiast w przykładzie niedziałającym najpierw do funkcji podajesz adres tej tablicy, a potem jeszcze raz wyciągasz adres tego adresu - żeby zaspokoić Twoje potrzeby kompilator zmienną tab umieszcza gdzieś na stosie...
Prawdopodobnie nie włączyłeś przerwania odbioru danych w USART - bit RXNEIE w rejestrze CR1. A poza tym . oczekiwanie w procedurze obsługi przerwania to nie jest dobry pomysł, a właśnie to robisz. Masz poniżej tablicę do zainicjowania USART z przerwaniem odbioru w STM32F0 - adresy rejestrów i ich zawartości - wychodzi to sporo krócej niż przy użyciu...
Mam jakąś podstawowa bibliotekę z makrami peryferiów. Wiem że dane makro odpowiada bitowi w rejestrze statusowym i sprawdzam czy jest ustawione czy nie tą metodą zrobiłem już i2c i usart.
Chyba trzeba przestawić funkcję wybranych wyjść GPIO na linie interfejsu USART. Dla mnie mało czytelne są te gotowe biblioteki STM32. Sam wszystko robię na rejestrach.
Nie, no niewątpliwie masz rację, że jeśli chodzi o wydajność to szybciej jest bezpośrednio pisać po rejestrach ;) Tyle że tu chodzi zarówno o szybkość pojmowaną jako prędkość wykonywania kodu, jak i o prędkość pisania go - i tak musisz przeczytać manuala, a do tego jeszcze dokumentację biblioteki [; 4\/3!!
Próbuje napisać coś w stylu klasy ale stanąłem w miejscu. Klasa ma obsługiwać usart. W pliku H zadeklarowałem strukturę która przechowuje m.in. wskaźniki na funkcje, a w konstruktorze do tych wskaźników przypisuje funkcje. Plik h // usart type powinien być różny w zależności od obiektu który wywołał funkcję! //while (!(module->usart_type->SR & USART_SR_TXE));...
Czy pamiętałeś o włączeniu portów w ODPOWIEDNIM rejestrze APBENR? volatile nie ma nic wspólnego z AVR. Tego atrybutu używa się np. wtedy, kiedy zmienna modyfikowana przez obsługę przerwania jest testowana przez inny fragment kodu. Pokaż kod procedury przerwania, bo coś tam narozrabiałeś.
Przerwanie bym raczej właczył przed odpaleniem DMA. Odbiór przez DMA to raczej tylko w przypadku kiedy masz zawsze tę samą ilość danych. nie wiem jak w Twoim przypadku bo nic o tej "ramce" nie piszesz. Rozmiem że ma dokładnie 30 bajtów. Jezeli ma więcej lub mniej o choćby jeden bajt to Twój algorytm nie zadziała. - jezeli mniej np o 5 bajtów to odbierze...
a czy da się to zrobić w bibliotece SPL? Zadam złośliwe pytanie - a czy da się sprawdzić w dokumentacji tej biblioteki albo w jej kodzie źródłowym? Przecież na pewno będzie szybciej niż pytać o to na forum, zwłaszcza że SPL jest już martwe i teraz ludzie albo używają HALa albo rejestrów. Zresztą - wystarczyłoby pewnie otworzyć odpowiedni plik nagłówkowy,...
Zauważyłeś że coś jest nie tak? Owszem. To co napisałem Ci ja i BlueDraco zaraz przedemną. W ramach podpowiedzi, dodam, że wartość rejestru GPIOA->AFR[1] po tych dwóch linijkach to `7<<2*4`, a nie spodziewane przez Ciebie `(7<<2*4) | (7<<1*4) | stara_wartość_rejestru`. Zastanów się sam dlaczego.
(1 << 27) Tego nie będę rozszyfrowywał. I przy okazji nie mieszaj kodu HAL-a z rejestrami - w tch samych funkcjach - no chyba że dokładnie wiesz co te halowe robią na poziomie rejestrów (ja np poza kilkoma nie wiem i nie chce mi się grzebać) Procedurę masz opisaną w RM Reception using DMA DMA mode can be enabled for reception by setting the DMAR...
Spróbuj tak https://forbot.pl/forum/topic/20000-kurs...
Jak wygląda sprawa z przerwaniami? Tam zamiast przerwań są używane callbacki. To nie tak jest. Callbacki są całkiem do czego innego. W programie HALowym, to użytkownik pisze obsługę przerwań sprzętowych (tak jak w klasycznym podejściu "rejestrowym") a specyfiką HAL jest tylko to że dostarcza pewnych gotowców na obsługę przerwań. Przykładowo weźmy uart....
GPIOB->AFR Kod pisałem w oparciu do Reference Manual, oraz poradnik dostępny na tym forum Chyba nie do konca :) W poradniku masz napisane jak ustawic funkcje alternatywne. A w RM jak sobie skoczysz do dzialu GPIO i tam rejestry AFRL i H to masz tabelkę.
Jest to przejściówka "Konwerter CP2102 Niestety nie mam takiej pod ręką to nie obadam jaki ma pull up. Próbowałem z DATA rezystor 480ohm do 3.3V ale nie działało. To według mnie zdecydowanie zbyt niska oporność, jak na obciążenie fototranzystora w transoptorze. Spróbuj coś koło 4,7 - 15kΩ. Od biedy można by spróbować uruchomić wewnętrzny pull...
Zaczynam zabawę z stm32. Chciałbym obsłużyć USART przez przerwania. Większość przykładów opiera się na stdperiph lib, chciałbym uniknąć stosowania tej biblioteki. Używam tylko nagłówka stm32f10x. Wydaje się że włączyłem przerwanie przez NVIC_EnableIRQ(USART1_IRQn) bit w rejestrze USART1->CR1 również został ustawiony i w zasadzie na tym utknąłem. Prosiłbym...
Roznica jest duza. Rozwaz taki przypadek: [syntax=c] //Zakladam ze USART_CR1_TE = (1 << 0) oraz USART_CR1_UE = (1 << 1) USART2->CR1 |= USART_CR1_TE;// uruchomienie Tx //Teraz stan rejestru jest rowny 1 USART2->CR1 |= USART_CR1_UE;// uruchomienie USART2 //teraz stan rejestru jest rowny 3 ////////////////////////////////////////...
W HAL odbiór po USART jest napisany źle. Problem pojawia się, gdy w czasie nadawania (na przerwaniach) pojawią się dane do odbioru. Nie miałem siły aby HAL poprawiać. Najlepiej zrobić na rejestrach. HAL to działa jak Arduino. Jak uruchamia się jedną funkcję jest ok, jak kila to porażka. Na razie w I2C nie znalazłem błędów (niedomagań) a w USART, RTC,...
jeszcze nie zapomnij o samym USARC-ie, który może byc w stanie błedu - bo obsluga DMA była właczona, ale DMA nić nie zabierało. A jeśli UART jest w stanie błędu to jak go usunąć? Zmodyfikowałem funkcję do takiej postaci jak poniżej. Czyli wyłączałem również UART i konfigurowałem ponownie, ale nic to nie pomogło. Dodano po 1 W HALu jest taka funkcja...
Witam, Potrzebuję odebrać dane, które wysyłam za pomocą aplikacji bez bluetooth do uC STM32F4. Dane chcę odbierać przy pomocy przerwania usart. Dane z aplikacji wysyłane są w następującej postaci: Lx , x - liczba całkowita z zakresu <0;100>, np. L25, L100. Nie do końca wiem jak pobrać tą wartość chodzi mi w tym przykładzie o liczbę 25 , chcę ją...
To niech teraz też będzie samo =, bo OR nie ma tu najmniejszego sensu a tylko może zaszkodzić. Tak samo OR nie ma najmniejszego sensu przy inicjalizacji rejestrów USARTa, bo niby po co chcesz zachowywać stare wartości? A jak tam jest właśnie jakimś sposobem ZŁA wartość? Wpisz po prostu do dwóćh rejestrów dwie gotowe wartości i tyle, bez żadnych ORów....
Witam, Mam pytanie do znawców środowiska ECLIPSE. Czy jest możliwość aby podczas debugowania mieć podgląd rejestrów peryferiów (np. USART) w innej formie niż wartość HEX? Dokładniej mam na myśli rozpisanie każdego z bitów i interpretację go na poziomie pełnionej funkcji, coś na kształt tego co można spotkać w środowisku Keil. Z góry dziękuję za pomoc....
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy.
No fakt, w kodzie powyżej jest tyle skomplikowanych odwołań do rejestrów, że zrozumienie ich zajmie na pewno więcej czasu, niż zrozumienie 10 parametrów konfiguracji HAL i z 5 potrzebnych do tego samego funkcji HAL oraz ich argumentów. ;) Dodajmy do tego niezwykle długi i skomplikowany kod inicjowania UART na rejestrach: RS485_UART->BRR = (SYSCLK_FREQ...
Postanowiłem krok po kroku zobaczyć jak ta biblioteka wyznacza sobie zawartość rejestru BRR. Okazało się, że z poziomu pliku stm32f10x_rcc.c widać niepoprawną wartość stałej HSE_VALUE - zamiast 10 MHz była widoczna wartość zdefiniowana w pliku stm32f10x.h czyli 25 MHz, pomimo zdefiniowania 10 MHz w mainie. To jest o tyle dziwne, że preprocesor nie widzi...
Czasem Arduino do czegoś się przyda Dodano po 2 Możesz dać przykład takiej krytycznej czasowo operacji? Problem jest a raczej był związany z buforem nadawczym uarta. Mam funkcję: Blokuj tylko przerwania od UART.
Jechałem debugerem i nie wchodziło w SysTick_Handler... Kod poniżej: [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 72000000...
No ale jaki jest w ogóle sens tego kodu? 1. Najpierw czekasz na zmienną którą ustawiasz w tej samej funkcji i ponoć nie masz przerwań (choć w komentarzach coś niby o nich piszesz), to po co czekać? (nie mówiąc już o tym, że się nigdy nie doczekasz poza pierwszym razem [może], gdyż nigdzie tej zmiennej nie zerujesz przy braku problemów) 2. Potem kopiujesz...
14.7456 MHz * 5 = 73,728 MHz, a nie 72 MHz. Jeśli zdefiniowałeś częstotliwość niezgodną z rzeczywistą to prędkość USARTA jest źle wyliczona przez funkcje, która to robi. W tym przypadku nie ma znaczenia czy korzystasz z biblioteki czy wpisujesz bezpośrednio do rejestru. Przetaktowanie mikrokontrolera to inna sprawa. Nie przekraczaj 72MHz.
Dokumentacja: (lub wykorzystywać inną funkcję alternatywną z ową nóżką związaną) Tak, za wyłączenie tych bajerów odpowiada rejestr USART_CRx. Domyślne są wyłączone, więc nie ma się co przejmować. Można odpalić samo RxTx.
Tak, jest wszystko włączone, pytanie czy wszystko w rejestrach timera jest jak trzeba. Chciałbym wykorzystać funkcje API dostarczone przez STMa, sprawdziły się dla innych peryferii (SPI, USART, GPIO, DMA...) jednak nie ma nigdzie przykładu konfiguracji timera w trybie compare.
Wiem , że stary temat, ale czemu koledzy nie używają mechanizmu wyszukiwania znaku w transmisji, która jest sprzętowa....opis w DS dotyczy Modbus, ale działa w normalnym trybie USART. Wpisuje się w miejsce rejestru ADD znacznik np. końca linii - 0x0D, a potem uruchamiamy przerwanie od Character Match. Druga możliwość to przerwanie po np.100 bitach na...
Witam ponownie tym razem próbuję uruchomić przerwanie od TIM7 w mikro STM32 F303VC6 na płytce Discovery F3. Napisałem konfiguracje NVIC i TIM7 po czym uruchomiłem całość i owszem to co jest w funkcji obsługi przerwania jest wykonywane ale mam wrażenie, że pełną częstotliwością a nie co 1 sekundę tj ustawiłem. Prosiłbym o jakieś wskazówki bo pierwszy...
Teraz część DMA wygląda tak CNDTR
Biblioteka STDPeriph jest martwa, więc lepiej ją zostaw i zainteresuj się HAL i CubeMx. Gdy program uruchamiam krokowo i jestem w petli for to dane się wysyłają. Za szybko ta pętla działa i dane za szybko są "wypychane". Należy odczekiwać odpowiedni czas za każdym razem. Regułą jest uprzednie sprawdzanie rejestru statusowego przed zapisem do rejestru/odczytem...
Dzień dobry, Zacząłem naukę STM32 i mam problem z USART2. Chciałem się połączyć z hyperterminalem. Od strony terminala wszystko działa poprawnie (sprawdzone przez zwarcie tx i rx). Od strony stm-a wygląda to tak, że kiedy chcę odebrać jakiś znak, to program wisi na fladze oczekującej na odebranie znaku. Natomiast kiedy chcę wysyłać, to nic się nie dzieje...
odnośnie wyłączenia i ponownego włączenia przerwania funkcjami: NVIC_EnableIRQ(IRQn_Type IRQn), NVIC_DisableIRQ(IRQn_Type IRQn) czy podczas ponownego włączenia nie trzeba znów wpisać odpowiednich wartości do rejestrów konfiguracyjnych? Ponieważ ostatnio próba wyłączenia i ponownego włączenia przerwania bez ponownego wpisu do rejestrów konfiguracyjnych...
Właśnie problem nie leży w kodzie Chciałeś chyba napisać, że problem NA PEWNO leży w kodzie - jak zresztą zawsze. No chyba że zaraz zaczniesz podejrzewać błąd w kompilatorze i błędy w krzemie. Błąd wynika zapewne z czegoś na styl ustawianie zegarów lub (nie)zerowanie rejestrów. 4\/3!!
Witajcie, Potrzebuję pomocy przy STM32F429. Moje pierwsze podejście do rozwiązania docelowego zadania było oparte o biblioteki HAL i była to moja pierwsza styczność z STM. Pomysł fajnie się spisywał, ale później miałem jakąś totalną masakrę, żeby zaimplementować jakiekolwiek klasy. Wyszło tak, że przerzuciłem się na rejestry i nie wygląda to najgorzej....
GPIO rejestry nie obsługują DMA, DMA dziala z SPIx, I2Cx, USARTx, TIMx, SDIO, ADC, DAC, USB, DCMI w sumie wszystko co pełni funkcje alternatywne ale nie GPIO RM 009 DMA table 21, channel 0 ADC1 ( da sie zrobić DMA z ADC_DR do pamięci)
Nie wiem, jaki Ty tu konflikt widzisz. Każda linia portu jest ustawiania oddzielnie, z każdą możesz zrobić, co chcesz. Chodzi o to, że zgodnie z dokumentacją jeśli kilka układów współdzieli ten sam pin tylko jeden z tych układów może być włączony poprzez rejestr RCC. Tak wynika z dokumentacji (http://www.st.com/internet/com/TECHNICA...
usart stm32 stm32 usart rejestr stm32
ipconfig uprawnienia sieci tny264 napięcie p0087 peugeot
foxit reader pralka gorenje opinie
Electrolux suszarka EH0 bez pompy ciepła – kod błędu, zasilanie, diagnostyka Samsung Galaxy Tab 3 10.1 P5210 not charging – charging port, battery, PMIC fault diagnosis