Jeśli zmiana rozmiaru buforów powoduje że program przestaje działać oznacza to że prawdopodobnie kończy się pamięć na stosie. Kilka rozwiązań jest. 1. zwiększyć stos 2. zdefiniować bufory jako static albo zmienne globalne wtedy nie trafią na stos 3. jeżeli idea projektu na to pozwala podzielić odczyt na mniejsze paczki i zapisywać po trochu(używając...
Pomijając sensowność używania sprintf do SKOPIOWANIA stringa do jakiejś zmiennej, to błędów jest bardzo dużo. 1. Skasowałeś stronę którą chcesz zapisywać? 2. Odblokowałeś zapis do flasha? 3. Twój zapis jest dziurawy, bo jak zero będzie na nieparzystej pozycji, to pętla nie zakończy się wtedy kiedy będziesz chciał 4. Odczytujesz FlashStatus, to sprawdź...
Być może, że twoje opóźnienie wcale nie jest takie jak myślisz (skoro 3ms to typowy czas to 5ms spokojnie powinno wystarczyć). Zauważ, że jeśli zapisujesz pierwszą stronę to kolejną możesz zapisać jeśli wysłanie control byte zwróci ACK jeśli nie to pamięć jest zajęta i należy ponownie wysłać start i control byte. Co jeśli najpierw zapiszesz druga stronę...
Nie jest to możliwe - zapis do dwóch portów to będą dwie odrębne operacje. Różnica między nimi może wynosić kilka cykli zegara (~3).
No myślę, że rozwiązaliśmy problem dostatecznie go podsumowując, także zamykamy. A ja dziękuję za zagorzałą :) dyskusję. Pozdrawiam. Temat okazał się być niedostatecznie rozwiązany gdzyż funkcje nie działały poprawnie. A oto 100% działające kody do obsługi flash: Wyłączenie zabezpieczenia zapisu wybranych oczywiście grup stron : [syntax=c]if((GPIOA->IDR...
Oczywiście, że można to zrobić bez użycia HAL, czy SPL. Kod, który tu przedstawiłeś wymaga bardzo wielu poprawek. Nie uważasz, że funkcja zapisu do pamięci jest zbyt skomplikowana? Długa na 88 linii, zawiera dziwne stałe typu: 1 << 14, 0xF3. Np co robi ta instrukcja: [syntax=c]FLASH->CR &= 0x1FFE;[/syntax], albo taka: [syntax=c]while(FLASH->SR...
Czy tak trudno odpowiedzieć na pytanie? Sam się czasami dziwie, że to taki trudne. Nie specjalizuje się w angielskim, a trudno przetłumaczyć/znaleźć zagadnienie w pdfie. Wszystko wynika ze specyfiki takiej pamięci. Pomijając aspekty fizyczne, czysta komórka pamięci flash odpowiada stanowi "1". Podczas zapisu do pojedynczej komórki można tylko i wyłącznie...
Czytałes errate?
C-SKY Flash Programmer jest oprogramowaniem dostarczanym do pobrania przez XuanTie na stronie https://www.xrvm.cn/community/download?i... https://obrazki.elektroda.pl/1504579400_... Narzędzie to współpracuje z programatorami CK-Link do odczytu i zapisu w pamięci flash procesorów C-Sky z rdzeniem RISC. Procesory...
Flagi zeruj bezpośrednio po sprintf - wtedy dane w zmiennych nie są już potrzebne i można je zmienić. Dłuższe czekanie może powodować, że w momencie przyjścia przerwania flagi są ciągle ustawione - i gubisz dane. Dość łatwo to wykryć programowo, więc możesz sprawdzić czy taka sytuacja ma miejsce.
Na tym polega dobre zabezpieczenie, że raczej nie da się go łatwo ominąć [; Na przyszłość polecam głupie porady z internetu choćby zweryfikować w innych źródłach (np. spytać najpierw tutaj), lub choćby przeczytać w dokumentacji co zamierzasz zrobić zanim tego faktycznie dokonasz.
Standardowa rozbiegówka definiuje "słabe" handlery przerwań zawierające puste nieskonczone pętle. Standardowa - nie pamiętam gdzie ale widziałem że te funkcje weak kierowały na HardFault.
A czemu miałoby nie być dozwolone? 4\/3!!
W funkcji xmit_spi_multi() masz błąd. 4\/3!!
A to w takim razie służę pomocą. Zaczynamy tutaj: [url=https://www.microchip.com/wwwproduc... Proszę się zapoznać z tym dokumentem, rozdział 27: [url=https://ww1.microchip.com/downloads... Pomocny może być jeszcze ten dokument, rozdział...
GPIOx->BSSR
Skoro masz datasheet wyświetlacza weźmy ten http://www.adafruit.com/datasheets/ILI93... strona 66 rozdział 7.2.20 i tutaj nie ma nic że address counter jest inkrementowany podczas odczytu, natomiast podczas zapisu jest.
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...
Mieszasz ze sobą dwie zupełnie oddzielne kwestie. Adresy w pamięci dotyczą komórek jednobajtowych, bo niby jak inaczej miałoby to być? Niemniej jednak fizyczny zapis dokonywany jest po 4 bajty na raz jeśli ustawiłeś zapis 32-bitowy.
Być może da się pokombinować z wyzwalaniem transferu timerem. Z drugiej strony nie bardzo rozumiem, jaki miałby być z tego pożytek - przesadzenia całego oprogramowania do RAM łatwe nie jest, a na czas zapisu procesor zatrzyma się przy dostępie do Flash, chyba że to model z dwoma bankami.
Witam Pisałem już o problemie ale nieco zamieszałem. Nie potrafię nic zapisać przez FSMC do kontrolera LCD. Kontroler nie jest fizycznie podłączony do stm32 (na razie). Przy próbie zapisu dostaję HardFaulta. Nieprzespana noc i nic :evil: Na zrzucie poniżej moment tuż przed HardFault http://obrazki.elektroda.pl/2504254100_1...
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 możliwości zapisywania poszczególnych BAJTÓW (w uproszczeniu), a wygląda że to próbujesz zrobić. Funkcje zapisują zwykle 2 bajty na raz, adres zapisu powinien być więc parzysty, a Ty powiększasz zmienną Address tylko o 1 między wywołaniami.
O ile pamiętam dziwaczny bufor SPI w STM32 ma pojemność 32 bitów, więc nawet bez wysłania jednego bitu masz po zapisie 16 bitów do DR od razu przerwanie - bo możesz od razu zapisać następne 16 bitów.
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...
Czy dla kart SDHC napięcie 3,3V jest za wysokie? Zbyt ogólnie. Model jest istotny.
w pakiecie STemWin jest programik BmpCvt.exe w którym jest możliwość generowania obrazków w c, skompresowanych , podczas zapisu można wybrać. Czy działa skutecznie musisz sprawdzić
wydaj 50 zł i kup sobie jakiś najtańszy chiński analizator logiczny. Podłącz i zobacz co siętam dzieje na tym SPI. https://obrazki.elektroda.pl/5220450300_... Chyba tak się właśnie to skończy... Liczyłem, że popełniam jakiś błąd, którego łatwo pominąć i go niedoświadczony ja pomijam :( Taka drobna uwaga: Jak już używasz Arduino to...
[syntax=c] fr = f_mount(&FatFs, "0:", 0); fr = f_open(&fil, "0:filea.txt", FA_CREATE_ALWAYS | FA_WRITE); fr = f_write(&fil, "towrite", 6, &bw); [/syntax] Niestety, write zwraca FR_INVALID_OBJECT. Problem jest chyba z ścieżkami które podaje, wewnątrz f_open funkcja follow_path(&dj, path); zwraca FR_NO_FILE. Niestety glebszy debug się sypie bo nie mogę...
Wrzuć kompilowalny przypadek + wywołanie kompilatora. Moim zdaniem nie ma możliwości, aby nie działało, ponieważ akurat to pola ADC_TypeDef są volatile. Jest pewna drobna szansa, że natrafiłeś na ciekawy błąd kompilatora, dlatego chciałbym, abyś wrzucił tu kod tej klasy najlepiej z przykładem użycia w main(). I napisz jaką masz dokładnie wersję kompilatora....
Przecież karta ma o wiele większą prędkość zapisu. Problem jest w programie na STM32. I nie chodzi nawet o to że wykorzystujesz SPI. Tak z ciekawości: jaką masz prędkość RS-a?
Zrobiłem coś takiego: - buforuję transmisję do STM32 (10 ramek * 400B = 4KB) i wtedy wykonuję zapis Niestety zapis na kartę 4KB trwa więcej niż 1 sekundę (raz na kilka minut) i mam overrun transmisji do STM32. A nie myślałeś, żeby łączyć się z kartą przez DMA? Wówczas odpalasz transfer tych 4KB i o nim zapominasz, idzie sobie asynchronicznie do programu....
tak to są makra, ale chodziło mi o używanie tych które są już zadeklarowane w nagłówkach a nie tworzenie swoich. Łatwiej nam będzie analizować kod po makrach niż po wartościach z kosmosu. Może ktoś bardzo biegły w głowie to przetrawi jak zna wszystkie bity kofiguracyjne, ale raczej mało kto po zapisie 0x3492 wysnuje to o co chodziło.
Inny zapis, nie korzystający z tego, że zakres jest potęgą dwójki: enc_delta = (ENCODER_MAXVAL + encoder_count - last_encoder_count) % ENCODER_MAXVAL;
A jaki to ma związek z Twoim problemem? Jeśli nie robisz tego w przerwaniu o priorytecie wyższym od przerwania UART - nie ma to znaczenia. Przerwanie UART może zostać obsłużone pomiędzy zapisami kolejnych porcji danych.
Załączam kawałek działającego kodu. Folder SDCard zawiera przykładowy kod zestawu ewaluacyjnego od firmy ST. Jest nieco zmodyfikowany od oryginału, niestety nie pamiętam źródła (możliwa płyta z przykładami do HY-Mini). W folderze FatFs biblioteka ChaNa w wersji 0.09a. Plik diskio.c uzupełniony o potrzebny kod.
Przy odczycie z DR jest dokładnie ten sam problem co przy zapisie - jak chcesz 8-bitów, to musisz się odwołać przez wskaźnik 8-bitowy (identyczny jak ten powyżej do zapisu). Twoja zmienna tmp i w tym przypadku nie ma żadnego znaczenia, bo "szerokość" odczytu/zapisu jest zdeterminowana tylko i wyłącznie przez źródło odczytu lub cel zapisu, a nie rozmiar...
Co to znaczy, że jest legalne ? Zapis '1' jest dozwolony. Każdy string ma na końcu null terminator i trzeba o tym zawsze pamiętać.
No, będzie - zapisów będzie 2 razy mniej.
W jakim celu zamiast napisać po prostu I2C_SR1_RXNErzutujesz stałą 0x40 na typ uint16_t (co nie ma żadnego skutku i jedynie wydłuża i zaciemnia zapis)?
Witam ponownie. Niedawno zacząłem zabawę z ta pamięcią (m25p16) firmy ST. Niestety już na początku kłody pod nogi. Wstępnie posiłkowałem się przykładem z Keila do pamięci m25p64, gdyż uznałem, że pamięci z tej samej rodziny programuje się tak samo. Po nieudanych próbach zapisu i odczytu danych (jedyne co działało to odczyt numeru identyfikacyjnego)...
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...
Jest wiele metod. Najwygodniejsze: 1. Ustaw sobie SWV data trace i pisz do jakiejś globalnej zmiennej. Bedzesz miał w CubeIde licznik taktów wyświetlony kiedy ten zapis się dokonał. Odejmiesz dwie wartości i będziesz miał wynik :) [url=https://www.elektroda.pl/rtvforum/v... pisałem Ci już o SWV Jest to potężne narzędzie...
Trzeba jeszcze włączyć przerwania w NVIC przecież... 4\/3!!
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...
Oczywiście, że wystarczy. Wszystko zależy od twoich umiejętności programistycznych.
He, he, he... Patrz na to: while (1); Nic, co jest dalej, nie ma szans się wykonać, więc kompilator eliminuje zbędny kod. ...A ponadto masz błąd w inkrementacji wskaźnika. idx = (idx + 1) % BUFSIZE; - to najprostszy poprawny zapis tego, co masz zrobić, chociaż nie zawsze daje optymalny kod.
Kiedyś też korzystałem z tych libów i w zasadzie tylko jedna z opcji (polling, irq-s, dma) mi działała całkowicie - chyba irq-s. Czemu tak się działo nie wiem, niektóre pozwalały tylko na odczyt danych a nie na zapis.
Jeśli zmienna / rejestr jest volatile to działa, używam takich zapisów już od dawna i nie ma z tym problemów.
Witam! Chcę wgrać parę danych do pamięci mikrokontrolera STM32F107 (ustawienia domyślne). Nie wiem za bardzo jak powinien wyglądać kod linkera do takiego zapisu? Korzystam z CodeSourcery ze strony Freddiego. Nie posiadam debuggera, więc kod mogę wgrywać tylko poprzez bootloader na USART. Pamięć chciałbym zapisać paroma danymi 32bit, a następnie mieć...
Ta, tego nie analizowałem, niestety ta biblioteka Nokia_LCD.h korzysta z funkcji shiftOut, która może być użyta na dowolnych pinach i nie zauważa w ogóle użycia pinów SPI hardwarowego. Więc pewnie albo MEGA i biblioteka Adafruit albo zmiana pinów LCD. Oledy też są w opcji z SPI i w nich też jest do wyboru biblioteka z pełnym buforowaniem ekranu (tu...
Zacznijmy od tego, że zapis zera do jakiegoś bitu TIMx->SR powoduje wyzerowanie tego bitu, a zapis jedynki nie zmieni nic. A teraz popatrz: Załóżmy, że w tym momencie w SR jest ustawiony tylko bitCC2IF: if(TIM3->SR & TIM_SR_CC2IF) { Operacja, którą zapisałeś jako: TIM3->SR &=~ TIM_SR_CC2IF; W rzeczywistości wykona się w dwóch fazach: - faza 1: temp...
zmienna=0 -> zmienna==0? edit przez ten zapis nawet jeden bit kodu związanego z ifem i tego co jest po nim ({} lub linia po) nie jest obecny w kodzie maszynowym
To, co robi funkcja oswietl_kolumne da się łatwo zapisać w dwóch linijkach kodu bez switch(). Na rejestrach BSRR i BRR nie wykonuje się operacji logicznych - to jeden z poważnych błędów w programie. Tablice stałych należy definiowań ze słowem kluczowym const. I jeszcze ze 20 innych uwag, których nie chce mi się pisać. Skróć ten kod z 10 razy, to poanalizujemy.
Nie poszło tak prosto bo...? 4\/3!!
To by się zgadzało. Ale niestety w stm32f4xx.h nie ma takich makr co skutkuje: ..\main.c(63): error: #20: identifier "GPIO_AFRH_AFRH13_AF5" is undefined Jak więc powinien wyglądać prawidłowy zapis?
TIM1->SR = ~TIM_SR_CC1IF; - to "skasuj znacznik CC1IF" TIM1->SR &= ~(TIM_SR_CC1IF); - to "skasuj znacznik CC1IF oraz znaczniki innych przerwań timera, które zostały zgłoszone po odczytaniu rejestru SR, a przed jego zapisem".
A w funkcji print(); nie wykonujesz przypadkowo jakiś zapisów pod wskaźnik? Co jest w temp zaraz przed zapisem na kartę?
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...
A mi się najbardziej podoba pierwsza instrukcja, która włącza HSI. Bez niej procesor w ogóle nie mógłby działać, bo nie ma źródła zegara. Ciekawe, jakim cudem w ogóle ją wykonuje... :) Kod poniżej robi to, o ci Ci chodzi - jak widać, wystarczy 9 zapisów do rejestrów, żeby skonfigurować porty i timer. Nie przezsadzaj z tymi operacjami logicznymi... [syntax=c]...
Dałem radę już cokolwiek zrobić, jednak nadal mam problem z odbiorem drogą radiową (wysyłania jeszcze nie sprawdziłem). Zaraz opiszę co dokładnie nadal nie działa. W załączniku dodaję cały projekt. Kody (obecne): main.c [syntax=c]/** ****************************************... * File Name : main.c * Description : Main...
A jak daję w f_read & przed zmienną to nic nie zmienia? Zastanów się nad tym sam... Funkcji każesz odczytać 480 bajtów. Gdzie ona je niby ma zapisać, skoro podajesz jej adres zmiennej o rozmiarze 2 bajty? To że wpisujesz tam '&' nie sprawia że nagle zmienna uint16_t staje się workiem bez dna... 4\/3!!
Problem stanowi warunek while(*input) . Bez odczytów z ADC działa, bo prawdopodobnie tablice freq_window i amplit_window zostają rozmieszczone obok siebie, więc dopóki ta druga zaczyna się zerem nie ma problemu. W momencie zapisana do niej niezerowych odczytów z ADC wszystko się sypie. Przerób funkcję var_welford by pobierała liczbę elementów lub chociaż...
Czy ktoś może potwierdzić czy instrukcje zapisu i odczytu wewnętrznego eepromu w STM32L0 ze strony https://ciastkolog.pl/elektronika/stm32-... działają prawidłowo? Program piszę w STM32CubeIDE na bibliotekach HAL. Pytam bo w moim przypadku podczas odczytu z eepromu za każdym razem odczytuję wartość...
Nie pomyślałem, że to chodzi o radio. Dzięki :) Nadal zastanawia mnie dlaczego mogę zmieniać ustawienia np. częstotliwość pracy modułu, a nie chce on mi nic wysłać. A skąd wiesz, że możesz? Jak już pisalem wszystkie rejestry są write oprócz status ale w nim nie masz żadnych parametrów konfiguracyjnych (zapisanych wczesniej) do odczytu i porównania....
3-4 zapisy do rejestrów, faktycznie poczujesz to,
http://lmgtfy.com/?q=stm32+i2c+eeprom Pierwszy link: http://forbot.pl/blog/artykuly/programow...
Zwykłe symbole ASCII, tu akurat widząc taki zapis łatwo to pokojarzyć.
Jest jakiś powód dla którego używasz WWDG (okienkowego watchdoga) a nie IWDG? WWDG zresetuje układ jeśli wartość licznika spadnie poniżej 0x40 lub kiedy uaktualniasz licznik, ale jego wartość podczas aktualizacji jest większa niż to co zapisałeś do CFR. Do CFR zapisałeś 1. Więc masz "wieczny reset". Zainteresuj się IWDG lub zapisz do CFR jakąś sensowną...
Uczę się programowania dlatego proszę o pomoc w rozszyfrowaniu tego kodu: 1. Dlaczego jest taki zapis i co on oznacza [syntax=c]id = *(uint16_t *)(restart + 1)[/syntax] gdzie [syntax=c]uint8_t restart[64][/syntax] 2. Dlaczego w main.c [syntax=c] #ifdef USE_LEDS #include "led.h" #endif[/syntax] czemu nie wystarczy [syntax=c]#include "led.h"[/syntax]...
2) Jak się zabrać do tego by zrealizować taki zapis do flash (emulowanego EEPROM)? Nie mam pomysłu a niczego wartego uwagi nie znalazłem. Nie trzeba nic wymyślać bo STM ma własny, stosunkowo dobrze opisany algorytm na emulację EEPROM dla całego szeregu procesorów w tym F0. Który jest atrakcyjny, dlatego że w bardzo małym stopniu "zużywa" limit żywotności...
Na forum jest 3900 wyników z rozwiązaniem Twojego "nietypowego" i "niespotykanego" problemu ze zmienną zapisywaną w przerwaniu, co nie jest widoczne dla głównego programu... Jak to możliwe, że pomimo tak ogromnej ilości razy kiedy to problem na "v" został poruszony i rozwiązany - wciąż, niezmiennie, z regularnością atomowego zegara takie pytania pojawiają...
Dzięki za odpowiedź. Danych do kodu nie wstawię z powodów, które już podałem. Ale może znasz jakiś prostszy sposób, by użytkownik, nie mający pojęcia o przygotowaniu kodu dla mikrosterownika mógł w nim umieścić duże bloki swoich danych? Moje rozwiązanie dobrze się dotychczas sprawdza, ale chętnie poznam inne możliwości. Tak to wygląda dotychczas w pliku...
Po co funkcja? - wystarczy prosty zapis do rejestrów BSRR / BRR - krótszy zapis w kodzie, szybsze wykonanie.
Witam Mam problem ze zmianą czasu w STM32F0Discovery. Konfiguracja i inicjalizacja modułu jest dobrze wykonana - w debugerze zlicza sekundy, ustawia flagi itd. Problemy zaczynają się gdy chcę załadować do rejestru czasu TR i daty DR aktualny czas. Podczas pracy krokowej wszystko idzie ładnie - flagi się ustawiają, rejestr ładuje i wartości się zmieniają....
Flash procesorów STM32 ma wytrzymałość 1000 cykli zapisów. Korzystasz z kilku bajtów a zapisujesz całe 4096. W dodatku nie wiem po co wyrównujesz do 256 te bufory, przecież one są w RAM.
W wyszukiwarce wpisz "stm32 eeprom emulation".
Nie znam takiego sposobu. Ale jak potrzebuję to korzystam z fajnego narzędzia Freescale Embedded GUI Converter Utility. Tworzy on dla danego obrazka plik c i h i ma sporo możliwości jak sposób zapisu 8/16bit, kompresja itp. Ewentualnie bardziej karkołomny sposób jak konwersja WinHex-em za pomocą copy block->C source.
No to może czas zajrzeć do dokumentacji wyświetlacza jak się mu podaje 24-bitowe dane o kolorze, bo na pewno nie tak jak Ty to zrobiłeś (3 zapisy)? 4\/3!!
Usuń znaczniki |= |= |= ) [syntax=c]NVIC->ISER[0] = (1 << 2);[/syntax] [syntax=c]NVIC->IP[2] = (9 << 4);[/syntax] Tutaj znowu niebezpieczne przypisanie, lepiej użyć operatora |=, ewentualnie ze wstępnym wyzerowaniem odpowiednich bitów. CMSIS nie gryzie, można go spokojnie używać dla przejrzystości kodu.
Pojęcia nie mam - ale działa. Jak pisałem to wydawało mi się konieczne. Wysokie Konsylium (FC i BD , kolejność przypadkowa) też nie napisało, że źle, to przyjąłem, że jest dobrze. To działa w działającym programie. Przyznam, że nie porównywałem z Twoim kodem. Ponieważ procesor się zgadzał, to uznałem, że można wstawić mój kod do Twojego programu i zadziała....
Obawiam się, że rozmiar strony może zwiększyć tylko producent, i to na etapie projektowania układu. ;) Użytkownik może za to określić liczbę stron, których che używać.
Dobre pytanie! Musiał łączyć z sobą układy i widać miał poważne problemy, a może potrafiłby wszystko zbudować na ESP32? Podejrzewam, że może chodziło o pracę urządzenia na baterie przez rok, pełen zapis danych realizowany przez STM32, a wybudzany dosyć rzadko ESP32 miałby przesyłać te dane przez WiFi? Z drugiej strony chyba ESP32 też jest energooszczędny,...
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?...
https://obrazki.elektroda.pl/6678526600_... https://filmy.elektroda.pl/59_1553290096... https://obrazki.elektroda.pl/6296500900_... https://obrazki.elektroda.pl/9260337200_... Zapewne nic odkrywczego ale wolnej chwili udało się połączyć parę projektów i wyszło takie coś. Jeśli chodzi o hardware to...
Kopia posektorowa to zapis sektor do sektora. Miejsce jest potrzebne takie samo lub większe niż rozmiar partycji.
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...
Generalnie w AVR-ach nawet mających te nowoczesne rejestry nie da się tego zrobić jedną operacją. Musisz zapisać rejestr ustawiający i zerujący (będą to dwa zapisy) albo musisz odczytać wartość, dokonać operacji logicznych i następnie zapisać. W STM32 da się jako że jeden rejestr zawiera część zerującą i ustawiającą i da się jedną operacją zapisu można...
Ciężko odpowiedzieć na tak zadane pytanie. To tak jakbyś zapytał jak sprawdzić wartość jakiejś komórki pamięci RAM (czyli powiedzmy jakąś zmienną). No po prostu odczytując ją :D Tak samo różne opcje zabezpieczeń. One są zapisane w pamięci, tyle że FLASH. Żeby je sprawdzić to trzeba je odczytać. No inaczej się nie na napisać. Ale mała podpowiedz: Option...
Dysk po gwarancji, systemowy ;/ Skan w MHDD nie udaje się zrobić... same "?" i "#" na sektorach......... wie ktoś jak zapisać loga z MHDD? zaznaczam, że nie mam dyskietki ;/
Po pierwsze, nie w żadnej pętli, tylko w przerwaniu timera, zgłaszanym z częstotliwością np. 2400 Hz Po drugie, w każdym przerwaniu timera należy: 1. W rejestrze GPIOD->CRL/CRH ustawić wszystkie używanie linie portu jako wejścia lub Analog. 2. Do rejestru ODR zapisać jedynkę na linii wyboru kolumny, zera na pozostałych. 3. Do rejestru CRL/CRH zapisać...
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...
tadzik85 napisał: Zwróćcie uwagę na jakiś rejestr SR gdzie flagi kasuje się zerem. A chcesz skasować tylko jedną, co ST czyni nadmiernie w swoich przykładach. Są pola reserved (czyli nie spisuj nic innego niż tam jest) A jednak takie kasowanie wpisuje tam 1. Też na to zwróciłem uwagę. Tak z ciekawości - zapis do bitów Reserved przysporzył kiedyś komuś...
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
Że tak zapytam.. Takie ustawienie: [syntax=c] SCB->AIRCR=0x5FA0000|(3<<8); //skonfiguruj PRIGROUP na 4:4 [/syntax] Ustawia wszystkie 4 dostępne bity na preemption więc tak czy siak jest 16 grup priorytetów bez możliwości ustawienia podpriorytetów w grupach. A to nie na jedno wychodzi, co 16 priorytetów bez grup? W takim wypadku ten zapis: [syntax=c]...
Ja mam na stm32f205 Edit: Kod nie jest twoj ale w kodzie masz inicjalizacje interfejsu ulpi i gdzies w inicjalizacji usb masz kod gadajacy z phy ulpi. W tym przykladzie co podalem powyzej funcja odczytu i zapisu to USB_OTG_READ_REG32 i USB_OTG_WRITE_REG32, wiec moze po tych funkcjach znadz miejsce w ktorym jest komunikacja uc --> phy ulpi
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...
Nic więcej nie trzeba, tylko w środowisku wybierz właściwy układ z właściwym rozmiarem pamięci Fłash i RAM. Oczywiście układ trzeba też zasilić.
Bez bibliotek zajmuje to jedną linię z jedną instrukcją - zapis wartości do rejestru AIRCR.
Pasma 40 MHz nie, ale 40 Msps mam nadzieję że tak. Tylko chciałbym się dowiedzieć który sposób (bez stosowania dodatkowych zewnętrznych układów) będzie najszybszy. Ale przecież podaliśmy jeden sposób :) DMA na timerze. Odczytywanie wejść + zapis do tablicy + inkrementacja wskaźnika jest z automatu, a w pollingu tracisz czas na wykonanie kilku rozkazów....
zapis portu stm32 stm32 zapis flash zapis flash stm32
samsung wyświetlacz lodówka separator prądowy jakie zelazko
Dźwięk "pip" w telefonie stacjonarnym Orange - problem z połączeniami Filtr oleju w Ursusie C-385 się nie kręci - przyczyny