Andrzej_Debski Napisano Sierpień 12, 2021 Udostępnij Napisano Sierpień 12, 2021 Potrzebowałem zapisać zmienną do pamięci FALSH gdy będzie zanikało zasilanie. W tym celu w konfiguratorze w zakładce System Core/NVIC ustawiłem przerwanie PVD kontrolera napięcia zasilania procesora. W wyniku czego w main.c pojawiło się przerwanie: static void MX_NVIC_Init(void) { /* PVD_IRQn interrupt configuration */ HAL_NVIC_SetPriority(PVD_IRQn, 8, 0); HAL_NVIC_EnableIRQ(PVD_IRQn); } Aby odczytać uprzednio zapisaną wartość zmiennej dodałem po inicjacji przerwania: total_time = *(__uint32_t*) ADD_FLASH; // odczytanie z FLASH całkowitego czasu pracy Napisałem trzy funkcje: static void PVD_NVIC_Init(void) { PWR_PVDTypeDef sConfigPVD; sConfigPVD.PVDLevel = PWR_PVDLEVEL_7; sConfigPVD.Mode = PWR_PVD_MODE_IT_RISING; HAL_PWR_ConfigPVD(&sConfigPVD); HAL_PWR_EnablePVD(); } void HAL_PWR_PVDCallback(void) { if (HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, ADD_FLASH, total_time) == HAL_OK) HAL_FLASH_Lock(); } void FLASH_Erase(void) { EraseInitStruct.TypeErase = FLASH_TYPEERASE_SECTORS; EraseInitStruct.VoltageRange = FLASH_VOLTAGE_RANGE_3; EraseInitStruct.Sector = FLASH_SECTOR_7; EraseInitStruct.NbSectors = 1; HAL_FLASH_Unlock(); if (HAL_FLASHEx_Erase(&EraseInitStruct, &SECTORError) == HAL_OK) ; } Konfiguracji PVD, wywołania od PVD gdy napięcie zasilające zanika oraz wymazanie sektora w pamięci FLASH. Ponieważ korzystałem z FREERTOS umieściłem przed wejściem w pętlę: void StartTask02(void *argument) { /* USER CODE BEGIN StartTask02 */ PVD_NVIC_Init(); HAL_Delay(50); FLASH_Erase(); /* Infinite loop */ for (;;) { osDelay(1) } /* USER CODE END StartTask02 */ } Powoduje to skasowanie i przygotowanie FLASH do zapisu w chwili wywołania przerwania przy zaniku napięcia. Napięcie wygenerowania przerwania ustawiłem na 3.0 V w przywołanej już funkcji konfiguracji. To działa! Andrzej 1 1 Link do komentarza Share on other sites More sharing options...
Gość Sierpień 22, 2021 Udostępnij Sierpień 22, 2021 Na 100% skorzystam z rozwiązania jeśli zajdzie taka potrzeba.Jednakże mam pytanie- gdzie w pamięci stm32fxxxxxx zostają zapisane zmienne.STMicroelectronics w arkuszu danych twierdzi,że danej komórki pamięci można użyć jako eeprom co najwyżej kilkaset razy .Dlatego zaproponował rozwiązanie polegające na tym,że dane są zapisywane na ostatnich stronach pamięci flash.STM przestrzega przed zapisywaniem w pamięci gdzieś tam gdzie jest program bo jak ulegnie uszkodzeniu komórka pamięci to kontroler jest do wymiany.Opis emulatora eeprom jest w pliku AN4061. Gdzieś w necie można znaleźć biblioteki STM ale są to przykłady i należy je w razie czego przerabiać.O wiele lepszym rozwiązaniem jest użycie bibliotek ee-master autorstwa Nima Askari, które można znaleźć na Git Hubie http://www.github.com/NimaLTD a sposób użycia na youtube: https://www.youtube.com/channel/UCUhY7qY1klJm1d2kulr9ckw.Ponieważ używam STM32 cube ide to sposób wklejania bibliotek jest windowsowy czyli przeciągnij i upuść.Biblioteki .h do Inc,biblioteki .c do src a następnie w folderze głównym projektu refresh i po wszystkim a dalej tak jak zwykle # include ..... W bibliotece ee.c można przeczytać ,które mikrokontrolery są obsługiwane ale zawsze można pokusić się o dopisanie jakiegoś innego procka.Biblioteki zastosowałem w dwóch programach i działają doskonale.Nieprawdopodobna prostota obsługi!Polecam. Link do komentarza Share on other sites More sharing options...
Andrzej_Debski Sierpień 23, 2021 Autor tematu Udostępnij Sierpień 23, 2021 Dziękuję za podpowiedź. Przy najbliższej okazji spróbuję. Przyznam, że przy dochodzeniu do wersji jaką zaprezentowałem zapisałem coś, gdzieś i .... Musiałem wymienić płytę. Andrzej Link do komentarza Share on other sites More sharing options...
Gość Sierpień 23, 2021 Udostępnij Sierpień 23, 2021 Może uda się odzyskać płytę.Zainstaluj STM32cubeProgrammer ,podłącz płytę przez ST-Link a następnie kliknij connect.Jeśli się połączysz to kliknij dwa razy w ikonę po lewej stronie u góry ze strzałką w dół.Otworzy się okno ,po prawej stronie u góry jest Full chip erase ,kliknij.Może uda się jeszcze wymazać pamięć i wszystko będzie działać.Gdybyś nie mógł się połączyć naciśnij przycisk reset na płycie i przytrzymaj, następnie myszą najedź na connect i kliknij po czym puść przycisk reset.To puszczenie przycisku to prawie natychmiast po naciśnięciu przycisku connect.Zbyt długie przytrzymanie przycisku reset po kliknięciu connect spowoduje,że się nie połączysz.Trochę wprawy i będzie ok. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
Andrzej_Debski Sierpień 23, 2021 Autor tematu Udostępnij Sierpień 23, 2021 @szymonw Dziękuję. Sprawdzę. Muszę dostać się do uszkodzonego. Link do komentarza Share on other sites More sharing options...
Andrzej_Debski Sierpień 23, 2021 Autor tematu Udostępnij Sierpień 23, 2021 @szymonw Nie poszło ani w pierwszy ani w drugi sposób. Wykazuje błąd jak w załączniku err.pdf Link do komentarza Share on other sites More sharing options...
Gość Sierpień 23, 2021 Udostępnij Sierpień 23, 2021 Płytę odczytał .Spróbuj najpierw wgrać nowszy firmware przycisk firmware upgrade.Później podeślę plik o programie.Debugger to jak masz ustawiony w Keilu bo chyba w keilu pracujesz. Link do komentarza Share on other sites More sharing options...
Gość Sierpień 23, 2021 Udostępnij Sierpień 23, 2021 u mnie jest a po podłączeniu Link do komentarza Share on other sites More sharing options...
Andrzej_Debski Sierpień 23, 2021 Autor tematu Udostępnij Sierpień 23, 2021 @szymonw Dzięki, jeszcze powalczę. Link do komentarza Share on other sites More sharing options...
Gość Sierpień 23, 2021 Udostępnij Sierpień 23, 2021 Przesyłam część pliku opisującego stm32cube programmer w języku polskim i całość w oryginale.Proszę przeczytać i niektóre rozdziały zastosować. stm32cubeprogrammer30ston.pdf dm00403500-stm32cubeprogrammer-software-description-stmicroelectronics(1).pdf Link do komentarza Share on other sites More sharing options...
Andrzej_Debski Sierpień 24, 2021 Autor tematu Udostępnij Sierpień 24, 2021 @szymonw Dziękuję. Pobawię się. Może się uda. Link do komentarza Share on other sites More sharing options...
Gość Sierpień 24, 2021 Udostępnij Sierpień 24, 2021 Jeśli masz jakąś na 100% sprawną płytę to spróbuj przetestować połączenie z STMcube programmer.To na pewno pomoże w działaniu na tej feralnej płycie. Link do komentarza Share on other sites More sharing options...
Andrzej_Debski Sierpień 24, 2021 Autor tematu Udostępnij Sierpień 24, 2021 @szymonw Z inną płytą było połączenie. Link do komentarza Share on other sites More sharing options...
Gość Sierpień 24, 2021 Udostępnij Sierpień 24, 2021 Rozdział 2.1.4 do przerobienia.Może uda się połączyć w Connect Under Reset albo Hot Plug Connect Under Reset -> Połącz w ramach resetowania : Ten tryb umożliwia połączenie z celem za pomocą resetowania vector catch przed wykonaniem jakichkolwiek instrukcji. Jest to przydatne w wielu przypadkach na przykład, gdy cel zawiera kod, który wyłącza piny JTAG / SWD. Hot Plug : umożliwia połączenie z celem bez zatrzymywania lub resetowania. Jest to przydatne do aktualizacji adresów pamięci RAM lub rejestrów IP podczas działania aplikacji. Jeśli się nie uda połączyć w ten sposób to jeszcze pozostaje połączenie przez UART. Link do komentarza Share on other sites More sharing options...
Gość Sierpień 24, 2021 Udostępnij Sierpień 24, 2021 Podłączając przejściówkę usb/uart trzeba pamiętać by napięcie zasilające wybrać 3,3V a nie 5V bo będzie to ostateczny koniec płyty. Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »