Skorzystaj z rejestru GPIO->BSRR
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.
"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...
Zmiana portu z PA8 na PA4
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.
Czy po uruchomieniu/restarcie STM32 porty ustawiają się od razu na domyślne wartości rejestrów ? Tak.
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ź...
Do wyprowadzeń CAN L i CAN H nie można podłączać nic oprócz rezystorów terminujących, sygnalizację za pomocą diod LED można zrobić odczytując programowo znaczniki odebrania ramki CAN, każda transmisja na magistrali CAN uruchamia flagi w rejestrach procesora. Programowo można uruchamiać przez port procesora diody Led w zależności o odebranych danych,
Jak to przyśpieszyć? - używać operacji na rejestrach, a nie SPL'a.
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.
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.
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.
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] //--------------------------------------...
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.
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)...
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ę...
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...
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...
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_...
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!!
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,...
Witam, Po paru dniach ślęczenia udało mi się - tak myślę :) , skonfigurować rcc na 72MHz. : void rcc_init(void) //RCC init włączający procesor na 72MHz { RCC->CR|=0x1; //wlacz HSI wewnętrzny oscylator, włączany jako pierwszy po zasilaniu. while(!(RCC->CR&0x2)); //poczekaj na HSI sprawdza czy HSI się włączyło RCC->CFGR|=(0xF<<18);...
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....
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?...
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ą),...
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]...
Błędów całe mnóstwo. 1. Nie robi się przerwań od przycisków. Zrób przerwanie timera np. 100 Hz, w nim sprawdzaj stany przycisków. 2. __attribute__ ((interrupt)) jest zbędne. 3. Znacznik przerwania kasuje się na początku, nie na końcu obsługi przerwania. 4. Do zmiany stanu linii portów służą rejestry BSRR- jeden zapis zmienia stany dowolnie wybranych...
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.
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...
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...
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.
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ę...
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...
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...
dziechu: nie sugerujesz chyba, że 32-bitowy uC "nie pracuje zaraz po włączeniu"? Fakt, w ATmega wystarczy zapisać DDR, a potem już można zmieniać PORT i dioda miga - prościzna, tylko dwa rejestry. Dla porównania: w STM32 żeby zamigać diodą trzeba zapisać coś do AHBENR, potem do MODER, a potem modyfikować ODR - po prostu koszmar - aż trzy rejestry! W...
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...
Tak sie zastanowiłem o czym piszesz, czy masz na myśli to że w tych wymienionych przez ciebie układach np dostęp do portów i ich konfiguracja jest w każdym typie taka sama? Czy to o to chodzi że np w f103 są inne rejestry niż np f411 do konfiguracji portów? Ja się np zraziłem do G0 czytając o czymś takim jak DMAMUX. Opis jest tak pokrętny że zupełnie...
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...
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...
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...
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...
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...
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...
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...
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...
Witam Zmagam się z akcelerometrem ADXL345 + STM32F103. Połączenie po SPI. Otrzymuję na wyjściu wartość przyśpieszenia w kodzie U2. Zapisana jest na 13 bitach, w dwóch rejestrach 8 bitowych. Po odebraniu najbardziej znaczące przesuwam << 8 i łączę z mniej znaczącymi. Problem polega na tym, że wciąż otrzymuję wartość dodatnią, mimo że na najbardziej...
Sprawdzałem, Piszą coś o niemożności wysłania sygnału start, nic na ten temat. Tak jest tylko w przypadku i2c 1. Czy to może mieć coś wspólnego z wartościami rejestrów GPIOB przed włączeniem portów. Bo zanim włączę taktowanie GPIO, Wg odczytanej wartości ODR port B Piny 7 i 9 maja wartości 1. Poza tym linia SDA jest ściągana do masy, co dziwne.
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()...
Myślałem o DMA, jak timer generujący wywoła transfer DMA, on zapisze bit na GPIO, ale DMA nie może operować na 1 bicie, tylko na co najmniej połowie portu, co nie wchodzi w grę. Jest bit-banding - wtedy operujesz na 32-bitowej wartości reprezentującej jeden bit w rejestrze - np. jako źródło GPIOx->IDR, a jako cel - GPIOx->ODR.
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...
Malina zero bez wifi kosztuje 26zł na botlandzie A więc po co wcześniej przedstawiałeś te "wypasione" wersje z wifi/ethernet/bt? W czym jest lepsza Rasp Zero od Arduino z punktu widzenia laika? Poza tym nikt nie karze korzystać z pulpitu. Aplikacje można pisać własne. Sterowniki też. Pisanie aplikacji na gołe CPU przez kogoś kto zaczyna? Słaby pomysł....
A może początkujący nie chce wpadać w otchłań konfiguracji PLL i dzielników Każdy współczesny uC, czy to 8-, czy 32- bitowy startuje i bez tego. W wielu projektach z STM32 nie konfigurowałem zegarów, bo nie było takiej potrzeby - domyślny 8, 4 lub 16 MHz wystarczał. BluePill (Cortex M3), ma podobną cenę, ale "na dzień dobry" nie działa w nim port USB...
Ale chaos. Najpierw korzystasz z biblioteki od STM32, a później zapisujesz bezpośrednio do rejestrów? Zdecyduj się na jedno podejście. Dziwnie masz ta funkcję pull low napisaną. Ja zawsze robię writebit która zajmuje cały slot czasowy na jeden bit. Na 1Wire robiąc pull low musisz ustawić port jako wyjście i ustawić go na poziom niski. Aby go wyłączyć...
Kompatybilność jest żadna, każdy z tych uC ma zupełnie inne rejestry peryferiów, więc program napisany na ARM7 nie będzie działał na M3 itp. Moim zdaniem najlepszy zestaw będzie z procesorem STM32, ale niekoniecznie butterfly, ponieważ ma on mało peryferiów i nie wszystkie porty wyprowadzone na zewnątrz. W Kamami jest zestaw ZL30ARM, jak nie to na allegro...
W manualu jest tylko wykaz jaka funkcja do jakiego portu może być przypisana. A mi chodzi o konkretny kod, jak go skleić. Chyba masz tylko datasheet do klocka. Freddiemu chodzi o RM0008 w którym wszystko o co pytasz jest opisane. Kodu nie trzeba podawać bo zapis jest w postaci prawie że takiej jak są opisane rejestry w manualu. Zaraz nad sekcją GPIO...
Napisz ten program porządnie (nikt nie będzie dochodził do tego jak rozszyfrować Twoją konfigurację GPIO i konfigurację SPI), rozdziel inicjalizację i wysyłanie, załóż nowy temat i wrzuć tam wszystko, to się pomyśli. Możesz wrzucić program który nie działa, byle był napisany "z pomysłem", czyli wszystko na rejestrach albo wszystko na bibliotece, tylko...
A na czym polega różnica pomiędzy pisaniem kodu np. na STM32F4 i STM32F3, wynikająca z tego, że mamy w tych rodzinach różne rdzenie? Zrobiłem parę projektów przenośnych pomiędzy kilkoma seriami STM32 i jedyne różnice pomiędzy modułami specyficznymi dla serii polegały na szczegółach konfiguracji peryferiali - DMA i SPI. W F1 chora jest koncepcja "remap",...
1. Plik core_cm3.h wchodzi w skład CMSIS, czyli biblioteki stworzonej przez ARM. Tamten kod ma sens (; 2. Wpisując ODR zamieniasz CAŁY port, przypisując mu nową wartość. Korzystając z BSR czy BSRR możesz po prostu właczyć/wyłączyć dany bit, nie zmieniając wartości pozostałych (które w tym przypadku w ogóle Cię nie obchodzą). Podobną funkcjonalność można...
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.
Wcześniej używałem Keila do wgrywania programu do płytki, ale ponieważ nie rozumiałem co się tam dzieje, przeszedłem na Eclipse i w między czasie wyrzuciłem ten program z komputera. Być Może keil zostawił jakieś śmieci w systemie, przez co płytka działała? W sumie mało istotne. W tej chwili program nie działa. Znalazłem tylko jeden rejestr odpowiedzialny...
1. Datasheet w STM32 to nie to samo co datasheet dla AtMegi (jeśli się akurat nimi interesowałeś wcześniej). Potrzebny Ci reference manual dla STM32 - ze strony ST oczywiście. 2. Te trzy kroki o których piszesz wystarczą, ale pod warunkiem, że masz sprawny startup, tablicę wektorów, skrypt linkera oraz poprawnie kompilujesz całość. 3. Odpowiedzią wciąż...
A teraz to samo AVR Nie ma to jak porównywać kod pracujący bezpośrednio na rejestrach do kodu z wyższej warstwy abstrakcji i to w dodatku błędnego. Poniżej jest jak to można zrobić na w tym wypadku stm32. [syntax=c] // Przypięcie zegara do AHB1 RCC->AHB1ENR |= RCC_AHB1Periph_GPIOD; // Inicjalizacja portu GPIO GPIOD->MODER |= GPIO_Mode_OUT; GPIOD->OSPEEDR...
Nigdy nic nie złamałem na STM32F4DISCOVERY, a korzystam z ST-Link niemal codziennie. Wszystkie sygnały wyprowadzone na goldpiny (2.54mm) przy krawędzi płytki. CoIDE to jest właśnie środowisko typu pobierasz, klikasz i działa :) Jako początkujący też się na to zdecydowałem. Co do SAMD... Rdzeń CM0+(at)48MHz, to jednak 3. liga względem CM4(at)168+MHz....
No i przecież o to chodzi. Jeśli ustawiony jest bit od zerowania to wyzeruje port, jeśli od ustawiania to ustawi, a jeśli obydwa to też ustawi. Przykładowo [syntax=c]ODR => 0000 0000 0000 1111 BSRR = 1111 1111 0000 0000 1010 1010 0000 0000 ODR => 1010 1010 0000 1111 BSRR = 1111 1111 0000 0000 0101 0101 0000 0000 ODR => 0101 0101 0000 1111[/syntax]
W funkcji lcdWait ustawiam najpierw port danych w tryb wejściowy, a potem na koniec z powrotem ustawiam w tryb wyjściowy. Tak samo było w tej funkcji dla ATMegi: void lcdWait(void) { LCD_DATA_READ(); // ustawienie portu danych w tryb wejściowy LCD_RS_CLR(); // niski stan na linii RS -> odczyt rejestru statusu LCD_WR_SET();...
Trochę pogrzebałem i znalazłem przyczynę. Kluczowa była flaga IDLE okazało się że po resecie UART nie jest w stanie IDLE nawet jak nic nie szło i wtedy trochę pogrzebałem i odkryłem że mam błąd. Problem polegał na tym że robiłem OR-a żeby skonfigurować port w odpowiedni tryb a zapomniałem że rejestr GPIOx-CRx nie ma 0 po resecie tylko 0x44444444 ale...
http://obrazki.elektroda.pl/9377221800_1... W dziale mikrokontrolery ARM znajdziecie bezpłatny (do osobistego użytku edukacyjnego) poradnik STM32 przygotowany przez szczywronek . Materiał dostępny jest w temacie: techekspert: Do kogo kierowany jest poradnik, jakie podstawy powinien mieć opanowane czytelnik? Czy znajomość określonej...
Szanowny Państwo, zwracam się z uprzejmą prośbą o pomoc z pewnym zagadnieniem. Piszę program do układu sterowania zgrzewarką punktową o wysokiej częstotliwości przekształtnika. Korzystam ze sterownika XL7 firmy Horner oraz płytki STM32. Moją koncepcją na stworzenie układu sterowania jest transmisja danych poprzez protokół MODBUS RTU po kablu RS-485....
Opuściłem się trochę we własnym temacie jakoś tak wyszło że nie zauważyłem nowych postów. Co do platformy myślę jednak zacząć od F0 czemu ??. Prostota peryferii jak ktoś wcześniej napisał. Mniej jest rejestrów i ustawień trudniej o czymś zapomnieć. A potem przesiadka z F0 na F3 czy F4 to tak naprawdę chwila, Co do samego kursu. Nie chce robić typu step...
Cześć Może ktoś z Was się też nad tym zastanawiał. Jaki jest czas pomiędzy wpisaniem np 1 do rejestru ODR lub BSRR a faktycznym wystawieniem tej 1 na wyjście. Np chce wystawić na porcie stan H, wpisuję do rejestru BSRR jedynkę w celu ustawienia tego portu. Po jakim czasie uC wystawi ją na wyjście, ale w takim przypadku gdy rdzeń jest taktowany max szybkością...
Dzięki, wszystko oczywiście działa. Chciałbym poruszyć jeszcze jedną kwestię dotyczącą bilioteki do obsługiwania peryferiów do STM32. Dopiero zaczynam, więc sam jej używam, jednak da się zauważyć, że produkuje ona obszerny kod wynikowy. Myślę, że podobną funkcjonalność można stworzyć używając samych dyrektyw preprocesora, które nic nie zajmują. Napisałem...
Witam! Posiadam płytkę Discovery z procesorem stm32 f100RB Włączam program CubeMX, ustawiam pin 2 portu B jako wejściowy w trybie Pull Up. Programuje Procesor Sprawdzam napięcie pomiędzy masą a pinem 2, wynosi ono 0.2V Włączam w woltomierzu "Brzęczyk", sprawdzam ciągłość obwodu pomiędzy pinem a zasilaniem... Brzęczyk się odzywa, wskazuje spadek napięcia...
PS. Jak załadować program za pomocą BootLoadera po RS232? Szukam i szukam w necie i nie widzę. Dokładnie to chodzi mi o to jakim programem. Program nazywa się Flash Magic http://www.flashmagictool.com/ Jak by jakiś pin był podłączony do GND a ja na nim bym wymuszał stan niski (a raczej próbował wymusić) i procesor by się palił to bym zrozumiał. Akurat...
Nie wiem - tyle ze uznali ze poniewaz mogą to nie należy nic const - antować. Zaraz, Ty nie jesteś czasem osobą która uważa, że const "nie jest w duchu jęyka C" ? :) Zrozum, nie każdy lubi pisać po tych rejestrach i mieć uszyte rozwiązanie na miarę. Ja przykładowo wolę coś co ma pewny pozoiom abstrakcji. Z racji mojej pracy/hobby musiałem pisać soft...
O bit-bandingu szukaj w dokumentacji ARMa. Chodzi o to, że w pewnym obszarze SRAM lub IO są bity, które w innym obszarze mają własne adresy 32bitowe Cortex™-M3 Technical Reference Manual http://obrazki.elektroda.pl/6277145000_1... Normalnie w ARM operacje na poszczególnych bitach w komórkach pamięci lub w rejestrach peryferiów odbywają...
Witam Niedawno przyszła do mnie płytka NUCLEO F103RB. Chciałbym nauczyć sie programowania na STM32 na rejestrach, dlatego tez zacząłem przeglądać reference manual dla STM32 https://obrazki.elektroda.pl/4062980900_... Dowiedziałem sie, że w przeciwieństwie do Atmeg, tutaj najpierw należy doprowadzić zegar do portów aby je uaktywnić....
Niby można się domyśleć że TIM2 Jest 32bitowy, ale nie chodzi o to aby się domyślać. I słusznie, bo timery w STM32 nie są 32 bitowe. Nawet w pierwszym zdaniu opisu jest to napisane "wprost" (wręcz "jak krowie na rowie"): 15 General-purpose timers (TIM2 to TIM5) ... 15.1 TIM2 to TIM5 introduction The general-purpose timers consist of a 16-bit auto-reload...
źle Ci się wydaje - trzeba przełączać kierunek portów Najprościej będzie zdefiniować dwa wektory - jeden z zawartościami rejestru MODER, drugo z zawartościami ODR dla poszczególnych diod/faz, a potem w przerwaniu timera robimy coś takiego (multipleksowanie na 6 faz, wszystkie diody świecą - żeby zapalać selektywnie, trzeba dodać warunkek przed ostatnią...
Fakt, funkcja VS1003_SPI_transfer(_reg); rzeczywiście jest w pliku. Nie zauważyłem. Układ może odpowiadać samymi zerami, jeżeli ma uszkodzony port wyjściowy, np. na skutek nieprawidłowej konfiguracji I/O w MCU. To nie musi trwać długo. Dlatego pytałem o konfigurację portów, ale nadal nie wiem jak masz ustawione porty, szczególnie dla MISO. Naprawdę...
Cześć Wszystkim! Mam Eclipse w wersji Yagarto i AT91SAM7S256. Układ programuję przez SAM-BA. Niestety nie mogę uruchomić debugowania w Eclipse przez Wiggler'a. OpenOCD mam w wersji 2006re82, bo tylko taki znalazłem ze sterownikiem portu równoległego. Próbowałem kolejnych kroków z manuala Jima Lynch'a oraz ze strony kolegi Chopina ale bez końcowego rezultatu....
OK poprawiłem program ale dalej nie działa jak należy: Konfiguracja pinów: [syntax=c] GPIOA->MODER |= GPIO_MODER_MODER5_1 | GPIO_MODER_MODER6_1 | GPIO_MODER_MODER7_1; //Pin 5 portu A jako AF CLK, //Pin 6 portu A jako AF MISO, //Pin 7 portu A jako AF MOSI GPIOE->MODER |= GPIO_MODER_MODER3_0; //Pin 3 portu E jako output CS GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5...
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...
A Ty jak to cielę wziąłeś screena, którego dali zamiast zajrzeć do RM żeby to ogarnąć. z tabeli: 01: Output mode, max speed 10 MHz. bit 8 to będzie MODE2 Nie liczysz bitów tylko patrzysz na numer przy MODE/CNF. GPIO ma dwa rejestry CRL dla konfiguracji pinów 0-7 i CRH dla konfiguracji bitów 8-15. Z resztą na screenie, który wrzuciłeś nie ma jak widzisz...
Biblioteki to jeden ze sposobów na pisanie kodu. Z tego co widziałem na forum to właśnie jest to sposób na szybki start, a krytyka jest związana raczej z nieumiejętnym korzystaniem z biblioteki w tym również w przykładach. Za przykład podam tutaj przykład GPIO - IO Toggle (stm32f4_dsp_stdperiph_lib). Definicja zmiennej GPIO_InitTypeDef GPIO_InitStructure;...
(at)atom1477 zmienilem na rowne czyli na PA0 i dziala, ale jak dobrze rozumiem EXTICR powoduje mi ze moge to przerwanie spowodowac z np PORTU B (pin 0), czyli jak wpisze 1 na zerowym bicie, czyli (1<<0) to będzie odpowiadalo PB0. No i wgrywam program i klikam PB0 to nic, a jak klikne PA0 to zmienia stan LED-a, czyli jakby ten rejestr EXTICR wwgl...
Ave, Od kilku dni próbuję zmusić do działania kontroler USB STM32F4 - tryb Device, klasa CDC. Korzystam z biblioteki dołączonej do IDE Keil'a w wersji Pro. Dokładnego przykładu brak - są dla innych klas - MSC i HID. Dla CDC są dla innych uC i tylko w trybie konwertera UART<->USB. Może macie jakieś przykłady do obsługi klasy CDC w tej bibliotece...
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
Witam, na początku dodam, że od dawna piszę w języku C, na AVR, od niedawna na ARM Atmela, oraz od kilku dni na STM32. Jako, że 2 pierwsze nie sprawiały mi większych trudności, mam kilka pytań dotyczących procesorów ST, na początek zamieszanie z bit-bandem, może ktoś mi wytłumaczyć na jakiej zasadzie to działa? podaje przykład #define bitband_t *(volatile...
Witam, czy spotkał się ktoś z Was może z taką sytuacją, żeby uruchomiony zegar sterwonika FSMC uniemożliwiał generację sygnału start z i2c? Transmisja jest możliwa dopiero po jego wyąłczeniu, co może nie jest strasznie uciążliwe, ale nieprzyjemne i przede wszystkim nie wiem czemu tak jest... kod (pomieszany, ale po woli sie przesiadam z biblioteki na...
Cześć jakiś czas temu spotkałem się z takim zapisem mapowania rejestrów: C gives no guarantee of the ordering of fields within machine words , więc może być problem z portowaniem. Nie mam zamiaru "wynajdywać koła na nowo" tak pytam się z ciekawości o wasze opinie. Ewentualnie tak myślę że dałoby rade to zrobić też w C++ z template w taki sposób żeby...
Jestem początkujący jeśli chodzi w ogóle o mikrokontrolery i programowanie także proszę o wyrozumiałość. Na tej płytce jest dioda LED podłączona do portu PA5. Jeżeli chcemy ją zapalić to używając rejestru BSRR piszemy w programie: GPIOA->BSRR |= 1 << 5; a gasimy GPIOA->BSRR |= 1 << 21; nurtuje mnie taka sytuacja while(1){ GPIOA->BSRR...
http://obrazki.elektroda.pl/7307254400_1... Autor w końcu znalazł nieco czasu, aby poeksperymentować z płytką STM32F4-Discovery, którą kupił jeszcze w zeszłym roku. Jak w przypadku innych mikroprocesorów, naukę dobrze jest zacząć od obsługi pinów GPIO. Ponieważ na płytce STM32F4-Discovery wyjścia zorganizowane są w dwu dwurzędowych...
Może łatwiej użyć takich makr (może nawet w bibliotece, z której korzystasz już są) [syntax=c]#define PERIPHERAL_BASE 0x40000000 #define BITBAND_PERIPHERAL_BASE 0x42000000 #define BITBAND_PERIPHERAL(a,b) (BITBAND_PERIPHERAL_BASE + (a-PERIPHERAL_BASE)*0x20+(b*4)) [/syntax] Wtedy zamiast liczyć adres, wpisujesz nazwy rejestrów i nie przejmujesz się wartością...
Nawet gdyby same porty GPIO się wyrobiły, to nie wyrobi się cała reszta. Skoro chcesz wykonywać odczyt z częstotliwością 40MHz, to masz mniej więcej 4 takty zegara na wykonanie wszystkiego. W super-extremalnym przypadku pętla która by to realizowała ma 4 rozkazy assemblera: 1. odczyt GPIO do rejestru 2. zapis z rejestru do RAM z postinkrementacją wskaźnika...
Jeśli jest tam wpisana (w te bity 24:26) wartośc 000, 001,lub 010 to te PA13 i PA14 zawsze będa na JATG SWD. No jak JTAG jest włączony to nie tylko one, ale z grubsza tak. I nie ważne co pisze do port GPIO bo to nie ma wtedy znaczenia. Więc aby Te PA13 i 14 mogły cokolwiek robić to w tych bitach 24:26 musi być wartość 100? Tak? Tak. Piszesz w starszych...
mam płytkę stm32f0discovery ale czy jest ona dobra na start z stmami Dobra jak i inne, tym bardziej jeśli zaczynasz od prostych rzeczy typu miganie LED, port szeregowy itp. . Doświadczenie z jednej rodziny przydaje się w drugiej. A już szczególnie jeśli się używa bibliotek (SPL czy HAL). Ale w zasadzie sedno problemu tkwi w materiałach do nauki. Jeśli...
Masz rację, np. DCMI->CR jest przepisane z SPL prawie na żywo i to nie jest najlepsze rozwiązanie, zajmę się tym jak coś będzie działać. Ten kod pokazuje trochę sposób mojego dziwnego rozumowania i przyzwyczajenie z AVR. Konfigurację GPIO znam na pamięć i jakoś szybciej mi się wklepuje takie coś i dobrze to rozumiem podobnie jak USART albo ADC czy inne...
Witam Zaczynam się bawić z moim stm32 discovery i mam problem z konfiguracją przerwania. [syntax=c] #include "stm32f0xx.h" #define zapal GPIOC->BSRR|=(1<<9);//zapal diode #define zgas GPIOC->BSRR|=(1<<25);//zgas diode int main(void) { RCC->AHBENR |=(1<<19);//wlacz port C RCC->AHBENR |=(1<<17);//wlacz port A GPIOC->MODER...
stm32 rejestry programowanie stm32 rejestry rejestry atmega8
zmywarka bosch mycia prądnica silnik asynchroniczny schemat zasilacz napiecie kondensator
aristo sterowniki audio aristo sterowniki
Schemat elektryczny wypiekacza chleba Tefal Dodanie Bluetooth do BMW P83CE558 i mikrokontrolera