https://obrazki.elektroda.pl/9151185000_... Autor poniższego zestawienia jest inżynierem i konsultantem wsparcia dla systemów wbudowanych. W swojej karierze poznał on szereg różnych architektur mikrokontrolerów, różniących się wydajnością, wyborem peryferii, poborem zasilania etc. Wybór odpowiedniego układu stanowi zawsze o sukcesie...
https://obrazki.elektroda.pl/9151185000_... Druga część artykułu o najtańszych nowych mikrokontrolerach z roku 2017. Ekosystem developerski Środowisko developerskie mikrokontrolera ma ogromny wpływ na jakość pracy z nim i w konsekwencji - na produktywność. Na to składają się różne czynniki – jakość IDE, dostępne biblioteki, płytki...
Właśnie w datasheecie, 157 strona dokładnie jest napisane, że rejestr dzieli się na dwie części. Bity 0-15 służą do wysterowania na logiczne 1 pinów od 0 do 15 poprzez wstawienie tam wartości logicznej 1, oraz bity 16-31 służą do wysterowania logicznie na 0 pinów od 0 do 15 także poprzez wstawienie tam wartości logicznej 1. https://obrazki.elektroda.pl/3431699300_...
Witam, męczę się z prawidłowym ustawieniem tego modułu do odebrania pakietu danych, który jest prawie 2x większy niż pojemność FIFO. Kombinuję na wszelkie sposoby, aby ze wskazanego DIO tego modułu odebrać właściwe przerwanie i je obsłużyć w callbacku EXTI w STM32. Nie mam większego problemu z odebraniem danych z pierwszej raty tego pakietu w locie,...
Skorzystaj z rejestru GPIO->BSRR
1. Rejestry BSRR i BRR wymyślono po to, żeby NIE używać operacji logicznych na portach, a Ty piszesz np.: LCD_PORT->BSRRL |= (1<<DB4); - kompletnie bez sensu 2. Nie miałem nigdy problemu ze sterowaniem wyświetlaczy 5V zasilanych z 5V z STM32 zasilnych z 3.3,a nawe z 3.0 V. Szukaj błędu w połączeniach lub definicjach/konfiguracji portów. Sprawdź...
"Rejestry GPIO" to nic innego jak adresy w pamięci. Operuj adresami, a nie nazwami. Makra najprawdopodobniej będziesz musiał napisać sobie sam.
ODR steruje wtedy pullupem jeśli taki tryb działania wybierzesz. Co do funkcji działających na portach, to - jak pisałem wyżej - dorobienie takiej która robi konfigurację dla więcej niż jednego pinu to 2 linijki, a taka która wystawia wartość czy ją odczytuje jest bezsensu, bo od tego masz rejestry, więc czemu nie odczytać ich wprost (ewentualnie funkcja...
GPIOx_BRR i GPIOx_BSRR są tylko do zapisu a nie odczytu - GPIOx_BRR służy do kasowania stanu portu poprzez ustawienie odpowiedniego bitu. GPIOx_BSRR służy do kasowania i ustawiania portów. Oba rejestry dają funkcjonalność atomowego dostępu do poszczególnych bitów portów. Rejestr GPIOx_ODR jest standardowym rejestrem do odczytu i zapisu do portów.
Czy po uruchomieniu/restarcie STM32 porty ustawiają się od razu na domyślne wartości rejestrów ? Tak.
Zacznij od zrozumienia przesunięć bitowych, potem poczytaj o portach GPIO w STM32 (rejestr MODER działa ciut inaczej niż DDR w AVR). No i jeszcze timery - też całkiem różne od tych w AVR.
Ja u siebie konfigurację PIN'ow rozwiązałem stosując makro (jeszcze jedna alternatywa dla konfiguracji I/O). Przykładowe definicje dla portów SPI (ale SPI1, więc będą trochę inne od SPI3) pokazują, które rejestry/opcje trzeba uwzględnić podczas konfiguracji pinów: [syntax=c] //--------------------------------------...
Zobacz co masz ustawione w rejestrze 0x05 na bitach LNA_PORT_SEL oraz LNA_ICSEL_BIT. Tutaj możesz też podejrzeć jak skonfigurować rejestry https://github.com/plawnik/rda5807_stm32
dioda LED na PC8 razno miga I tak ma być. Ta funkcjonalność dotyczy tylko blokowania rejestrów konfiguracyjnych danego pinu, czyli dokładniej rejestrów GPIOx_MODER, GPIOx_OTYPER, GPIOx_OSPEEDR, GPIOx_PUPDR, GPIOx_AFRL i GPIOx_AFRH. Po prostu zablokowana jest możliwość przeprogramowania wejścia na wyjście czy odwrotnie, przełączenia na inną funkcję...
GPIOC->CRH ^= 5<<16; Gorzej być nie może. Najpierw wyzeruj całe pole. Potem OR z wartością docelową. W pliku z rejestrami masz odpowiednie makra. Warto sobie z biegiem czasu tworzyć dodatkowe opisujące pola wielobitowe. Konfiguracja portów jest pod tym względem najgorsza.
Jak to przyśpieszyć? - używać operacji na rejestrach, a nie SPL'a.
problem się robi, gdy piny będą należały do różnych portów. Z jednego portu. Jeśli chcesz tylko ustawiać to masz rejestry OUTSET, zerować OUTCLR, zmieniać OUTTGL, w jednej atomowej operacji zmienić np z 011 (4) na 100(5). Niedopuszczalne są stany przejściowe 000 czy 111 Znany elektronice problem hazardów, na co (w innych obszarach) jedną z odpowiedzi...
Zanim zacznę wyważać drzwi chciałbym sprawdzić czy przypadkiem nie są już otwarte. Czy kojarzycie może generator kodu w stylu CubeMx z tym, że kod generowany byłby w oparciu o rejestry a nie HAL/LL. Generalnie zależy mi tylko na GPIO, czyli wizualnie konfiguruję porty i dostaję gotową wstawkę operującą bezpośrednio na rejestrach.
Trzeba przyznać, że przykład ten nie jest stworzony do takiej akurat modyfikacji. Jeśli obydwa piny obsługiwane są przez ten sam rejestr CR (CRL albo CRH) - czyli gdy obydwie diody masz na pinach od 0 do 15 lub od 16 do 32 tego samego portu - to można zrobić tak: LED_CR_x = m_GPIO_MODE_CNF(LED_pin_0, GPIO_CRx_MODE_OUT_10M_value, GPIO_CRx_CNF_OUT_PP_value)...
Najlepiej przeczytać dokumentację i wyczytać w niej, że po starcie procesora niemal wszystkie bity w rejestrach konfiguracyjnych mają wartość 0 i nie ma potrzeby ich zerowania, a konfiguracja portów w 95% da się zrobić przez proste podstawienia, bez operacji logicznych na rejestrach.
Dodajmy, że jak już ktoś musi zmieniać stan portu programowo, to w STM32 służą do tego raczej rejestry BSRR i BRR, a w innych uC albo analogiczne rejestry pod innymi nazwami (np. FIOSET, FIOCLR w LPC17xx) albo zapisu maskowany (np. w LPC11xx). W każdym razie nie robi się tego przez programowe operacje logiczne na portach.
Rezystor pewnie będzie zależeć od konfiguracji portu wyjściowego, czyli od wartości wpisanej do rejestru GPIOx_OSPEEDR. Tam można ustawić szybkość portu na 00-low, 01-medium, 10-high i 11-very high speed, i dla każdego ustawienia wartość tego rezystora może być inna. Teraz trochę poteoryzuję! W dataseet https://obrazki.elektroda.pl/3372420200_...
Ale dlaczego instrukcja PIN_x_y = z miałaby sterować konkretnym pinem? Proszę o definicję. Bo PIN_x_y jest makrem operującym bezpośrednio na pinach za pomocą bit-bandingu, czyli czegoś o czym użytkownicy biblioteki nie wiedzą i raczej się nie dowiedzą, bo w bibliotece nie ma takich możliwości, a po co szukać więcej info niż w manualu do biblioteki?...
To szkoda. Czyli jednak lepiej poprowadzić ścieżki z jednego poru... Wtedy jedna instrukcją mogę ustawić wszystkie 16 bitów, chyba? (btw. czemu nie zrobili wszystkich 16bitów koło siebie na obudowie...?). Skąd wynika różnica aż kilku cykli? I jeszcze ciekawiej skąd wynika to "około (~)? To nie wiadomo dokładnie ile zajmie? Wydawało mi się, że przypisanie...
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...
Z tego co zrozumiałem daje możliwość manipulacji bitami w RAM i peryferiach, np portach. O ile manipulacja pojedyńczymi bitami w pamięci za pomocą jednego rozkazu jest dość pożyteczna i szybka, to jakie korzyści to daje w np. ustawianiu portów? O ile zrozumiełem manuala ;) to w zasadzie dokładnie to samo umożliwiają rejestry GPIOx_BSRR i GPIOx_BRR....
Jeżeli chcesz do szyny wykorzystać np. połówkę portu (8 bitów) to najszybciej BSRR. Najszybciej wtedy wykonywać 8-bitowy zapis do rejestru ODR. 4\/3!!
IMHO - nie warto, bo są beznadziejne. W bardziej skomplikowanych kwestiach to jest parada wyrażeń typu if () { ... } else if () {...} else if () {...} ... . Warto pooglądać kod tej biblioteki, bo z optymalnością to on zbyt dużo nie ma wspólnego... Co kto woli... Do skonfigurowania i/o można napisać sobie baaaaaardzo proste makra, które zajmują o wiele...
Witam, To w zasadzie mój początek drogi z STM32, więc po pomyślnym ustawieniu portów GPIO zabrałem się za SysTick. Oczywiście znalazłem, że w bibliotekach stm'a istnieje taka funkcja jak [syntax=c]SysTick_Config (SystemCoreClock/1000); // Configure the SYSTICK[/syntax] i jak najbardziej to działa. Chciałbym jednak się wgłębić w rejestry tego mikrokontrolera,...
ARM7 nie jest najlepszym wyborem do przełączania stanu na porcie, nie da się to tego zrobić w sposób który podałeś. Najpierw trzeba sprawdzić jaki jest obecny stan, następnie zmienić odpowiedni rejestr. ATmegę możesz sprawdzić w symulatorze ale pomijając instrukcję na wykonanie pętli to osiągniesz na porcie fclk/2.
Sygnał REF_CLK powinien być generowany przez cały czas, gdy chcesz mieć aktywny interfejs Ethernet. Najpierw konfigurujesz układ MAC (zegary, typ interfejsu MII/RMII), następnie aktywujesz taktowanie PHY za pomocą REF_CLK. Gdy zamienisz kolejność (najpierw taktowanie PHY, później ustawiasz w STM interfejs MII/RMII) to program zawiesi się w pętli: [syntax=c]...
jeśli chodzi o porty to mikrokontroler AVR potrafi wysłac/pobrac 32 dane z szybkością zegara, czyli np. 16MHz chyba nie 32, tylko 8, bo porty w AVR są 8bitowe. Porty w STM32 są 16-bitowe. Swoją drogą - DMA może obsługiwać transfery z pamięci do pamięci. Jeśli jako źródło dasz rejestr wejściowy portu, a jako cel jakiś obszar pamięci (z postinkrementacją),...
Witam. Przeglądając dokumentację uC STM32F10x natrafiłem na rejestr: AFIO_EVCR (Event control register) Zastanawia mnie do czego on dokładnie służy. Według dokumentacji jest to rejestr kontrolny zdarzeń (lub jakoś podobnie). Ustawia się w nim bit "EVOE", oraz poszczególne porty i piny. Czy ma on jakiś związek z przerwaniami EXTI? Dlaczego znajduje się...
Jakbyś nie zauważył to inna rodzina procesorów ;-) W użyciu jest lepsze. Inaczej po co w tamtych procesorach stosowano by bit band? Albert W STM32 też taki zapis można wykonać jedną instrukcją. Mimo, że są oddzielne rejestry do ustawiania i kasowania bitów. Porty są 16bitowe a jeden z tych rejestrów jest 32bitowy. Zapis do starszych 16b powoduje kasowanie...
Tak, z tym, że LED = 1 chyba jest trochę czytelniejsze. No i używając ODR nie dziabrasz w dwóch rejestrach/bitach tylko w jednym. No i co jakbyś miał coś ustawione na Porcie ? wtedy już musisz sprawdzać co było wcześniej a przy bb Cie to nie obchodzi.
Niestety nic to nie dało Sprawdzałem zarówno z GPIO->ODR oraz GPIO->BSRR a po tym while(1); Dodaje załącznik w którym widać kolejne kroki debagu. Dodałem trzy linie ustawiające wybrane bity w trzech różnych rejestrach GPIOB Sprawdziłem adresy rejestrów GPIOB i zgadza się, zresztą widać w oknie Disassembly że pobiera adres bazowy 40010C00 na grupę rejestrów...
I dobrze mówisz: Sprawa wygląda inaczej, bo podstawą jest tutaj JTAG i z tej racji przeraża to czasem miłośników AVRa. To właśnie jest to czego najbardziej się do tej pory obawiałem. Powiem szczerze: byłem święcie przekonany, że dla każdego producenta ARM będę musiał posiadać osobny programator. Polałeś miód na moje uszy. :) Jeżeli rzeczywiście jest...
Dziękuję bardzo Rozumiem, że pierwszy kod całkowicie zastępuję inicjalizację SPI (łącznie z włączeniem taktowania portu oraz taktowania SPI)? WYbacz za pytanie ale nie operowałem wcześniej na rejestrach w STM32. Próbowałem uruchomić ten kod (usunąłem tylko asemblerowe instrukcje "nop", bo Keil zgłaszał brak średnika). Odczytywałem później przy pomocy...
O popularności mikrokontrolerów STM32 wśród hobbystów i pasjonatów nikogo nie trzeba przekonywać. Firma ST taranem wbiła się w społeczność mikrokontrolerową rozdając płytki Discovery i Nucleo. Wraz z rosnącym zainteresowaniem STMami pojawiło się kilka (polskojęzycznych) książek oraz kursów/poradników na ich temat. Po co więc kolejny? Istniejące poradniki...
Hmmm... Mam wrażenie, że dobrze wiecie gdzie jest błąd takiego zachowania magistrali, tylko jest to tak trywialne, że nie chcecie zdradzić. :). Sprawdziłem nawet z domyślnymi wartościami rejestrów z reference manuala: [syntax=c] I2C_PORT->OTYPER = 0x0; I2C_PORT->MODER = 0x280; I2C_PORT->PUPDR = 0x100; I2C_PORT->OSPEEDR = 0xC0; I2C_PORT->AFR[0] = 0x0;...
Aby uruchomić coś takiego na timerze trzeba ustawic kilka rejestrow CCMR1 - wybierasz tryb pracy i kierunek portów OCx CCER - aktywujesz daną końcówkę OCx CR1 - kilka podstawowych parametrow pracy oraz wlasciwa aktywacja zliczania odczywiscie do tego dochodzi jeszcze ustawienie samego okresu [; przypuszczam ze dla twojego trybu pracy znajduje sie on...
Problem mam w zrozumieniu jak liczą się linie EXTI_Linex, która odpowiada danemu portowi. Przykładowo przerwania obsługiwane przez void EXTI0_IRQHandler(void) obsługują piny PA0, PB0, PC0, PD0, PE0 z tym że nie jest chyba tak iż przerwania na tych pinach obsługuje linia EXTI_Line0 bo jak rozróżnić który pin wywołał przerwanie. Piny "0" ze wszystkich...
A skonfigurowałeś poprawnie piny, włączyłeś porty GPIO oraz AFIO? No i po co ruszasz rejestr od I2S? Po co odczytujesz na początku DR? Odczytaj wszystkie flagi statusowe i zobacz czy nie włącza się jakiś error. 4\/3!!
Akurat nie, bo w portach z maskowanym dostępem operacja logiczna jest wykonywana w samym rejestrze portu, a nie w sterowniku szyny, więc nie ma tu r-m-w. Nigdzie nie pisałem, że BitBand jest zły. Napisałem tylko, że niekoniecznie nadaje się do zerowania znaczników przerwań w rejestrach peryferiali, tym bardziej, że ten sam efekt można osiągnąć przez...
http://obrazki.elektroda.pl/5020904800_1... Witam Tym razem chciałbym zaprezentować programowy projekt zegarka i datownika uruchomionego na sprzęcie: STM32F4Discovery oraz LCD TFT DEM240320E TMH-PW-N(A-Touch) na sterowniku Renesas R61580 (kupiony swego czasu w TME. Obecnie nie mają na stanie, można próbować kupić go tutaj:http://www.soselectronic.pl/?str=3...
Jest trochę mikrokontrolerów, które pozwalają na połączenie poprzez USB, trzeba się temu przyjrzeć - jakieś ATmegi chyba obsłużą tylko najwolniejszy tryb, i to nie wszystkie, STM32 mogą więcej. Ale najpierw trzeba dużo poczytać z opisu tego AD7768, bo on ma jakiś złożony protokół (i to niekoniecznie SPI - może poprzez SPI ustawia się tryb pracy, a dane...
Witam po dłuższej przerwie. Udało się zrobić także obsługę przycisku, ale do tej pory ustawiane miałem np. piny wyjściowe dla LEDów na jednym porcie, a przycisk na innym. Jaj więc zrobić,żeby ustawić piny We (Switch) i Wy (LED) na jednym porcie? Ale w czym problem? Każdy pin może pełnić dowolną funkcję. w przypadku wyjść masz do dyspozycji nie tylko...
W projekcie mam folder arch (Zynq, STM32, LPC1xxx i itp..), i tylko makrem załatwiam podmianę sprzętu i trach wszystko działa :) Możesz coś bliżej a propos tego makra? Ja u siebie zastosowałem makra w plikach programu w miejscach gdzie odwołują się one do sprzętu, a w plikach lokalnych definicji mam pod makra podstawione odwołania już do konkretnych...
Moja rada na problemy: zrezygnuj ze sprzętowego interfejsu SPI w STM32. Ten interfejs "działa", ale wg mnie ma bugi które w pewnych wypadkach uniemożliwiają poprawną wymianę danych. Po prostu napisz procedury które będą sterowały portami bezpośrednio. Ten interfejs działa poprawnie. zielik Zrób inicjacje i obsługę SPI normalnie na rejestrach.
Zazwyczaj najwygodniej uczyć się języka C na desktopie, czyli swoim PC-cie. Programując STM32 lub AVR-ki używa się języka w ten sam sposób, ale zwykle nie mamy dostępu do pewnych bibliotek standardowych, które na desktopie są od razu, bo komputer ma monitor, klawiaturę, dysk twardy itp.. W mikrokontrolerach tego nie mamy, więc użycie printf(), getch()...
stm32 rejestry programowanie stm32 rejestry rejestry atmega8
schemat migaczy szczotka elektryczna wykryto przekroczenie limitu czasu
Samsung SCM-7450 – typ lasera, głowica optyczna SOH-A1, zamienniki KSS-213C, SF-P101N Immergas - Przyczyny Gaśnięcia Płomienia w Kotle