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.
Skorzystaj z rejestru GPIO->BSRR
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!!
Masz serię artykułów w EP z ostatnich 2 lat o programowaniu bez SPL w Keilu - wystarczy poczytać, archiwalne numery są dostępne za darmo. Marudzisz, że nie działa, ale ani nie pokazałeś kodu, ani nie napisałeś, co to znaczy że "nic nie rusza", więc jak niby mamy Ci pomóc, hę?
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,...
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.
reset to reset i już, może pokaż jakiś schemat ?
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
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.
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).
Opcje -g? Masz ustawioną? EmbSysRegisters wtyczka do eclipse polecam pełen podgląd rejestrów.
Za pomocą BRR możesz szybko kasować poszczególne bity bez dotykania innych , a z pomocą BSRR ustawiać poszczególne bity bez dotykania innych . BSRR daje jeszcze jedna możliwość, w tym samym czasie możesz jedne bity kasować, jeszcze inne ustawiać, bez dotykania jeszcze innych . Mechanizm ten jest po to, aby przyspieszyć dostęp do portów i żeby dostęp...
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...
Myślę że to wszystko jest wytłumaczone w datasheecie do tego akcelerometru. 4\/3!!
Musisz jeszcze ustawić aby wyjście było aktywne w rejestrze CCER.
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.
Np. zaprogramuj SysTick lub dowolny inny timer na zgłaszanie przerwań z częstotliwością 100 Hz. Co 25 przerwań zmieniaj stan jednej diody, a co 100 - drugiej. Wszystko razem zmieści się w max. 20 liniach. Jeśli chcesz "zobaczyć" działanie timera z rejestrami compare - użyj dwóch rejestrów CC. W przerwaniu końca okresu zaświeć dwie diody, w przerwaniu...
(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...
A może byś tak włączył pull-up? Domyślnie masz pull-down. Wskazówka - Tabela 20 w sekcji 9.1. ;)
Nie ustawiłeś bitu MOE w rejestrze TIM1->BDTR.
W przerwaniu przydałoby się kasowanie flagi od przerwania (rejestr EXTI_PR)
czywiście RCC_AHBENR_GPIOEEN nie mam, próbuje zdefiniować. Gdzieś w Internecie znalazłem taką definicję: Kod: c Pozbywaj się bibliotek SPL ale CMISISa zostaw te wszystkie wartości powinieneś mieć zdefiniowane w pliku nagłówkowym stm32f3xx.h lub analogicznie do twojego procesora w innym. Bit IOPEEN to 21-szy bit w rejestrze RCC_AHBENR, stąd maska bitowa:...
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...
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...
Czemu po prostu nie przestawisz wartości ARR zamiast jednego z rejestrów od porównania?
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ć...
W module RCC masz rejestry odpowiedzialne za reset peryferiów (RCC_APBxRSTR)
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.
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.
nie ma czegos takiego jak dummy read przy odczycie rejestru tylko przy odczycie z GRAM chyba.
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....
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,...
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...
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...
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...
Sprawdź opis rejestru w Reference manual. Tam jest to jasno i klarownie wyjaśnione.
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...
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.
Tak zrobię, spróbuję na samych rejestrach.
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.
Hala do usarta czy SPI nie lubię. Łatwiej i dużo szybciej na rejestrach
A biblioteka to CMSIS
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))"...
Przejrzyj erratę od Twojego układu - w I2C jest kilka problemów.
STM32F10xxx I2C optimized examples AN2824
Czy domyślnie jest w danym modemie włączone czy nie to już zależy od modemu chyba. I/lub S-rejestrów.
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...
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...
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...
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
Liczbę impulsów masz w CNT, nie w CCR2. Zerowanie go nie ma sensu, wystarczy odejmować od siebie dwa kolejne odczyty.
RCC->APB2ENR=0x00000008; 0x00000008; - jak nazwać tą wartość, czy to nie jest adres rejestru? Nie, to jest wartość którą zapisujesz do rejestru który znajduję się pod adresem RCC->APB2ENR. GPIOB->CRH=0x33333333; LDR R0, =0x40010C04 LDR R1, =0x33333333 STR R1, Masz czarno na białym że wartośc 0x33333333 jest zapisywana do adresu 0x40010C04, czyli do...
A SPI_CR1_DFF za co odpowiada? Bo ja nie mam takiego bitu w rejestrze.
Dostęp atomowy w STM32: - bit-banding - rejestr BSR - wpisywanie gotowej wartości do rejestru ODR (czyli nie "|=" i nie "&=~") W innych układach, np. LPC17xx, dochodzą jeszcze inne możliwości. 4\/3!!
(at)dziechu poczytaj co robi operator sizeof zamiast grzebać w rejestrach
Wszystkie odwołania do rejestrów napisane w SPL, zamienić na swoje własne wersje.
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...
Ale co ma do rzeczy UART czy DMA do ADC? Każdy układ peryferyjny trzeba "włączyć" osobno i tyle. 4\/3!!
Ale to nie problem bo w STM32 możesz w rejestrze UARTu ustawić negację na pinie. Tylko w niektórych rodzinach. W STM32F1 którego dotyczy ten temat (jak i np. w STM32F4) nie jest to możliwe.
Zupełnie inny układ, zupełnie inne timery obsługiwane przez zupełnie inne rejestry :) I tak, przerwania też trochę inne (nvic).
Tak - da sie. To sa dwa niezależne interfejsy
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
Wszystko masz ładnie wytłumaczone na stronie 707 (Master Mode). Może zegar za mały na I2C: The peripheral input clock frequency must be at least: 2 MHz in Standard mode 4 MHz in Fast mode Może nie nadajesz Start itp. Trudno powiedzieć pokaż więcej, a najlepiej skonfiguruj sam na rejestrach (jeśli tak nie masz) na podstawie tego rozdziału. EDIT....
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...
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ść...
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...
Tak też zrobię - podłubię w bibliotece. Sadze ze (at)Freddie Chopin chodziło o to abyś sobie napisał na 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.
Musisz je znowu aktywować. Konfigurację UARTa można zostawić z HALa, jednak samą obsługę przerwań lepiej zrobić na rejestrach. Jak je ponownie aktywować ? HAL_UART_Receive_IT
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...
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...
Cała korporacja AVT silnie promuje używanie SPL. W zasadzie nie widziałem jakiegoś artykułu w odniesieniu do rejestrów.
Witam A może rejestr przesuwny, będziesz potrzebował tylko trzy linie. Pozdrawiam Romek
Funkcje będą takie same ale sprawdź adresy do rejestrów poszczególnych.
to zapisuje do rejestru 8 bitów. A podobno chcesz 16
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...
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 .
W "Reference manual" masz podrozdział "22.6.8 I2C Clock control register (I2C_CCR)". Za pomocą tego rejestru ustawiasz parametry zegara w odniesieniu do częstotliwości magistrali.
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ć?
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.
Procesor musi mie odpowiedni rejestr, który umoliwia taką zabawę. W STM32 nazywa się BSRR. W AVR-ach nie ma chyba niczego takiego.
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ł...
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.
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
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...
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?
1. Jak chcesz odpowiedź, to podawaj WSZYSTKIE dane. Skąd mamy wiedzieć co jest pod LCD_RWPORT? Może jest zdefiniowane jako "("? 2. Nie wiem po co te magiczne kombinacje. W przypadku STM32 to w ogóle nie ma sensu, bo wystarczy jakbyś sobie zdefiniował LCD_RWPORT jako "GPIOA", a nie samo "A" (jak zapewne planujesz) i już cały pomysł sklejania makr jest...
Temat rozwiązany. Problemem było to, że były zworki w Nucleo i programowałem Nucleo a nie docelowy STM32.
Nie wszystkie wsady chcą na nim działać poprawnie Albo podróba ;) sprawdź jakie ma ID w CubeProgrammer Powinno być ID 0x0410 Wersja 32kb ID 0x0412 low density a wcześniej działały. Full chip erase, jeśli dalej to samo to uszkodzony.
efekt w 100% prawidłowy - napisałeś kod, w którym s jest w pamięci RAM, a następnie tworzysz na niego wskaźnik, który zresztą też jest w pamięci RAM. Naprawdę weź jakiś przykładowy projekt dla STM32... 4\/3!!
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.
A jakieś inne flagi się nie "świecą"? W rejestrze ISR cały czas jest 0. Coś ciekawego w erracie? W sumie co nic ciekawego tam nie widziałem.
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...
Przerwania RTC są podpięte przez EXTI - trzeba się upewnić, że są "odmaskowane" w rejestrze EXTI_IMR i mają włączoną detekcję narastającego zbocza w EXTI_RTSR. 21.6 RTC interrupts All RTC interrupts are connected to the EXTI controller. Refer to . To enable RTC interrupt(s), the following sequence is required: 1. Configure and enable the EXTI line(s)...
Step 9 i 10 nie mogą być wykonywane po step 7 Dodano po 5 I jeszcze Step 12 powinien być wykonany przed Step 11.
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?
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.
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...
Co do instrukcji barierowych to tylko wiem ze są takie i mają coś pożytecznego robić np zmusić proca do wykonania zalegających w cachu instrukcji np zapisu STM32F0 nie mają żadnego cache. Punktem wyjścia jest program bez tych instrukcji który też nic nie wpisuje do rejestrów. Widzisz tą podświetloną na żółto linijkę? Tam właśnie zatrzymał się układ....
rejestr stm32 programować stm32 rejestr stm32 usart rejestr
kosztorysy elektryczne słuchawki telefonu styki przesunięcie fazowe układ trójfazowy
zgrzewarka transformatorowa pralka electrolux ewt1262tdw
Znaczenie oznaczenia "U1.02" w elektronice Mercedes Vito: Widoczność czujnika ciśnienia spalin po usunięciu DPF