Skorzystaj z rejestru GPIO->BSRR
GPIOA->CLR = 0x44444411; Jest bardzo czytelne, bo dokładnie wiesz, co po takiej instrukcji masz w rejestrze. Jeszcze bardziej czytełnie byłoby, gdybyś zamiast wartości liczbowej w instrukcji podstawienia użył stałych symbolicznych. Użycie operacji logicznych na rejestrach ma tę wadę, że czytając jedną instrukcję nie wiesz, co jest na pozostałych bitach...
Ja zaczynałem ogarnianie STM32CubeIDE między innymi od kanału Mateusza Salamona. Tu masz link jak przygotować projekt pod pisanie na rejestrach bez HAL. https://m.youtube.com/watch?v=ShCWoicHkK... Inne materiały też warto obejrzeć.
Tablicami NVIC się nie przejmuj. Korzystaj z funkcji dostarczonych przez CMSIS, w tym przypadku nie warto stosować rejestrów wprost. Konfiguracja Timera OK, choć kolejność nie należy do poprawnych. Przyjrzyj się jeszcze rejestrowi EGR. Przerwanie? Brak kasowania flagi skutkuje ciągłym jego wywoływaniem. Flagę kasuje się na początku przerwania. I taka...
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,
Czyli jeżeli dobrze rozumiem to w przypadku resetowania powinienem ustawić bit RST. Następnie włączyć zegar RCC (ponieważ w konfiguracji po restarcie jest on wyłączony) Resetujesz konkretne peryferium a nie RCC. Tak że w RCC nic się nie zmieni. Mogłbyś mi jeszcze podać źródła gdzie znalazłeś takie informacje o resecie Takich jak Ty podałeś to nie znalazłem...
Stos, pamięć, kto to wie? Raczej HAL-a nikt nie będzie debugował. Takie podmianki część plików stąd część nie wiadomo skąd - raczej nigdy nie działają. Zrób sobie projekt z Cube i zaimportuj. Nie sądze abyś miał problemy. Albo napisz sobie to samo na rejestrach i zobacz. Praca na 10 minut.
Zawsze możesz próbować grzebać na stosie i w rejestrach (adres "powrotu" powinien być w LR), ALE... HardFault wyskakuje jak pojawia się inny - krytyczny - problem, który jest nieobsługiwany. 4\/3!!
https://obrazki.elektroda.pl/9462291700_... Chciałbym zaprezentować rozwinięcie eksperymentalnego odbiornika SDR, jaki opisałem ostatnio: https://obrazki.elektroda.pl/6947080100_... https://obrazki.elektroda.pl/7046555300_... Najbardziej w tym momencie interesującym fragmentem płyty jest głowica: https://obrazki.elektroda.pl/9911930900_...
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!!
Ale twój program składa się tylko z tej jednej linijki, to gdzie ma stawać? No i czy naprawdę zapis do każdego rejestru musi się składać z 3-4 linijek? Fajnie że używasz definicji, ale poskładanie w głowie tego co chcesz osiągnąć jest mocno utrudnione, zwłaszcza że w rejestrach które tak modyfikujesz NIC NIE MA, więc po co te całe kosmiczne operacje...
https://obrazki.elektroda.pl/2553827400_... Cześć, pod tą niecodzienną nazwą tematu prezentuję projekt małego, automatycznego odtwarzacza muzyki do umilania posiedzeń na toalecie. Oczywiście to jedno zastosowanie, w innych sytuacjach pewnie też może się przydać ;) Głównym założeniem była niewielka złożoność, banalny interfejs, bezobsługowość...
Przykładów można szukać w SPL - można się w ten sposób dowiedzieć, w których rejestrach i co trzeba wpisać. Powoli szykuję tutorial do STM32 bez biblioteki, ale to jeszcze trochę potrwa. Kłopoty z bibliotekami są wielorakie. Ostatni kłopot - to to, do czego nas zachęcają przykłady z użyciem bibliotek, czyli deklarowania struktur jako zmiennych i pracowitego...
Jeśli krytyczność kodu wynika z pobrania zmiennej większej niż 32-bit modyfikowanej w przerwaniu, to nie ma potrzeby blokować wszystkich przerwań a tylko wybrane, np [syntax=c] HAL_NVIC_DisableIRQ( SysTick_IRQn ); uint64_t t = TimSys; HAL_NVIC_EnableIRQ( SysTick_IRQn ); [/syntax] kto nie lubi HAL użyje [syntax=c] NVIC_DisableIRQ( SysTick_IRQn ); uint64_t...
Odpowiedź na Twoje pytanie jest dosyć prosta - protokół SWD nie ma rozkazu zapisu do flash i tego się po prostu nie da tak zrobić jak zapisu do RAM. Oprogramowanie na PC, które się komunikuje przez SWD z układem (np. program do ST-Linka, OpenOCD) wgrywa do RAMu specjalną procedurę, która fizycznie realizuje zapis (poprzez odpowiednią sekwencje zapisów...
Jak ktoś zaczyna to prościej napisać te 5 linijek za pomocą standardowych bibliotek STM niż się zastanawiać, czy dobrze ustawiłem 13 bit w rejestrze którymśtam. OK, masz pięć (słownie: 5) linijek - zmieść w nich inicjalizację SPI z konfiguracją pinów - sam to napisałeś. Czekam. Chyba że chodziło Ci o 50 linijek, to co innego... Wszelkie inicjalizacje...
Oczywiście pokazałeś kodu tyle co kot napłakał, więc zobaczmy co mówi moja kula. Problem jest zapewne w tym że w funkcji wyświetlającej tekst używasz funkcji setPoint która pewnie na podstawie zmiennych x i y odpowiednio wyświetla na podstawie wybranej orientacji. Dokładnie tak Zobacz na stronę 55 i 56 Datasheet. Dla sterownika punkt (0,0) to lewy...
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....
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ę...
O zgrozo. A myślałem że kompilator jest dla mnie a nie ja dla kompilatora. No i właśnie tak jest - kompilator jest dla Ciebie. Ty każesz mu skompilować błędny (nie w sensie składniowym) program, a on to robi, choć program nie działa (; Zresztą jak widać po kodzie nawet w tym przypadku jego działanie jest niechlujne. Tak, strasznie... Biorąc pod uwagę...
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...
(at)Karaczan - to nie kwestia tworzenia średnio optymalnego kodu - bierzesz mbed, spl, hal do ARM i głupie miganie diodą jest w stanie zeżreć 1k RAM i FLASH ;) A jedziesz bezpośrednio na dokładnie tych i tylko tych rejestrach peryferiów, których w projekcie używasz i masz 10x mniej kodu. To kwestia inicjalizacji/konfiguracji wielu rzeczy, które Arduino...
Czy taka funkcja może być? [syntax=c] uint8_t SPI_Transfer_Byte(uint8_t bajt) { SPI1->DR=bajt; while(!(SPI1->SR & (1<<TXEspi)));// spr czy bufor tx pusty while(!(SPI1->SR & (1<<RXNEspi)));// spr czy bufor rx ma jakies dane return SPI1->DR; } [/syntax] O jakie magic numbers chodzi?!
STM32F10xxx I2C optimized examples AN2824
Mnie tym razem forma i treści od Kolegi Piotra nie satysfakcjonuje - szczególnie w kontekście innych wpisów na elektrodzie. Nie mogę zrozumieć czemu ta prezentacja miałaby służyć. Brakuje ewidentnie konkretnych walorów edukacyjnych, na pewno dla takiego amatora jak ja, być może jest to dobra inspiracja zaawansowanych użytkowników, ale szczerze wątpię....
W platformIO nie ma niestety C011. Odnośnie odczytywania rejestrów, o ile dobrze zrobiłem to wszędzie zastosowałem takie coś: RCC->IOPENR |= RCC_IOPENR_GPIOAEN; // odczytano bit = 1 if(RCC->IOPENR & RCC_IOPENR_GPIOAEN){ status = 1; } else { status = 2; } status = 0; Zapisałem sobie w komentarzach wartość statusu i wszędzie...
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...
Głownie na bibliotekach HAL, bo to jest najłatwiejsze do przyswojenia dla początkujących. Ale rozpoczął cykl kursów na rejestrach w formie webinarów na yt. W ofercie są kursy języka C, STM32 i RTOS. Jeśli chodzi o mirka, to dawno temu zaczynałem od bluebooka, książka fajna ale nie zachęciłem się wtedy do AVR, trochę ciężko było z kontaktem na forum,...
Nie do końca wiem o co chodzi ze zdjęciami ale niektóre są prześwietlone specjalnie aby było widać dokładnie oznaczenie chip-u który się tam znajduje. Jestem zawsze otwarty na sugestie :) . Jeśli chodzi o dokumentacje to są szczątkowe, wiadomo BK7231N ma dostępną jednak jeśli o np, klon STM32 to niestety ale jakiś lakoniczny opis wraz z schematami...
Czy użycie pinu UART jako GPIO wymaga pewnych ustawień? Bezpośrednia odpowiedź: Tak, użycie pinu UART jako GPIO zazwyczaj wymaga pewnej konfiguracji. Wynika to z faktu, że piny UART są zwykle domyślnie skonfigurowane do komunikacji szeregowej i należy je ponownie skonfigurować, aby działały jako piny wejścia/wyjścia ogólnego przeznaczenia (GPIO). Szczegółowa...
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.
Cześć, dzisiaj STM wypuściło paczkę przykładów dla Cortexa M0 pisanych bezpośrednio na rejestrach. [url=http://www.st.com/web/en/news/n3525... Code from STMicroelectronics Help Designers Get the Best from STM32 Microcontrollers. Ja tam się cieszę i czekam na przykłady dla M3 etc. Pozdrowienia!
W pliku stm32f10x.h jest to trochę inaczej niż w dokumentacji. Np. dla PSRAM1 - rejestr BCR1 odpowiada: [syntax=c]FSMC_Bank1->BTCR[0][/syntax] - rejestr BTR1 odpowiada: [syntax=c]FSMC_Bank1->BTCR[1][/syntax] - rejestr BWTR1 odpowiada: [syntax=c]FSMC_Bank1E->BWTR[0][/syntax] Według tego powyżej mam ustawiony LCD i zewnętrzny RAM i działa.
AVE... Problem z STM32 i ogólnie z układami mającymi więcej niż 8 bitów jest taki, iż są one sporo trudniejsze w użyciu, niż ośmiobitowce. Tyle że ośmiobitowe BasicStamp i Arduino uczyniły programowanie mikrokontrolerów jeszcze prostszym. Tak prostym, że nie potrzeba ani noty katalogowej układu, ani wiedzy o bitach konfiguracyjnych, przerwaniach, czy...
A sprawdzałeś czystość sygnału PWM czy jest taki ( bez podłączania do serva ) jaki ma być? Czasem HAL potrafi robić konfigurację nie tak jak nam się wydaje, dlatego wolę sam takie rzeczy na rejestrach robić z pominięciem HALa.
Doświadczenie uczy mnie, że dyskusja o wyższości 8bit nad 32bit (czy odwrotnie) będzie trwała tak długo, jak długo obydwa rodzaje procesorów będą dostępne. mam wiaderko AVR-ów i podobne wiaderko ARM-ów, głównie STM32 choć też LPC. Znajdą się też malinki czy wcześniejsze dwurdzeniowe A20. Jak pewnie większość (przynajmniej tych starszych) zaczynałem...
Tak, te funkcje sa do odczytu z zapisu rejestrow, jednak jak mnie przekonales ( nie w 100% do poki nie zobacze jakiejs dokumentacji :P ), na rejestrach usb stm32 a nie phy.
Przed zrobieniem czegokolwiek z RTC i LSE trzeba odblokować dostęp w rejestrach BKP. 4\/3!!
Pierwsza opcja to oczywiście zdefiniowanie NAPRAWDĘ DUŻEGO stosu, ale to średnie rozwiązanie jak wiadomo [; Do rozbudowanej aplikacji na ARMa myślę że należy liczyć minimum 1kB, jeśli używa się jakichś potwornych funkcji standardowych (printf!) i to głęboko to lepiej zaopatrzyć się w 2kB (o apetycie tych funkcji na pamięć pisałem ostatnio http://www.elektroda.pl/rtvforum/topic13...
Rzeczy, które zaznaczyłeś - to stałe zdefiniowane na podstawie lektury manuala - wartości bitów włączających odpowiednie tryby pracy peryferiali. MODER. A to nie powinno być zdefiniowane w pliku "stm32f0xx.h" aby wykorzystać w kodzie programu? Opis, który wkleiłeś plus opis bitów w rejestrach daje komplet informacji potrzebnych do zaprogramowania timera....
Dobra, dosyć wygłupiania się. Najpierw spróbuję odpalić ten wyświetlacz na AVR. Tam jest trochę łatwiej, przy okazji dowiem się, czy wyświetlacz jest sprawny, w dodatku na AVR odpalałem już SPI. Potem poczytam o rejestrach SPI na STM32 i wtedy się odezwę, bo jak na razie rzeczywiście bez sensu. EDIT Udało się odpalić wyświetlacz na AVR Xmega z 32MHz...
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...
Wyjątkowo w przypadku I2C radziłbym użycie HAL i kodu wygenerowanego przezCubeMX (i ja to piszę..., ech), przynajmniej na początek. I2C w STM32 łatwy nie jest. Opanowanie go od zera na rejestrach to spora sztuka. funkcje HAL MemoryRead i MemoryWrite załatwiają większość typowych przypadków użycia układów I2C.
HAL działa tak na oko z 10 razy wolniej niż prosty program z operacjami na rejestrach - i to byłby zapewne główny problem. 100 tysięcy przerwań na sekundę dla L4 nie jest żadnym problemem, o ile nie używasz HAL w przerwaniach. ADC we wszytskich STM32 jest zaprojektowany z myślą o użyciu DMA. - i tak jest najprościej.
Diodą - ale z głową. Napisz to na rejestrach - wyeliminujesz problem nieznajomosci bibliotek. Adres 0x40 na pewno nie zadziala.
Dzieki Panowie, udało mi sie uzyskać zamierzony efekt kierując sie zaleceniami kolegi Sareph , dobrze wiedzieć jak sie ustawia poszczególne bity rejestrów, jednak mam pytanko: https://obrazki.elektroda.pl/4282252600_... właśnie zrobiłem to w taki sposób jak powyżej, bo nie wiem jak ustawić bit25 jeżeli pod nazwą SWJ_CFG Piotrus_999...
Niebardzo - STM32 jest bardzo bezproblemowy w debuggowaniu, więc nie tutaj szukałbym problemu. Może podczas debuggowania (ze względu na nieco inne "okoliczności") nie wyskakują Ci errory, które w normalnych warunkach się pojawiają i blokują transmisję? Sprawdź, czy nie są poustawiane flagi od błędów w rejestrach SR. 4\/3!!
To i ja swoje dołoże... Zacząłem bawić się stm32 właśnie od poradnika Szczywronka. Pokazał jak to się robi na rejestrach. Biorę RM i robię co chcę. Tyle że trzeba było się przekonać do metody, bo też zaczynałem o HALa i nigdy nie wiedziałem za pomocą jakiej funkcji włączyć to czy owo. Na rejestrach mam prosto. Jest RM, są inne dokumenty. Wszystko można...
Ja bym Ci kolego proponował zajrzec do doskonałego poradnika kolegi szczywronka (jest na poczatku. Proponowałbym tez spróbowqać na poczatek pobawic sie procesorem rejestrami (tak bare metal) bez bibliotek. 1. Uzywaie bibliotek jak sie dokladnie nie wie co sie robi nie jest proste - a przegryzanie sie przez nie frustrujace i zniechecajace. Jak opanujesz...
SPLa przestał żyć. Nie przesadzaj - przecież ten cały STM32 Cube i będący jego częścią "HAL" (równie adekwatna nazwa jak "SPL"...) to SPL z minimalnie pozmienianym API. Dalej jest tak samo badziewny i napisany przez kogoś kto "nie ogarnia" programowania (wciąż brak jakiegokolwiek "const" przy wskaźnikach - na to chyba nigdy nikt tam nie wpadnie). Często...
Witam To mój pierwszy post na forum. Z stm32 próbuję walczyć już jakiś czas co marnie mi idzie. Czy mógłby ktoś napisać w tym wątku po kolei czego potrzebuję aby pisać programy tylko na rejestrach w środowisku Atollc? Używam płytki stm32f0discovery z F051, cortex M0. Głównie chodzi mi o include'y, jakie pliki mam zaimportować do projektu itp.
stm32 usart rejestrach wpisy rejestrach biblioteka rejestrach
sbv5121e motorola router panasonic telewizor podwójny suszarka suszyć
vestel firmware 17mb230 generator prądu
WIWA DVB-T2 H.265, MAXX, HD-90 – formatowanie dysku HDD przez dekoder, obsługa FAT32/NTFS Mastercook IGD22S – kiedy zakończono produkcję płyty gazowo-indukcyjnej?