Zacznijmy od tego, że powinieneś podać konkretny model procesora. W przypadku wątpliwości powinieneś czytać manual zamiast eksperymetować z ustawieniami. Przykładowo w STM32F030 masz rejestr BSRR który odpowiada zarówno za kasowanie jak i ustawnienie bitu IO. https://obrazki.elektroda.pl/5898146400_... https://obrazki.elektroda.pl/3378724200_...
Ja mam tylko target remote localhost:3333 monitor reset halt lub target remote localhost:3333 monitor reset halt #load monitor flash write_image erase main.bin 0x08000000 bin load działa ale mam przypadek gdzie muszę użyć tego drugiego
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.
Opcje -g? Masz ustawioną? EmbSysRegisters wtyczka do eclipse polecam pełen podgląd rejestrów.
Musisz jeszcze ustawić aby wyjście było aktywne w rejestrze CCER.
W przerwaniu przydałoby się kasowanie flagi od przerwania (rejestr EXTI_PR)
(at)toch88 Nie ma powodów, aby nie stosować takiego zapisu. Np. Atmel w swoich nagłówkach dla ARM daje możeliwość korzystania z pól bitowych, lub składania wartości z masek i przesunięć. Przy czym jeśli korzystasz z pól to wygodnie jest użyć compund literals: http://mikrokontrolery.blogspot.com/2011...
Nie ustawiłeś bitu MOE w rejestrze TIM1->BDTR.
Myślę że to wszystko jest wytłumaczone w datasheecie do tego akcelerometru. 4\/3!!
Np. STM32F100C8T6B. Ogólnie stm32 są "bardzo kompatybilne". Ważnie żeby trzymać się jednej grupy np stm32f1xx (nie zmieniać typu rdzenia (rodziny) np. z m3 na m4 lub m0 bo mają nieco inne rejestry konfiguracyjne).
gdzie znajdę plik który ma zdefiniowane adresy rejestrów, przerwań itp. Masz w środowisku: stm32f10x.h ale miało problem zrozumieć zapis: GPIOA->CLR ^= 1<<MODE2 Ja także mam problem :) W pliku stm32f10x.h masz definicje: Próbowałem Atollic TrueSTUDIO wybrałem sobie Embedded C Project naładował mi tyle syfu, że kompilacja trwała dość długo,...
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...
Żeby podejrzeć rejestry układ trzeba oczywiście najpierw zatrzymać. Generalnie też (kiedyś) wtyczka embsysregview nie odświeża automatycznie rejestrów (ikonka szara) - trzeba daną pozycję kliknąć 2x (ikonka zielona) i wtedy wartość jest aktualizowana itd. 4\/3!!
Takie samo? To czemu w pierwszej linijce przesuwasz o 0 pozycji, a w drugiej o 16? Dla jednego to żadna różnica, dla innego będzie to problem i dodatkowy kod. Każdemu według potrzeb. Poza tym naprawdę nie rozumiem problemu - nie chcesz to nie używaj, przecież nie płacisz za to żadnych dodatkowych pieniędzy. Ktoś będzie chciał użyć - użyje. Ktoś nie...
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.
Chodzi o to co pisze NAD opisem bitów z rejestru RCC_BDCR. Można tam znaleźć takie oto info: The LSEON, LSEBYP, RTCSEL and RTCEN bits in the RCC backup domain control register (RCC_BDCR) are in the Backup domain. As a result, after Reset, these bits are write-protected and the DBP bit in the PWR power control register (PWR_CR1) has to be set before...
Czy działa Systick to łatwo sprawdzić w debuggerze. Zresztą wiele spraw można sprawdzić. Ja bym zaczął od tego czy właściwe rejestry podlegają zmianom. To nie jest nic trudnego, w krokowym trybie Też jaka wartość jest SystemCoreClock, to zmienna globalna. Może ląduje gdzieś w HardFault, zaraz po uruchomieniu. EDIT. Często problemem przy kopiowaniu plików,...
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.
a reklamy wcale nie wyskakuja czesto, mi sie zdarza raz na 1h moze nawet rzadziej A jak klikniesz debug? podgladu rejestrow nie ma ale zawsze mozna to ominac w taki sposob ze sobie dane z rejestru do zmiennej przypisujesz i w zakladce veriables masz to do podgladu Nie próbowałem. Ale w Keilu w podglądzie rejestrów możesz sobie w trakcie debugowania...
Aż niemożliwe, że tak ciężko jest zacząć z stm32 na rejestrach... To dość złożona architektura i potrzeba sporo rzeczy aby stworzyć działąjący program. Dziś mam dziń dobroci i zrobiłem Ci projekt. Dalej to już tylko problem Twoich programów. Nie można zwalać na środowisko.
ja pytam o sposób dostępu do tego rejestru, gdzie znajdę to napisane? Czy mam sam przez podobieństwo próbować czy coś takiego zadziała: DMA->ISR=0x......; ? Czy taka jest zasada? Taka jest zasada. Gdzie te nazwy są zdefiniowane? Większość jest w pliku stm32f10x.h . Jeśli używasz Eclipse, to po prostu trzymając CTRL kliknij w daną nazwę, a otworzone...
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...
odczyt rejestru - modyfikacja - zapis do rejestru . Nie powinno cię dziwić, że jeśli między tymi operacjami wystąpi przerwanie, w którym modyfikowane są ODR bitbandingiem i nie tylko to cała operacja z przerwania zostanie anulowana.
A może byś tak włączył pull-up? Domyślnie masz pull-down. Wskazówka - Tabela 20 w sekcji 9.1. ;)
Nawet dla takiego małego Miki jak ja już na pierwszy rzut oka jest jasne że te kody to potężne źródło problemów. Co widać bez wgłębienia się w szczegóły: * Funkcja main() jako rozbiegówka to słaby pomysł. Kolega stmx napisał coś na ten temat (nawet podaje link w promowanych tematach), warto to przeczytać. * Stos musi mieć odpowiednie wyrównanie, zwykle...
Po drugie, chcesz nadawać bajty, a rejestr DR w STM32 ma 16 bitów, więc jednym zapisem do DR nadajesz 2 bajty. Tutaj się mylisz. Akurat w F103, możesz wysyłać pojedyncze bajty bez bajtowego dostępu. To co opisujesz jest w nowszych STM32, np. L4, F4, F7. W każdym przypadku lepiej użyć do tego DMA.
Czemu po prostu nie przestawisz wartości ARR zamiast jednego z rejestrów od porównania?
Nie no zaraz. Kanały są multipleksowane, więc rozwiązanie jeden na kanał odrzucam. Prawdopodobne jest rozwiązanie kilka w jednym przetworniku, no ale jakie (od czego) miałyby być te kondensatory i w związku z tym po co ich kalibracja. Najbardziej prawdopodobne wydaje się być rozwiązanie kalibracji jednego kondensatora na przetwornik, co tłumaczyłoby...
Kupa błędów, trudno, żeby działało. Nie wiem, czy wszystkie wyliczę: 1. W komentarzach jest TIM1 ch1, TIM1 ch2, TIM1 ch3, ale kody pod tymi komentarzami są identyczne (tylko rejestr CCRx jest zmieniony) - niby czym się różni inicjowanie dla poszczególnych kanałów? 1a. Rejestry PSC i ARR są określone dla timera (wspólne dla wszystkich kanałów), więc...
Czy domyślnie jest w danym modemie włączone czy nie to już zależy od modemu chyba. I/lub S-rejestrów.
Tak zrobię, spróbuję na samych rejestrach.
W module RCC masz rejestry odpowiedzialne za reset peryferiów (RCC_APBxRSTR)
Hala do usarta czy SPI nie lubię. Łatwiej i dużo szybciej na rejestrach
Same błedy pierwsza linijka: RCC->APB2ENR = RCC_AHBENR_GPIOCEN; rozumiem że wszyskie peryferia poza losowym RCC_AHBENR_GPIOCEN (losowym bo z innego rejestru) wyłaczasz. Zastanawiam się czy to naprawde trudno zauważyć że APB2 != ABH oraz przyjąć ze w takim rejestrze jest więcej niż jeden bit i raczej nalezy inne zostawić w spokoju. Trzeba też działać...
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.
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...
Rysunek chyba jakiś mały wymowny, tam znajdziesz odpowiedź (; A jak nie, to ustawienia rejestrów do wglądu, bo tak to się nie dogadamy. Znajdziesz to w TIMx w rejestrze CCMRx, bit OCxCE. Fragment opisu: OC1CE: Output Compare 1 Clear Enable 0: OC1Ref is not affected by the ETRF input 1: OC1Ref is cleared as soon as a High level is detected...
nie ma czegos takiego jak dummy read przy odczycie rejestru tylko przy odczycie z GRAM chyba.
A SPI_CR1_DFF za co odpowiada? Bo ja nie mam takiego bitu w rejestrze.
(at)dziechu poczytaj co robi operator sizeof zamiast grzebać w rejestrach
Zamienił stryjek siekierkę na kijek. Nie rozumiem w czym jakieś dziwolągi programistyczne mają mieć przewagę nad prostym ustawieniem kilku bitów w kilku rejestrach.
Tak też zrobię - podłubię w bibliotece. Sadze ze (at)Freddie Chopin chodziło o to abyś sobie napisał na rejestrach :).
Może wbiję kij w mrowisko: Po co właściwie Ci ten bitbanding? Programuję Cortexy na codzień i nie zauważam praktycznej potrzeby użycia BB. Nie to, żeby w ogóle jej nie było, ale jest ona tak marginalna, że nie opłaca się w to bawić. Tam, gdzie są potrzebne operacje bitowe, są one zaimplementowane w sprzęcie lepiej i bez potrzeby użycia BB i szybciej...
Cała korporacja AVT silnie promuje używanie SPL. W zasadzie nie widziałem jakiegoś artykułu w odniesieniu do rejestrów.
Tak, Freddie Chopin ma rację, configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIO... oraz configMAX_SYSCALL_INTERRUPT_PRIORITY powinny być spójne, ponieważ odnoszą się do tego samego lecz różnią się przesunięciem bitowym w celu stosowania tych flag w funkcjach bibliotecznych lub bezpośrednio w rejestrach.
reset to reset i już, może pokaż jakiś schemat ?
Pomyśle :) w ogromnej ilości rejestrów stm32, myślałem, że jakoś łatwiej się odnajdę dzięki bibliotece, a tu chyba jest dokładnie odwrotnie :) pozdrawiam Krzysiek
Skoro te biblioteki Ci się nie podobają, to ich nie używaj - w czym problem? Jeśli podoba Ci się inna to jej użyj. Jeśli żadna, to napisz swój kod w oparciu o rejestry.
jest jakaś prosta metoda na timeout ? Nie wiem jaki masz STM, ale niektóre mają sprzętowy timeout. Wystarczy w rejestrze RTOR podać po ilu nieodebranych znakach ma zostać wygenerowane przerwanie. Ewentualnie musisz się posiłkować jakimś timerem - np. w trybie OPM. Szczerze mówiąc chyba lepiej Ci będzie napisać tę cześć kodu bezpośrednio na rejestrach...
BlueDraco, przejście na programowanie za pomocą rejestrów dawno mnie pociągało, ale w zasadzie trzeba by było zaczynać naukę od zera (szczególnie dla każdego nowego procesora). Czy gdyby dalej pisać w HAL, ale ważniejsze czasowo fragmenty tylko na rejestrach, to szybkość ich byłaby porównywalna? Czy jednak pozostałe fragmenty kodu w HAL akurat niezwiązane...
To API jest bez sensu więc nie ma co szukać o tym informacji. Dlaczego uważasz, że jest bez sensu? To według Ciebie lepiej pisać odwołując się bezpośrednio do rejestrów?
Dzięki za ten opis, muszę wpisać jeszcze do pamięci wyświetlacza jakieś wartości aby zobaczyć cokolwiek. Niestety u mnie problem tkwi w mojej ocenie w samym I2C. Bez rozwiązania tego problemu nie będę w stanie ustawić żadnego rejestru.
A odblokowałeś FLASH? Chodzi mi o magiczne: [syntax=c]FLASH->KEYR= 0x45670123; FLASH->KEYR= 0xCDEF89AB;[/syntax] I oczywiście zabezpieczenie zadziała dopiero po resecie procesora. Wcześniej wszystko działa tak jakby zabezpieczeń nie było pomimo odpowiednich wartości w rejestrach.
Makro LED_bb_B odnosi się do rejestru ODR który pozwala na zmianę stanu pinu. Ty natomiast musisz skorzystać z rejestru IDR który odwzorowuje rzeczywisty stan wyprowadzenia.
Sprawdź opis rejestru w Reference manual. Tam jest to jasno i klarownie wyjaśnione.
Witam, Timery w tych prockach mają tyle opcji, że się w tym wszystkim pogubiłem. Jak można wygenerować na jakimś wyjściu przebieg prostokątny o programowo określonej częstotliwości? Pewnie będzie to tryb Compare z zerowaniem rejestru licznika i zmiany wyjścia na stan przeciwny. Nie mam jednak pojęcia co i gdzie poustawiać w rejestrach.
Sam widzisz, że wcześniej wyzerowałem wszystkie rejestry co dało mi pewność że nie zawierają żadnych śmieci, potem wykorzystałem funkcje, i nic to nie dało. Jak dałem sumowanie bitowe w drugim przypadku to jest ok. Chodzi Ci o to, że powinienem najpierw czyścić pola rejestru które zamierzam zapisać tak? Funkcja to robi, i mimo to coś jest nie tak. Debugger...
Może głupie pytanie ale gdzie JEST GPIO_PIN_RESET? Zaraz po wejściu zapalasz PING14 potem dopóki niezakończony się konwersja ustawiany jest PING13 ale nawet jak się konwersja zakończy to nic tego rejestru nie resetuje
Sposób mam bardzo prosty - po kolei ładuję rejestry sterujące każdego peryferiala i dzięki temu kod inicjujący wszystkie peryferia w dużych projekstach nie przekracza kilkudziesięciu linii. żadna pseudowuniwersalna biblioteka nie obejmie wszytskich potrzeb projektu, a inicjowanie peryferiów potworkami typu SPL wychodzi wielokrotnie (np. 8x) dłuższe...
Nie powiem Ci jak z HAL, ale TIM1 owszem ma taka możliwość, jeśli bit MOE w BDRT jest == 0, a OSSI == 1, to stany wyjść kiedy timer jest wylączony ustalają bity OISx(N) w rejestrze CR2.
HSI jest kalibrowane w procesie produkcyjnym. Wartość tej kalibracji można nawet odczytać z jakiegoś tam rejestru. 4\/3!!
Funkcje będą takie same ale sprawdź adresy do rejestrów poszczególnych.
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....
zmiana na GPIO_Mode_AF_OD nic nie zmienia. Kontroler wiesza sie na czekaniu na flagę. Wkurzają mie te biblioteki powoli. Jęśli napiszę while(1) I2C_SendData(I2C1, 0); to na SDA I SCL mam 3,3V. Są oporniki podciągające 4k7 Ma ktoś może przykład jak to zrobić normalnie na rejestrach?
1. Polska literatura bazuje na tych bibliotekach 2. Bo się pisze szybciej i łatwiej, 3. Mniej cię obchodzi bo większość rzeczy dzieje się pod spodem 4. Dużo przykładów w sieci = co za tym idzie 1. mniej optymalnie 2. w razie problemów i tak trzeba grzebać po rejestrach żeby dowiedzieć się co się dzieje
Jeżeli zadajesz pytanie, to zamykanie tematu uniemożliwia uzyskanie odpowiedzi. Odblokowałem. Źródło taktowania po zwolnieniu sygnału reset jest określone sprzętowo. W przypadku STM32F302 jest to opisane w sekcji 9.2.6 w [url=https://www.st.com/content/st_com/e...
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...
Nie może być UART. Tylko SPI albo I2C. Musi być wykorzystany HAL na stm32 a na RPI bcm2835 ewentualnie wiringPI. Nie powinienem korzystać z rejestrów na stm32. Dlaczego? To są zagadnienia z kursów pewnych. Jak to powinno wyglądać?
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.
KeypadStruct.OUT0_Port->CRH &= ~(1UL << (4<< OutPositions To jest na pewno źle. Może zamiast struktury IF lepiej w tym przypadku użyć SWITCH? No i co to zmienia, poza zajmowaniem więcej miejsca i wymaganiem dziwnych słówek?
Napisał, że ma to być cyfrowy - ale np. czy opóźnienie ma dotyczyć jednego zbocza, czy obu, już nie widzę. Można by rozważyć użycie rejestrów przesuwnych i dobierać liczbę bitów - ale to może wyjść drogo. Procesor? Przynajmniej STM32, i to jakiś szybszy. Tylko w każdej z tych wersji to działa synchronicznie z zegarem...
Witam, Zagłebiam się powoli w procesor STM32F107 i widzę, że nie będzie łatwo :-) Pamiętam wcześniejszą dyskusję o nieużywaniu biblioteki "Standard Peripherals Library". OK To jak w takim razie zrealizować cos takiego, znanego z innych procesorów: np. GPIOA_CRL = 0x44444444; W pliku STM32F1x.h nie widzę adresów poszczególnych rejestrów np. GPIOA-G,...
Odkopuje stary temat bo nie ma sensu żebym zakładał nowy, a pytanie mam bardzo podobne. Gdzie w datasheet STM32F407VGT6 znajduje się opis rejestru SysTicka? Wczoraj przekopałem cały i nie mogę nic znaleźć nic prócz "SysTick calibration value register" który i tak i tak nie jest opisany. Doszedłem do tego samego momentu autor tematu, czyli chciałbym...
Jeśli chodzi o przeciwfazę to, tak jak mówilem, sprawa jest generalnie bardzo prosta: jeden kanał timera w trybie compare albo pwm oraz odpowiednie zaktywowanie wyjść. Timer w takiej konfiguracji jak zrobiłeś wygląda OK (oprócz podczepionych przerwań bo są niepotrzebne), zaktywować wyjście niezanegowane może da radę przez pinMode(PA8, PWM), ale nie...
W funkcji wpisującej cokolwiek do SPIx->DR powinno być oczekiwanie na informację o tym, że rejestr TX jest pusty - trzeba więc sprawdzać flagę TXE. Rzutowanie powinno być na "volatile uint8_t*". Wrzuć cały aktualny kod. Wrzuć informację o tym jaka jest zawartość rejestrów SR obydwóch SPI w momencie wystąpienia problemu. "__attribute__((interrupt))"...
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...
Ok. Ma ktoś może inicjalizację tego wyświetlacza do pracy poziomej? Zmieniam wartości rejestru 0x11 i po zmianie bitu AM wpisuje poziomo, ale zaczyna na dole i dalej rysuje poza ekranem. Pewnie trzeba ustawić też inne rejestry. W ogóle to dziwne jest to że w inicjalizacji rejestr 11h ma wpisywane 0x6070. Bit AM to bit nr 3, więc jest ustawiany jako...
przerwanie przeciez jest wlaczone, bo sie wykonuje handler. chyba ze nie wiem co to znaczy wlacz EXTI... problem jest w tym zapisie do rejestru EXTICR
1. funkcja bez atrybutu interrupt nie odkłada na stos wartości rejestrów które modyfikuje potem w "ciele funkcji" - czy to znaczy, że wartości tych rejestrów są tracone czy też procesor sam z siebie (sprzętowo) je zapamiętuje na stosie przy wejściu w obsługę przerwania? Informacje jak zwykle w dokumentacji rdzenia. Po co są zerowane trzy ostatnie bity...
Debugowanie kodu do I2C do bezpiecznych nie należy do udowodniłem. Wystarczy nie pozwolić na odpowiednią szybką reakcję na zdarzenie, co spowoduje zawieszenie magistrali. W szczególności trzeba uważać na rejestry SR
to zapisuje do rejestru 8 bitów. A podobno chcesz 16
A konkretnie, to czego z kodu inicjowania timera nie rozumiesz po przeczytaniu rozdziału o timerach z Reference Manual? Masz tam obrazki, opisy działnia i szczegółowo rozrysowane i opisane rejestry sterujące.
W tym samym rejestrze (AFIO->MAPR) znajduje sie bity konfiguracyjne JTAG/SWD. Dokumentacja mówi, że są one tylko do zapisu, a odczyt tych bitów daje wynik niezdefiniowany. Może warto sprawdzić bezpośredni zapis do rejestru [syntax=c]AFIO->MAPR = AFIO_MAPR_TIM4_REMAP; // bez |[/syntax] albo z maską na te bity [syntax=c]AFIO->MAPR |= AFIO_MAPR_TIM4_REMAP...
Może nie akceptuje tak wysokiego napięcia zasilania. Sprawdź jaki ma dopuszczalny zakres napięcia zasilania w rejestrze OCR (CMD58).
Dla licznika TIM1 trzeba dodatkowo dodać polecenie: [syntax=c]TIM_CtrlPWMOutputs(TIM1, ENABLE);[/syntax] Ustawia ono bit MOE w rejestrze BDTR, polecenie dotyczy liczników 1, 8, 15, 16 i 17 .
Bo to nie jest żadne polecenie, tylko wartość bitu.
Procesor musi mie odpowiedni rejestr, który umoliwia taką zabawę. W STM32 nazywa się BSRR. W AVR-ach nie ma chyba niczego takiego.
po co w niektórych implementacjach takich 'rozbiegówek' mamy kod assemblerowy który kopiuje adres stosu do rejestru SP procesora? STM32 może używać dwóch stosów - jednego dla przerwań (nazwanego wyjątkowo myląco "main stack") i drugiego dla wątków (nazwanego "process stack") - a więc i dla "main()". To co jest w tablicy wektorów ląduje w MSP ("main...
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...
Temat rozwiązany. Problemem było to, że były zworki w Nucleo i programowałem Nucleo a nie docelowy STM32.
Dzięki wielkie! wałkowałem to ładne parę dni a takiej głupiej pomyłki nie zauważyłem ;) za to poznałem dość dobrze kod fatfs ;) ... oprócz zapisu TRZEBA także odczytać rejestr SPI...
Nie, no niewątpliwie masz rację, że jeśli chodzi o wydajność to szybciej jest bezpośrednio pisać po rejestrach ;) pozdrawiam Krzysiek
Przejrzyj erratę od Twojego układu - w I2C jest kilka problemów.
Może nie pojmuję idei budowy tego rejestru ale jeżeli podamy offset np 0x100, to ustawiony zostanie bit 8 tego rejestru a nie (jak wydaje mi się, że powinno być) 15. Bo przecież offset wpisywany jest w pole TBLOFF a nie w.... rejestr. Wariuje :|
To jest jeden z kodów z działu o NVIC z którym mam problem. Poza tym rejestr SysTick jest rejestrem kontrolera NVIC.
konfiguruje A0 na wejście z podciąganiem. Nie są potrzebne dalsze udziwnienia, aby po prostu chodziło... Wytłumacz mi w takim razie dlaczego konfiguracja od STM'a działa poprawnie bez odwoływania się do rejestru ODR ?
Jeżeli jesteś początkujący tak jak ja to polecam System Workbench for STM32. Instalujesz i masz wszystko potrzebne, jeżeli będziesz pisał na rejestracjach to wywalasz hal i zostawiasz CMSIS. Można w ten sposób zaoszczędzić czas na środowisko a zacząć pisać programy.
A da się to zrobić w jakiś szybki sposób? Czy trzeba resetować wszystkie rejestry po kolei?
Witam. Próbuje stworzyć wyświetlacz RGB. Sercem układu jest mikrokontroler z rodziny STM32 (logika działania 3V3), natomiast za sterowanie LEDami odpowiadałyby rejestry przesuwne zasilane napięciem 5V. Wysoki stan na wejściu rejestru przesuwnego wynosiłby w takim razie 3V3. Moje pytania są następujące: 1. Jakie napięcie uzyskam w rejestrze na wyjściu?...
Nie wiem, dlaczego działa w Keil - na moje oko nie ma prawa. Wyłączasz SPI w czasie trwania transmisji ostatniej ramki. Zaprogramuj drugi kanał DMA na odbiór do stałej lokalizacji w pamięci i obsługuj przerwanie od tego kanału, a nie od nadawania. Czy możesz jaśniej wytłumaczyć?jestem że tak powiem amatorem programowania. W momencie mam ustawiony kanał...
stm32 rejestr programować stm32 rejestr stm32 usart rejestr
temperatura termostat lodówka kabel ethernet przerywa transformator halogenowy zmienne
wyszukiwanie parametryczne brother zacięcie papieru
Ustawienie śruby pompki oleju w Oleo-Mac 937 Ustawienia pompki oleju w pile NAC CTS 45 40 01