Załóżmy, że jednym zdarzeniem chcesz zbudzić kilka układów. STM dostaje sygnał (np. od klawisza) i generuje event a wyjście eventout przekazuje go dalej (np. do innego procesora który też ma wstać, kontrolera LCD czy gdziekolwiek indziej). Wot wsjo.
Tu dyskusja na ten temat.... [url=http://www.elektroda.pl/rtvforum/to...
Zainkluduj plik nagłówkowy <string.h>, tam masz prototyp tej funkcji.
Ja mam tak: __attribute__ ((section(".bootloader&... int program_page(unsigned short *data, unsigned int adr) {... } i linker: .bootloader 0x08000000+128K-1K : { *(.bootloader) } i działa
u mnie to działa. Pomogło wykonanie instrukcji w tej kolejności: [syntax=c] SetSysClockTo24(); NVIC_SetVectorTable(NVIC_VectTab_FLASH,(... NVIC_PriorityGroupConfig(NVIC_PriorityGr... RCC_APB2PeriphClockCmd(RCC_APB2Periph_AF... ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disab... ENABLE);[/syntax] Przepraszam, jeśli odkopuję staroć,...
Zajrzyj do skryptu linkera, zobacz jaki jest rozmiar stosu. 4\/3!!
Na pewno istnieje, w końcu dekodowanie mp3 nie jest takie skomplikowane, żeby sobie STM32 z tym nie poradził. 4\/3!!
Skoro tak to spróbuj ręcznie. Patrzysz na listę błędów, znajdujesz po kolei pliki w bibliotece i dołączasz je do projektu. Nie znam iar, ale w eclipse keilu reisonanse nie wystarczy skopiowanie do wspólnego folderu, trzeba zrobić add...
ODR steruje wtedy pullupem jeśli taki tryb działania wybierzesz. Co do funkcji działających na portach, to - jak pisałem wyżej - dorobienie takiej która robi konfigurację dla więcej niż jednego pinu to 2 linijki, a taka która wystawia wartość czy ją odczytuje jest bezsensu, bo od tego masz rejestry, więc czemu nie odczytać ich wprost (ewentualnie funkcja...
Dla mnie mało czytelne są te gotowe biblioteki STM32. To nie są funkcje z biblioteki STM32 przecież... Proponowałbym pinu ustawić na funkcję alternatywną, a nie na out/in. Ewentualnie RX może zostać na in, ale TX musi być "ALT". 4\/3!!
Moim zdaniem nie jest to wina kompilatora. Powinieneś sprawdzić rozmiar sterty, ponieważ funkcja malloc właśnie w tym obszarze rezerwuje pamięć.
myślałem że mogę wpisać praktycznie częstotliwość taktowania procka. Po zastanowieniu wiem że to niemożliwe. Podzielnik przez 8 można włączyć. Dodano po 4 Nie każdy pływa z zamiarem udziału w olimpiadzie ;-) Jest coś takiego jak hobby, ciekawość... na różnym poziomie wiedzy. Tu użyj CubeMX. Prosto, szybko i przyjemnie. Dużo kursów jest na Forbocie,...
nie możesz znaleźć == nie ma == nie trzeba włączać (; W razie wątpliwości zawsze można poszukiwać odpowiedników w świecie STM32L - wbrew pozorom STM32F4 są bardziej podobne do STM32L niż do STM32F1 - moduł GPIO jest praktycznie identyczny - różni się prędkościami portów, co zrozumiałe porównując prędkość jednego do drugiego. 4\/3!!
Długie? Nie. Są odpowiedniej długości by zawierać odpowiednią informację czego dotyczy. Rozwiązanie? Napisać właściwe makro lub funkcję.
A, masz rację. Raczej kompilator (; Teraz powinieneś go oficjalnie przeprosić za "głupi" (; Uwierz, że algorytmy jakie pracują w kompilatorze żeby wykrywać m.in. takie rzeczy (generalnie algorytmy optymalizacji) są poza naszymi możliwościami pojmowania, bo to jest wyższa matematyka (; Np. http://en.wikipedia.org/wiki/Polytope_mo... 4\/3!!
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...
Funkcje ta masz jedynie w skompilowanej postaci. Jest ona częścią libgloss, która jest częścią newlib (biblioteka standardowa w Twoim toolchainie): https://github.com/bminor/newlib/blob/dd...
No ale teraz kilka wątpliwości - biorąc pod uwagę fakt, że STM32 którego używam do tego zadania nie ma żadnego komparatora, Ale przetwornik ADC w STM32 ma funkcje Analog Wachdog(przynajmniej tak mówi Reference Manual jaki mam na dysku), czyli coś na kształt komparatora(dyskryminatora) okienkowego. Można to wykorzystać.
W plikach ".cpp" extern "C" [syntax=c]extern "C" void SysTick_Handler(void) { GPIOA->MODER = 0; }[/syntax]
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...
instrukcja BLX oznacza Branch with Link and Exchange. Kluczową kwestią jest owe Exchange. Chodzi o to, że instrukcją tą można zmienić tryb instrukcji z ARM na Thumb (lub odwrotnie) lub go nie zmieniać. Jeśli ostatni bit adresu (czyli twojego rejestru R3) jest zapalony, to rdzeń skoczy pod adres ignorując ten bit (traktując go jako zero, bo PC i tak...
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ć.
Zwykle w pliku źródłowym inkluduje się jego plik nagłówkowy, a więc w komunikacja_I2C.c załącz komunikacja_I2C.h
Pewnie przez to: #ifdef USE_FULL_ASSERT
bo masz stos za mały to jest zmienna lokalna i ona się tworzy na stosie, w crossworksie standardowo jest 128-bajtowy stos dla stm32 trzeba w propertiesach projektu poszukać i zmienić
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!!
Chodzi mi jak na stm zaimplementowałeś/skad wziales funkcje malloc/free.
jeśli chodzi o inne przerwania od układów peryferyjnych to poza ustawieniem rejestrów tego układu muszę włączyć to przerwanie i czy tu wystarczy funkcja z core_cm3 np. NVIC_EnableIRQ( RTC_IRQn ); tak I dlaczego nie musiałem włączyć globalnych przerwań żeby SysTick działał?;] Przerwanie SysTick jest w grupie exceptions, ich się nie da wyłączyć w NVIC....
A jakie to ostrzeżenia generuje kompilator i dlaczego w ogóle je generuje? Ja mam już swoją teorię nt. Twojego błędu - brak deklaracji zapowiadającej, na co narzeka kompilator. Zgadłem?
Wywołanie _sbrk() nie jest alokacją pamięci. 4\/3!!
To co wpisujesz do rejestru MOAR to jest "adres adresu" (wskaźnik na wskaźnik) a raczej nie o to Ci chodzi... Tym bardziej że w tym kontekście tab to zmienna lokalna, więc i tak nie zadziała jak trzeba. DMA1_Stream6->M0AR = (uint32_t)&tab; 4\/3!!
Do linkowania (do którego używasz -gcc a nie -ld) też trzeba podawać opcje cpu i -mthumb. Ewentualnie zastosuj SPRAWDZONE toolchainy - np codesourcery. 4\/3!!
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!!
Pinów GPIO nie trzeba przypadkiem skonfigurować na funkcję alternatywną? 4\/3!!
Myślę, że ten post będzie dla Ciebie przydatny: https://www.elektroda.pl/rtvforum/viewto... Jeżeli czegoś tam nie poruszono, to daj znać. Postaram się uzupełnić. ;)
W funkcji xmit_spi_multi() masz błąd. 4\/3!!
Spróbuj korzystać z funkcji NVIC_EnableIRQ() oraz NVIC_DisableIRQ(). 4\/3!!
Też nie bardzo wiem jaka jest nazwa (wektor) funkcji tego przerwania, więc mam tak: Przecież wystarczy zajrzeć do tablicy wektorów i wszystko stanie się jasne... Można też zajrzeć do manuala, aby dowiedzieć się, że system CSS jest zmapowany na przerwanie NMI. Nie wiem czy czekanie na odpowiedź na forum jest naprawdę szybsze... 4\/3!!
Zapewne przez ten fakt część funkcji nie może zostać zinlinowana lub odpowiednio zoptymalizowana..
Niestety program sie nie kompiluje bo wyskakuje mi błąd "Type 'RCC_APB2Periph_GPIOB' undeclared (first use in this function)" Tam był przykład dla STM32F1 dlatego zmień na: RCC_AHBPeriph_GPIOB Najprościej opóźnienie realizuje się tak: [syntax=c]for (volatile uint32_t i = 0; i < 0xFFFFF; i++);[/syntax]
Osobiście wyświetlacz tego typu inicjalizuję wysyłając do niego 0x3 3 razy a następnie 0x2 1 raz. Pomiędzy pierwszym półbajtem a kolejnymi jest 5 ms przerwy, pomiędzy kolejnymi - 200 us. Po tej sekwencji wysyłam już normalne komendy z ilością linii i czcionką, włączającą wyświetlacz itd. W Twojej funkcji main() nie ma nigdzie _WYWOŁANIA_ funkcji inicjalizującej...
Z tego co Pan tu pisze to faktycznie, jeśli lewa strona da 1 to prawa nie będzie sprawdzona... ja myślałem że sprawdza obie strony. [syntax=c]while( !( I2C1->SR1 & I2C_SR1_ADDR ) && !( I2C1->SR2 & I2C_SR2_BUSY ));[/syntax] W takim razie pewnie trzeba będzie użyć tego wyrażenia, bo na pewno sprawdzi obydwie strony... chyba że lewa da 0.
Odpowiem może "wierszem" - poniżej dosyć dobrze przetestowane przerwanie od SPI występującego w STM32F4: https://github.com/DISTORTEC/distortos/b... A tu funkcja nadawania: https://github.com/DISTORTEC/distortos/b...
2. Sprawa to stos. Jest on sprzętowy. Nie jest.
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))"...
ehh... __nop(); //wstawia dokladnie jeden NOP, dziala nawet na -O3 -Otime LIPA [syntax=C] __asm void nop_asm (void) { NOP BX LR } [/syntax] Po co skok i return tylko po to aby wykonac JEDEN nop? Bezsens. Nop trwa jeden cykl, a wywolanie i powrot powyzszej funkcji to kilka cykli. I tego nie da sie oczywiscie zmienić, bo keil nie inline-uje funkcji...
Podejrzewam, że właściwszą funkcją będzie jakieś MemoryWrite(). Przykładów jej użycia znajdziesz sporo.
To jest jedyna potrzebna funkcja vTaskStartScheduler() 4\/3!!
Autor wątku w dziale "początkujący" zadał pytanie o podstawy języka. Po 10 postach mamy już wspomniane atrybuty gcc, "pragmy" kompilatora, wskaźniki na funkcje, zamieszanie związane z słówkiem "inline", sugestie że kompilatory czasem robią wyjątkowo dziwne rzeczy (choć wiadomo że w tym przypadku autor używa gcc). Czekam aż ktoś napisze coś o undefined...
No bo pomyśl. Najpierw ustawiasz wyjście push-pull a potem dajesz mu stan wysoki. A zastanów się co się dzieje w czasie gdy ustawisz wyjście push-pull i program przechodzi do ustawiania stanu wysokiego? Na wyjściu jest 0 bo jest to domyślna wartość. A więc najpierw daj tą super funkcję GPIO_SetBits a dopiero potem tą jeszcze bardziej super funkcję GPIO_Init.
nic nie dało. dalej w RAM są tablice oraz ciąg z wywołania funkcji
Zawiodłem się- nie ukrywam. Mimo tego nie zaprzestane z nich korzystać, bo np. przy konfiguracji peryferiów są bardzo przejrzyste. Po za tym trzeba zmienić podejście do programowania... Chciałbym wiedzieć z czego to wynika, czy tak duże opóźnienia powstają na skutek częstego wywoływania funkcji API STM32?
Dzięki za odpowiedź. Lutowanie nie wchodzi w grę zatem kupuje przejściówkę usb-uart. Mając Nucleo nie potrzebujesz żadnej przejściówki jeśli chcesz "pogadać" z ESP z komputera, bo Nucleo ma więcej Uartów niż tylko ten jeden podpięty do ST-Linka i wystarczy tylko prosty programik by te Uarty programowo połączyć. I co wyślesz do Nucleo, wyląduje w ESP...
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.
Problem tkwił w innej nazwie funkcji przerwania od DMA dla kanałów 2 3 zdefiniowanej w pliku startup.s dla środowiska Keil i STM32CubeIDE.
Moja funkcja, po poprawieniu błędu (brak &) zapisuje wersję pierwszą powyżej.
Powinno się dać, JTAG też ma swój pin reset, który blokuje wykonywanie się kodu (gdy pin = 0) Chyba, że w st-linku o tym nie pomyśleli :)
Witam, Za pomocą CubeMX wygenerowałem projekt z systemem FreeRTOS oraz biblioteką LwiP aby uruchomić serwer WWW. Wszystko uruchomiłem tylko problem jest taki że mam tylko deklarację funkcji do odczytu z buforu i wysłania do stosu lwip : MX_LWIP_Process(); Ta funkcja powinna być wygenerowana w CubeMX? Dodano po 16 Oczywiście na ping odpowiada.
Sprawdź działanie na mojej funkcji programowej w C. Tym sposobem wyeliminujesz ewentualne inne błędy gdzieś po drodze pomiędzy STMem a programem w Delphi.
Jest dużo implementacji funkcji itoa w sieci i są one porządne, można sobie z nich skorzystać.
Dobrze podejrzewasz :) Ustaw piny w funkcji LCD_CtrlLinesConfig. Ostatnio pisze programy pod LPC'kami, zwlaszcza LPC1114 (dla mnie to taki 32 bitowy AVR :), wiec dawno stm'a nie mialem w reku. W poniedzialek zajrze i cos ewentualnie podpowiem.
1. Wykasuj wszytko co masz w pliku main.c 2. Dopisz do niego : #include "stm32f10x_rcc.h" int main(void){ RCC_ClearFlag(); //jakaś przypadkowo wybrana funkcja z biblioteki STM32 } 3. Umieść w tym samym katalogu co plik main.c pliki: stm32f10x_rcc.c stm32f10x_rcc.h 4. Dodaj do projektu plik stm32f10x_rcc.c (poprzez wybranie "Add Existing File...") 5....
Nie, nie. Jest ok ;] Osobiście nie stosuję takiego zapisu dla tablic dlatego tak pytam. Dodaj ten config od RCC i daj znać. Bez tego nie miało prawa działać. Chyba, że gdzieś jakaś inna funkcja niejawnie to robiła, nie wiem.
Swego czasu aby STemWin działało, trzeba było w STM32 właczyć układ peryferyjny odpowiedzialny za liczenie CRC. Służyło to temu, że w STemWin był wkompilowany na stałe test czy owe CRC działa, co miało potwierdzić, że biblioteka używana jest z STM32, a nie np. z LPC17xx. Zobacz jakie wartości są w tych adresach 0x80069c2 i 0x80069ca.
Reasumując na przyszłość : Rozróżniać lseek() od fseek() :) I korzystać z sprawdzonych źródeł z opisem działania funkcji.
Po pierwsze - nie wybrałeś która niby funkcja alternatywna ma być na pinie. Po drugie - pętle oczekujące w funkcji WriteSPI masz całkowicie źle. Po trzecie - czemu mamy się domyślać, że chodzi Ci o STM32F4? 4\/3!!
Mam dokument PM0056, to chyba chodzi o ten, ale musze poszukać w ARM. Ok, więc zostanę przy tych funkcjach.
Czy do funkcji HAL_UART_Receive_IT na pewno powinien być przekazywany adres wskaźnika do struktury UART_HandleTypeDef?
Wystarczy że w funkcji wyświetlania tekstu nie będziesz modyfikował wejściowego stringa. Czyli np. tak: if(*text == '(at)') Wyswietl(0);
No to sobie napisz program który będzie stopniowo zmnejszał ARR i obserwuj oscyloskop. Zrób przerwanie przy wystąpieniu błędów DMA. Wyciągnij wnioski oczywiście można używać innych ale po co jak są te. Przy okazji są one mocniej związane z DAC.
Akurat C testuje na STM32 :) Napisałem funkcję do czytywania z czujnika który wystawia w swoim rejestrze int16_t, ale u mnie pobierana jest w postaci 2 bajtów uint8_t. Chcę ją przesłać do PC i wyświetlić jako int16_t.
Funkcja z tego pierwszego wywoływana jest przez różne funkcje standardowe typu printf(). Funkcja z tego drugiego wywoływana jest pewnie przez startup albo przez jakąś inną funkcję z bibliotek coocoxa.
Ok. Przeszukaj pliki w swoim projekcie po nazwie "SysTick_Handler". Znajdziesz tą nazwę w pliku asemblerowym (lub w pliku *.c) w tablicy wektorów przerwań. Ta tablica zawiera między innymi adres funkcji o nazwie SysTick_Handler. Linker umieszcza tablicę pod odpowiednim adresie w pamięci (zgodnie z datasheet procesora).
Niezłe... Do odczytu (wprost) wartości jednej rejestru używać funkcji z biblioteki STM32 i jeszcze rozpaczać nad tym że nie działa... Ten temat jest o przykładach NIE korzystających z biblioteki, nie wiem więc skąd pomysł na uzyskanie w nim pomocy z tym dziwacznym tworem... 4\/3!!
Linker nie widzi tych funkcji, które są wypisane, napewno zaincludowałeś przed main-em te fragmenty bibliotek od ST, które zawierają te funkcje?
z tego co pamiętam to piszesz "%#4x", tutaj masz opis: http://www.cplusplus.com/reference/cstdi... Czasami zdarza się że nie chcemy wykorzystywać printfa wbudowanego (jest bardzo kosztowny rozmiarowo z obsługą wszystkich flag). Wtedy warto napisać własną funkcję, a jest ona banalnie prosta.
Nie wiem dlaczego to nie działa. Mam oryginalnego j-linka, chińskiego j-linka, i ulinka2, i na każdym da się programować, debuggować i kasować różne STM32 bezzonkowo. Keil 4.03, MDK-ARM 4.10. Nie podoba mi się RAM for algorithm. W STM32 RAM zaczyna się pod adresem 0x20000000 a nie 0x10000000, to spora różnica... Popraw to, i powinno chodzić. Loader...
przy debugowaniu, warto zmniejszyć poziom optymalizacji, nawet do -O0 Ogólnie doczytałem, że masz rację. (ciekawy artykuł znalazłem np. tu: Ciekawie się zapowiada. Korzystam z Atollic TrueStudio (oparty na Eclipse). Jak zmniejszyć poziom optymalizacji? Bo chyba się jeszcze w tym gubię ;) Właściwości Projektu->Settings->Tool Settings->MCU GCC Compiler->Optimization->Optimization...
A czemu ma NIE być podzielone na porty? Przecież ten układ NIE podzielony na porty z funkcjami alternatywnymi zajmie Ci chyba kartkę A3... Sam mam symbol 100pinowego STM32 z funkcjami alternatywnymi PODZIELONY na porty i części ułożone blisko siebie zajmują całą stronę A4... 4\/3!!
Próbuję pożenić template Freddiego (stm32_blink_led) z StdPeriph Ale to widziałeś? http://www.freddiechopin.info/pl/artykul... Ma ktoś pomysł co może być nie tak ? W skrypcie linkera należy ustawić rozmiar stosu dla przerwań - domyślnie jest zero, co zwykle źle się kończy. Ustawiłeś...
Zawsze możesz podejrzeć funkcje SPL.
Polecam zostawienie przykładów z książki w spokoju, ponieważ oparte są na starej wersji biblioteki, przez co jest bardzo dużo z tym problemów. Polecam http://www.siwawi.arubi.uni-kl.de/avr_pr... skorzystanie z tego przykładu - w tym rozwiązaniu jest zaimplementowany terminal z większością funkcji...
Jak zajrzysz do funkcji SysTick_Config() to wszystko stanie się jasne... Ta funkcja akurat jest z CMSISa, więc trochę szkoda że ARM też nie umie pisać kodu, który spełnia PODSTAWOWE zasady programowania... W tym przypadku ta funkcja jest 100% pogwałceniem zasady http://en.wikipedia.org/wiki/Single_resp... ... 4\/3!!
Liczby pochodzą z dokumentacji biblioteki funkcji DSP dla STM32 - http://www.st.com/mcu/download2.php?file... Co do "rzędu" to - jak już pisałem - 32-taps dla FIR, natomiast IIR opisany jest jako "16-bit canonic form, 4 biquad IIR filter". Co ciekawsze...
Przy okazji walki z "magicznymi cyframi" - zapewne korciło Cię (może nawet tak zrobiłeś) żeby do funkcji podać rozmiar "4", natomiast o wiele lepszym rozwiązaniem jest napisać "sizeof (nazwa_twojej_zmiennej)". 4\/3!!
składa się z 8080, 8224 i STM32 Funkcję pomocnicza pełni 32-0bit uC o wydajności 90 lub więcej DMIPS w systemie z uc 8-bit 0,7MIPS :-) Kiedyś myślałem o 4004.
Uruchomiłem kod, który wkleiłeś. Dopisałem tylko definicje dla Bank_NAND_ADDR ( 0x70000000 ), CMD_AREA ( 0x00010000 ), ADDR_AREA ( 0x00020000 ) i DATA_AREA ( 0x00000000 ). W funkcji FSMC_NAND_ReadID() pominąłem zapis do struktury i odczytuję zmienną data - mam w niej prawidłowe dane. Dodano po 8 Może nie włączyłeś taktowania dla FSMC? Ja mam to w innej...
Spróbuj może przekopiować to do osobnej tablicy znaków (zakończonej znakiem '/0') i użyć funkcji atof() z stdlib.h.
Przerwanie powinno być w porządku, ale co do inicjacji samego Timera to nie jestem pewny. Po prostu nie mam zaufania do funkcji API dla Timerów. Czy udało Ci się uruchomić cokolwiek związanego z licznikami na tych funkcjach?
To tak teraz wygląda ale wcześniej dawałem tam delay-a i wyświetlały mi się współrzędne na moment i zaraz pojawiały się inne wartości tak jakby coś się pod te zmienne podstawiało i innej funkcji.
Ok zmienię na bleeding-edge-toolchain i zobaczymy. Nawiasem nie bardzo chce mi się wierzyć, że z moim kompilatorem nikt nie miał problemów z tymi funkcjami.
w załączniku archiwum z kilkoma ciekawymi plikami dla STM32F0. 1. Cortex-M0.ld oraz STM32F051x8.ld Skrypty linkera - w projekcie używać należy bezpośrednio tylko tego drugiego, który zaś w środku dołącza ten pierwszy. Podział spowodowany jest tym, że "mapa" pamięci generalnie jest wspólna, więc wszystkie takie rzeczy są w tym Cortex-M0.ld, zaś w tym...
No w sumie nic dziwnego/pamięciożernego tam nie znalazłem, includuje sobie parę funkcji z arm_math i tabele do FFT .
Myślałem, że ta funkcja nazywa się strstr().
Sprawa się rozwiązała i nie chodziło tu o długość stosu. Fakt, formatowanie tego kodu też daje wiele do życzenia. Tak to jest jak się część kodu zapożycza z innych źródeł... Problem był z linią: else GPIO_ResetBits(GPIO_PORT_LCD void STM32_LCDSendCmd(uint8_t LCDcmd) { GPIO_ResetBits(LCD_GPIO_PORT, LCD_RS_PIN); GPIO_SetBits(LCD_GPIO_PORT,...
Abstrahuję tu juz od sprintf i funkcji piszących na ekranie, których w tym miejscu **absolutnie** nie powinno być. Ogólnie masz racje, tutaj sprintf jest już po pomiarze (drugie przerwanie i tutaj jest zmierzony okres przebiegu). gu32_T1 < początek pomiaru gu32_T2 < koniec pomiaru Jednak wytyczne się zmieniły i można do moich celów zrobić inaczej....
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...
Witam kolegów. Nie chcę zakładać podobnego tematu, więc zapytam się tutaj. Czy jeśli mam obsługę I2C na przerwaniach, to jest taka możliwość, aby całkowicie zawiesić STM32 przy wysłaniu z funkcji I2C_CR1_START ? Przy założeniu, że coś jest niedopracowane w obsłudze przerwania ?
A tablica wektorów na 100% poprawna? Jak podejrzysz w pliku .lss wektory, to pod właściwym adresem jest adres Twojej funkcji obsługi? P.S. Ten plik na pewno jest main.c, a nie main.cpp? Bo w tym drugim przypadku faktycznie uruchomienie przerwań wymaga kilku wciśnięć klawiszy więcej. 4\/3!!
Nie mogę sobie poradzić z odczytem pamięci która jest podpięta pod stm32discovery. Funkcja którą mam odczytuje jedynie 1 stronę z pamięci NAND. Patrzyłem na przykłady które są dołączone do stlink utylity lecz przykładu do NAND nie znalazłem. Może ktoś posiada źródła do przykładu z kością NAND512W3A lub podpowie co dodać do mojej funkcji żeby czytała...
stm32 optymalizacja jednej funkcji generator funkcji pochodne funkcji
przykładowe programy atmega odzysk danych nokia denon rezystor
Naprawa prostownika SL 100: Diagnostyka i typowe usterki Uszkodzony układ pomiaru prądu w prostowniku Jungheinrich SLT 100