Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B

tyrreus 02 Lut 2012 20:35 4696 37
  • #1 02 Lut 2012 20:35
    tyrreus
    Poziom 9  

    Witam,

    napisałem pierwszy prosty program - chce unikać korzystania z dostarczonej przez producenta biblioteki.

    Program kompiluje się, ale nie działa. Proszę powiedzcie mi czego zapomniałem co powinno być dodane ekstra - czy procesor trzeba specjalnie inicjalizować, czy wystarczy włączenie zegara na wybranym porcie i konfiguracja gpio?

    kod:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Po zresetowaniu procka wszystkie diody mi sie świecą. (diody działają na PB8 - PB15)

    Programowane przez gdb - więc jak potrzeba coś więcej z debugera moge dorzucić.

    Może znacie jakiś kurs - wskazówkę jak programować te uC bez użycia dostarczanych libów?

    Pozdrawiam

    0 29
  • Arrow Multisolution Day
  • #2 02 Lut 2012 20:54
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Po pierwsze - "bez libów" to tutaj każdy na forum rozumie nie korzystanie z FUNKCJI zawartych w STM32 Standard Peripheral Library, ale korzystanie z nagłówka stm32f1x.h, bo dodawanie swoich definicji jest ... bez sensu.

    Po drugie - zajrzyj do tych dwóch tematów i w efekcie na moją stronę:
    https://www.elektroda.pl/rtvforum/topic1313509.html
    https://www.elektroda.pl/rtvforum/topic1339518-0.html

    4\/3!!

    0
  • Arrow Multisolution Day
  • #3 04 Lut 2012 13:34
    tyrreus
    Poziom 9  

    Hej,

    przeanalizowałem zamieszczone przez Freddiego linki i mam do nich parę uwag:

    Cytat:


    Temat jest poświęcony konfiguracji środowiska - co dla mnie w sumie w tej chwili jest sprawą drugorzędną - używam Vima, więc nie odpowiada to na moje pytanie dotyczące inicjalizacji procesora.

    Cytat:


    Zaczyna się słowami:

    Cytat:
    Na swojej stronie ( www.freddiechopin.info ) w dziale Download > ARM > Przykłady umieszczone zostały dwa przykładowe projekty pod Eclipse


    Co również nie koniecznie dotyczy tego na czym mi zależy.

    Chcę poznać ten uC od podszewki - napisać chociaż jeden prosty program bez korzystania z "stm32f1x.h" - bo po przesiadce na assemblera na nie wiele mi to przyda. Więc ponawiam pytanie, co należy zrobić - w jaki sposób zainicjować mikrokontroler, żeby zaczął działać?

    - Jakie rejestry poustawiać - które są konieczne do uruchomienia mikrokontrolera?
    - Ile czasu czekać na ustabilizowanie zegara?
    - Czy dodatkowo w programie wskazać z którego miejsca w pamięci ma się zacząć ładować program?
    - Co to są wektory resetu (może coś poplątałem) - czy je trzeba ustawić a jeżeli tak to gdzie?
    - etc.

    Czego brakuje do uruchomienia zamieszczonego przeze mnie programu? Co powinienem dopisać, czego zapomniałem.

    Chcę uruchomić GPIOB na 2 MHz jako wyjście push-pull.

    Owszem, jeżeli macie jakieś linki poruszające konkretnie TEN temat to też bym poprosił bo z przyjemnością się w nie wczytam. Mogą być po angielsku.

    Nie pogardzę również jakimś sensownym wprowadzeniem do programowania w assemblerze.

    Oto linki które przeglądałem (żeby w razie czego nie dublować):

    Cytat:


    Pozdrawiam

    0
  • #4 04 Lut 2012 13:38
    gaskoin
    Poziom 38  

    tyrreus napisał:

    Cytat:


    Zaczyna się słowami:

    Cytat:
    Na swojej stronie ( www.freddiechopin.info ) w dziale Download > ARM > Przykłady umieszczone zostały dwa przykładowe projekty pod Eclipse


    Co również nie koniecznie dotyczy tego na czym mi zależy.

    Chcę poznać ten uC od podszewki - napisać chociaż jeden prosty program bez korzystania z "stm32f1x.h" - bo po przesiadce na assemblera na nie wiele mi to przyda. Więc ponawiam pytanie, co należy zrobić - w jaki sposób zainicjować mikrokontroler, żeby zaczął działać?

    - Jakie rejestry poustawiać - które są konieczne do uruchomienia mikrokontrolera?
    - Ile czasu czekać na ustabilizowanie zegara?
    - Czy dodatkowo w programie wskazać z którego miejsca w pamięci ma się zacząć ładować program?
    - Co to są wektory resetu (może coś poplątałem) - czy je trzeba ustawić a jeżeli tak to gdzie?
    - etc.
    (...)


    A co za różnica pod co jest projekt. Masz pliki C, masz startup w asmie masz skrypt linkera, masz tam wszystko. Zaglądaj i zobacz jak jest zrobiony podstawowy rozruch układu. Nie widzę różnicy między C a asmem w kwestiach inicjalizacyjnych.

    0
  • #5 04 Lut 2012 13:55
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No właśnie... Projekt może i jest pod Eclipse, ale Makefile, kod, skrypty i reszta plików są pod GCC wraz ze standardowym "oprzyrządowaniem", więc gdzie problem? Poza tym jeśli chcesz zobaczyć "co trzeba zrobić, w jakiej kolejności" to... hmm... skoro ten projekt działa (a działa), to raczej wszystko jest tam zrobione we właściwej kolejności i tak jak trzeba.

    Zaś używanie STM32 bez nagłówka stm32f1x.h to niezły hardcore, nawet nie próbuję dociekać po co tak się ograniczać, bo to raczej jest "beyond comprehension". W swoim kodzie próbujesz z niego niekorzystać, robiąc dokładnie to samo co już tam jest zrobione (definicje rejestrów itd.). To tak jak ja bym się upierał przy nieużywaniu uint32_t a definiował w swoim programie typ u32 we własnym nagłówku... Choć nie, to ma sens oszczędzania kilku znaków chociaż. Generalnie ten stan ma nawet naukową nazwę - http://en.wikipedia.org/wiki/Not_Invented_Here .

    4\/3!!

    0
  • #6 04 Lut 2012 14:14
    gaskoin
    Poziom 38  

    tyrreus napisał:

    Nie pogardzę również jakimś sensownym wprowadzeniem do programowania w assemblerze.


    Każdy asembler jest trochę inny więc nie ma też za bardzo sensu uczyć jego "składni" bo ten język rządzi się trochę innymi prawami. Żeby się umieć nim posługiwać często nie trzeba mieć 10 lat doświadczenia na plecach, wystarczy wiedzieć jak co działa.

    Zawsze programowałem mikrokontrolery w C, ale jak zaszła potrzeba napisania czegoś w asm to jakoś nie było problemu żeby to zrobić, wystarczy lista rozkazów i jedziesz z koksem :P

    W ogóle ciekawi mnie, po co chcesz znać ten układ aż tak dobrze ?

    0
  • #7 04 Lut 2012 14:20
    tyrreus
    Poziom 9  

    Nie no nie chodzi o ten stan opisany w uszczypliwej uwadze. Chodzi o dokładne poznanie, praktyczne przećwiczenie tego jak to działa.

    Nie mówię, że nie będę używał dostarczonych plików nagłówkowych bo w przyszłości pewnie będę.

    To jest jak z kranem:

    odkręcasz wodę i leci woda - ok - to wam wystarcza, natomiast ja chciał bym wiedzieć skąd ta woda w tym kranie się bierze.

    Powiedzmy "chcę" zbudować mały działający model przepompowni - co nie oznacza, że będę z niego praktycznie korzystał i zaopatrzał nim swój dom w wodę - ale będę szczęśliwszym człowiekiem jak poznam jak ta przepompownia jest zbudowana, jak działa, że żeby działała potrzebny jest silnik który zazwyczaj jest zasilany prącem elektrycznym (przez co dla czego jak bedzie potrzeba nie użyć spalinowego), etc.

    Czy nikt nie potrafi udzielić odpowiedzi w taki sposób:

    "Żeby uruchomić mikrokontroler, należy go zainicjalizować, żeby to zrobić, musimy ustawić w rejestrze takim a takim to i to. Domyślnie uruchomi się wbudowany zegar więc tego nie trzeba konfigurować, natomiast trzeba ustawić wartość wektora resetu na takie i takie coś, który ustawia się wpisując odpowiednie wartości w to i to miejsce w pamięci."

    Nie bawi mnie do końca powielanie schematów:

    - Jak zainicjalizować mikrokontroler do pracy?
    - Użyj tej biblioteki która zrobi wszystko za Ciebie.
    - A jak ona działa?
    - Nie wiem ale zrobi to co potrzebujesz.
    - A skąd wiesz co potrzebuje?
    - Nie wiem ale na pewno ta biblioteka rozwiąże wszystkie Twoje problemy.
    - No dobra ale mimo wszystko chcę wiedzieć JAK ona działa?
    - Działa i już, po co drążyć temat. Po prostu jej użyj. A jak chcesz wiedzieć jak - wejdź na moją stronę, a poza tym masz syndrom Not Invented Here.


    Spróbujcie popatrzeć na problem z mojego punktu widzenia.

    0
  • #8 04 Lut 2012 14:22
    gaskoin
    Poziom 38  

    Wystarczy poczytać dokumentacje dostarczane przez producenta.

    Upierasz się z tym nagłówkiem, może najpierw zerknij jak to Freddie zrobił, bo tam są ustawiane bezpośrednio REJESTRY i nie ma tam wcale głupiej biblioteczki która ustawia za Ciebie wszystko jednym poleceniem Init. Poza tym to wszystko jest opisane w manualu i jak naprawdę chcesz poznać wszystko od podszewki to właśnie tam należy zaglądać bo jak to napisałeś - większość tu na forum (z paroma wyjątkami) i nie tylko na forum, używa durnej biblioteki od ST i oni Ci nie pomogą.

    My też Ci nie pomożemy, bo nie znamy kodu maszynowego tych procesorów, a do tego chyba zmierzasz :)

    0
  • #9 04 Lut 2012 14:28
    tyrreus
    Poziom 9  

    Cytat:
    W ogóle ciekawi mnie, po co chcesz znać ten układ aż tak dobrze ?


    Może kiedyś będę chciał zaprojektować jakiś swój układ więc warto wiedzieć dokładnie jak one działają ;)

    Trochę jak z religią uwierz, że Bóg jest i już - bo tak jest napisane i wszyscy to wiedzą.

    W kwestii "jednym poleceniem Init":

    Fragment ze strony:

    Cytat:
    w linii C_DEFS dodatkowo dopisujemy jeszcze -DSystemInit=low_level_init_1 - spowoduje to wywołaniem funkcji SystemInit() (z biblioteki) w startupie tuż przed wywołaniem funkcji main() - jest to wymagane przez aktualną konwencję biblioteki (...)

    0
  • #10 04 Lut 2012 15:00
    Freddie Chopin
    Specjalista - Mikrokontrolery

    No masakra... Czy ty w ogóle czytasz ze zrozumieniem? Odsyłamy Cię do przykładów, a ty cytujesz artykuł o tym jak połączyć przykłady z biblioteką... I to jeszcze gdzieś w środku, bo nawet chyba nie przeczytałeś pierwszej strony, bo z niej jasno wynika jaki jest mój stosunek do biblioteki, że przykłady NIE SĄ z nią sprzęgnięte itd...

    Jeśli Twoje czytanie ze zrozumieniem wygląda tak jak w tym temacie, to coś słabo widzę tą "przepompownię"... Pozatym Twój przykład doskonale pokazuje to o czym mówimy - NAJPIERW masz w domu wodę, a potem sobie budujesz przepompownię. Ty zaś chcesz koniecznie zacząć "od d(rugiej) strony".

    Ściągnij przykłady (plik .zip, w którym jest kod, skrypty itd.), a nie czytaj artykuł, który jest o czymś zupełnie innym...

    http://www.freddiechopin.info/index.php/pl/download/category/6-przyklady

    Możesz dalej się obruszać, że odsyłamy Cię do czegoś zamiast odpowiadać na pytania, ale czemu mielibyśmy na nie odpowiadać po raz stutysięczny? Przecież "wszystko zostało już powiedziane" - wystarczy ściągnąć i przejrzeć, a potem pytać w razie wątpliwości.

    4\/3!!

    0
  • #11 04 Lut 2012 15:30
    tyrreus
    Poziom 9  

    Panowie, nie obruszam się tylko Frddie odesłałeś mnie do artykułów na swojej stronie, są dwa:

    - Przykłady dla STM32 + STM32F10x Standard Peripherals Library
    - ARM toolchain - tutorial

    Biorąc pod uwagę tytuły, który jest o NIE używaniu "Standard Peripherals Library"?

    Odpowiedz w temacie zaczęła się od przekierowania na tematy związane z konfiguracją środowiska.

    Po czym jak poprosiłem o dalsze wyjaśnienia "zostałem puszczony na drzewo".

    Jak znajdę odpowiedź na zadane pytania napiszę post, żeby w przyszłości nikt nie miał takich problemów jak ja.

    Nie mniej jednak dziekuję za wskazanie jakiś poszlak oraz kierunków które mogę przeanalizować.

    Pozdrawiam

    P.S.
    Uśmiechnijcie się ;)

    0
  • #12 04 Lut 2012 15:50
    Freddie Chopin
    Specjalista - Mikrokontrolery

    tyrreus napisał:
    Frddie odesłałeś mnie do artykułów na swojej stronie, są dwa:

    - Przykłady dla STM32 + STM32F10x Standard Peripherals Library

    Zacytuj w którym miejscu odesłałem Cię do tego właśnie artykułu.

    Dalej idziesz w zaparte i nie obejrzysz tego przykładu w którym biblioteka nie jest wykorzystana - Twój wybór.

    4\/3!!

    0
  • #13 04 Lut 2012 16:12
    tyrreus
    Poziom 9  

    Freddie nie mówię, że nie obejrzę. Obejrzę, wczoraj nawet go zaciągnąłem i podmieniłem na swój main.c, żeby skompilować i wrzucić ale nie o to było pytanie. A chodziło o to co zauważył gaskoin:

    Cytat:
    My też Ci nie pomożemy, bo nie znamy kodu maszynowego tych procesorów, a do tego chyba zmierzasz Smile


    A w którym miejscu? Odesłałeś mnie do dwóch innych tematów na elektrodzie, w których dalej jest przekierowanie do podstrony z Twoimi artykułami - poniekąd całkiem niezłymi - ale nie odpowiadającymi na moje pytanie.

    Nie idę w zaparte, chce się nauczyć od podszewki - tak, żeby w jednej ręce mieć mapę pamięci procesora a w drugiej klawiaturę - elektroda to jest właśnie to miejsce gdzie można pytać ludzi którzy się znają na czymś lepiej od pytającego i liczyć na podpowiedz.

    A to "nieporozumienie" wyniknęło albo z tego, że źle sformułowałem o co mi chodzi albo z tego że to co chce robić jest bez sensu i niepotrzebne (nie z mojego punktu widzenia).

    Tak trochę na zasadzie:
    - Co robi procesor bez programu?
    - Nic. Nie działa.
    - A właśnie, że działa i wykonuje wszystkie NOPy którymi ma zapisane wszystkie bajty w pamięci.

    0
  • #14 04 Lut 2012 16:35
    Freddie Chopin
    Specjalista - Mikrokontrolery

    tyrreus napisał:
    Odesłałeś mnie do dwóch innych tematów na elektrodzie, w których dalej jest przekierowanie do podstrony z Twoimi artykułami

    W temacie o toolchainie jest odesłanie do artykułu. W temacie o przykładach jest odesłanie do pobrania plików z działu Download, nie ma tam nawet pół słowa o jakimkolwiek artykule. Naprawdę.

    tyrreus napisał:
    Nie idę w zaparte, chce się nauczyć od podszewki - tak, żeby w jednej ręce mieć mapę pamięci procesora a w drugiej klawiaturę - elektroda to jest właśnie to miejsce gdzie można pytać ludzi którzy się znają na czymś lepiej od pytającego i liczyć na podpowiedz.

    Odpowiedź niestety dostaniesz tylko na konkretnie postawione pytanie. Odpowiedzią co trzeba zrobić żeby porty zadziałały jest np manual albo kod przykładów.

    tyrreus napisał:
    - A właśnie, że działa i wykonuje wszystkie NOPy którymi ma zapisane wszystkie bajty w pamięci.

    Nie bardzo... Gwarantuję Ci, że na ARMie stan który wtedy wystąpi jest dużo bliższy "nie działa wcale" niż "wykonuje cokolwiek".

    4\/3!!

    0
  • #16 04 Lut 2012 16:44
    Freddie Chopin
    Specjalista - Mikrokontrolery

    W pierwszym poście to dostałeś... Link do tematu, a tam:

    Cytat:
    Na swojej stronie ( www.freddiechopin.info ) w dziale Download > ARM > Przykłady


    4\/3!!

    0
  • #17 04 Lut 2012 16:53
    gaskoin
    Poziom 38  

    Freddie Chopin napisał:

    tyrreus napisał:
    Nie idę w zaparte, chce się nauczyć od podszewki - tak, żeby w jednej ręce mieć mapę pamięci procesora a w drugiej klawiaturę - elektroda to jest właśnie to miejsce gdzie można pytać ludzi którzy się znają na czymś lepiej od pytającego i liczyć na podpowiedz.

    Odpowiedź niestety dostaniesz tylko na konkretnie postawione pytanie. Odpowiedzią co trzeba zrobić żeby porty zadziałały jest np manual albo kod przykładów.


    tyrreus -> tutaj nie chodzi o to, że nam się nie chce, czy nie wiemy, czy się wstydzimy. To jest za skomplikowane i tego jest za dużo, żeby na sucho o tym mówić, więc lepiej jak ściągniesz przykłady i tam sobie zajrzysz albo właśnie poczytasz manual (właściwie dwa).

    0
  • #18 04 Lut 2012 17:35
    Matejkos
    Poziom 20  

    Ja zaczynałem z przykładem od freddiego gdzie było miganie diodą a potem z pomocą manuala sam uruchamiałem wszystkie elementy. Tak jak moi poprzednicy napisali wszystko jest w manualu jak co i w jakiej kolejności to naprawdę nie gryzie choć trzeba się przegryść przez sporo stron i zrozumieć, najważniejszy rejestr to chyba RCC który trzeba za każdym razem odpowiednio ustawić a reszta już kwesta odpowiednich bloków.

    Pozdrawiam Matejkos

    PS
    Jeśli masz chęć poznania czegoś dokładnie to możesz analizować kody z biblioteki przy odrobinie chęci da się wywnioskować co należy ustawić żeby działało. Analiza przykładów jest chyba najprostsza

    0
  • #19 04 Lut 2012 18:09
    tyrreus
    Poziom 9  

    Cytat:
    manual (właściwie dwa)


    Rozumiem, że jeden to:
    Cortex-M3 Technical Reference Manual

    A drugi?

    0
  • #20 04 Lut 2012 18:13
    Matejkos
    Poziom 20  

    Ogólnie przydaje się Referens Manual to wybranego procesora na przykład dla stm32f100 taki
    STM32F100xx
    advanced ARM-based 32-bit MCUs

    0
  • #21 04 Lut 2012 18:14
    Freddie Chopin
    Specjalista - Mikrokontrolery
  • #22 04 Lut 2012 18:34
    tyrreus
    Poziom 9  

    Freddie - jak nie masz do napisania nic konstruktywnego - nie pisz nic.

    Zaczynam swoją przygodę z ARMami. Szukam informacji, chce pogadać. Popytać, dostać kierunek. Chce poznać dokładnie procesor.

    Do tej pory używałem Datasheeta dla STM32F103x (stąd brałem mapę pamięci, ale nie wiem co oprócz włączenia zegara dla portu i konfiguracji portu należy zrobić - czy trzeba robić cokolwiek - (to było moje pytanie jak zakładałem temat), żeby odpalić program na procesorze.

    Wkleiłem kod, żeby ktoś mógł zerknąć i powiedzieć: włącz jeszcze na początku coś tam, ustaw jakiś tam rejestr bo jest potrzebne do czegoś tam i Ci nie wystartuje... ech.

    Cytat:
    To jest za skomplikowane i tego jest za dużo, żeby na sucho o tym mówić, więc lepiej jak ściągniesz przykłady i tam sobie zajrzysz albo właśnie poczytasz manual (właściwie dwa).


    Z tego wnioskuję, że nie wystarczy:

    - ustawić 7 bitu na "1" w RCC_APB2ENR (chce obsługiwać GPIOB)
    - ustawić rejestru GPIOx_CRH na "output, przy 2MHz" dla pinów które chcę obsługiwać
    - ustawić rejestu GPIOx_ODR na wartość którą chcę "ustawić" na pinach.

    Więc pytanie było, co jeszcze trzeba ustawić ew. co wcześniej i czy tego jest na prawdę tak dużo?

    Do taj pory najbardziej sensowna i życzliwą odpowiedz otrzymałem od matejkosa za co Ci matejkos dziękuję.

    0
  • #23 04 Lut 2012 18:50
    Freddie Chopin
    Specjalista - Mikrokontrolery

    1. Datasheet w STM32 to nie to samo co datasheet dla AtMegi (jeśli się akurat nimi interesowałeś wcześniej). Potrzebny Ci reference manual dla STM32 - ze strony ST oczywiście.

    2. Te trzy kroki o których piszesz wystarczą, ale pod warunkiem, że masz sprawny startup, tablicę wektorów, skrypt linkera oraz poprawnie kompilujesz całość.

    3. Odpowiedzią wciąż jest analiza przykładu - on jest prosty i w nim jest wszystko co potrzeba, czemu wciąż nie możesz tego zrobić? Czemu chcesz bardziej życzliwych odpowiedzi, skoro wciąż upierasz się przy nie-przeglądaniu kompletnego i działającego przykładu który robi generalnie dokładnie to co chcesz zrobić Ty (tam jest jedna diodka zamiast nieparzystych na całym porcie)? Już 23 posty, a wg mnie wciąż nie zajrzałeś do przykładu, w którym jest odpowiedź której poszukujesz.

    P.S. ja nie wiem co jest na bicie 7 w rejestrze RCC_APB2ENR - w nagłówku są do tego odpowiednie definicje, nie widzę żadnego powodu żeby z nich nie korzystać (oczywiście poza stosowaniem bit-bandingu jeśli ktoś ma akurat taką fantazję - wtedy tamte definicje nie są do końca potrzebne).

    4\/3!!

    0
  • #24 04 Lut 2012 19:20
    tyrreus
    Poziom 9  

    Cytat:

    Już 23 posty, a wg mnie wciąż nie zajrzałeś do przykładu, w którym jest odpowiedź której poszukujesz.


    A tu się mylisz, wgrałem go już na flasha chyba z 20 razy i ok, diodka się świeci ale nie miga, myślałem, że to kwestia ustawienia countera ale nie, wstawiałem różne wartości (myślałem, ze jest za duża częstotliwość i mruga tylko nie widzę bo za szybko). Cały czas się świeci i dalej nie wiem dlaczego jest nie tak więc chciałem napisać coś z minimalną ilością rzeczy, które mogły by spowodować, że coś nie działa.

    0
  • #25 04 Lut 2012 19:28
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Ale w tym przykładzie nie ma niczego co mogłoby "nie działać"... Został pobrany kilka tysięcy razy i sprawdzony przez setki użytkowników. Jeśli tylko skonfigurowałeś port i pin diody oraz wpisałeś właściwą częstotliwość kwarcu który masz, to po prostu nie może "nie działać". Tutaj więc wracamy do odrzuconej przez ciebie sugestii tutoriala o toolchainie, bo nikt nie powiedział, że masz dobrze skonfigurowane środowisko czy że dobrze wgrywasz program do układu. W zasadzie nawet nigdy nie powiedziałeś jakiego kompilatora używasz... Nie powiedziałeś jakiego dokładnie masz STMa... Nie powiedziałeś jak to wgrywasz i skąd pewność, że robisz to poprawnie i że to coś w ogóle startuje... Nie powiedziałeś na jakiej to jest płytce i skąd pewność, że jest ona (i układ na niej) sprawna... Nie powiedziałeś jak ten przykład kompilujesz... I tak dalej...

    Reasumując - jeśli przykład Ci nie działa (po skonfigurowaniu wszystkiego w pliku config.h) to problem masz nie z kodem, tylko z "resztą" (toolchain, wgrywanie, układ, ...).

    4\/3!!

    0
  • #26 04 Lut 2012 19:39
    tyrreus
    Poziom 9  

    Ok, no to lecim:

    Toolchain: codesourcery
    Mam: STM32f103VBT6
    Wgrywam przez OpenOCD i GDB - łacze się do OpenOCD z GDB i wgrywam poleceniem:

    Code:
    (gdb) monitor flash write_image erase sciezkadohexa.hex


    Wgrywa się bez problemu:

    Code:

    xPSR: 0x01000000 pc: 0x08000130 msp: 0x20000000
    auto erase enabled
    wrote 2048 bytes from file (...)/stm32_blink_led-1.2.1-120107/out/stm32_blink_led.hex in 0.854925s (2.339 KiB/s)


    Płytka jest nowa, KAMAMI ZL27ARM

    Jak kompiluję: make m

    Kompiluje się bez problemu, bez errorów i bez warningów.

    Code:

    Compiling file: main.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/main.lst -DSTM32F10X_MD -MD -MP -MF out/main.d -I.  main.c -o out/main.o
     
    Linking target: out/stm32_blink_led.elf
    arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -TSTM32F103xB_rom.ld -g -Wl,-Map=out/stm32_blink_led.map,--cref,--no-warn-mismatch -Wl,--gc-sections -nostartfiles  out/startup.o out/gpio.o out/main.o out/vectors.o    -o out/stm32_blink_led.elf
     
    Creating extended listing: out/stm32_blink_led.lss
    arm-none-eabi-objdump -S out/stm32_blink_led.elf > out/stm32_blink_led.lss
     
    Creating memory dump: out/stm32_blink_led.dmp
    arm-none-eabi-objdump -x --syms out/stm32_blink_led.elf > out/stm32_blink_led.dmp
     
    Creating IHEX image: out/stm32_blink_led.hex
    arm-none-eabi-objcopy -O ihex out/stm32_blink_led.elf out/stm32_blink_led.hex
     
    Creating binary image: out/stm32_blink_led.bin
    arm-none-eabi-objcopy -O binary out/stm32_blink_led.elf out/stm32_blink_led.bin
     
    Size of modules:
    arm-none-eabi-size -B -t --common out/startup.o out/gpio.o out/main.o out/vectors.o   
       text      data       bss       dec       hex   filename
        104         0         0       104        68   out/startup.o
        272         0         0       272       110   out/gpio.o
        388         0         0       388       184   out/main.o
        320         0         0       320       140   out/vectors.o
       1084         0         0      1084       43c   (TOTALS)
     
    Size of target .elf file:
    arm-none-eabi-size -B out/stm32_blink_led.elf
       text      data       bss       dec       hex   filename
       1084         0      1024      2108       83c   out/stm32_blink_led.elf


    Czy jest sprawna: jest jak napisałem kod w assemblerze to działał i diody migały. (Z tym, że wgrywałem innym programatorem jakimś klonem ST-Linka) już go nie mam. Teraz mam ZL24PRG który działa z OpenOCD.

    Więc co może być nie tak w takim razie?

    0
  • #27 04 Lut 2012 19:55
    Freddie Chopin
    Specjalista - Mikrokontrolery

    Zrób make clean i skompiluj jeszcze raz, bo nie pokazałeś pełnej kompilacji. U mnie generalnie moduł gpio.o oraz main.o zajmują więcej. Mam najnowszą wersję CodeSourcery.

    Zweryfikuj poprawność programowania - jest do tego jakieś polecenie w OpenOCD. I pomiń na razie GDB - możesz się z OpenOCD połączyć przez telnet (telnet localhost 4444).

    4\/3!!

    0
  • #28 04 Lut 2012 20:18
    tyrreus
    Poziom 9  

    Mhm, cały przebieg kompilacji:

    Code:
    $ make
    
    Assembling file: startup.S
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m3 -mthumb -g -ggdb3 -Wa,-amhls=out/startup.lst  -MD -MP -MF out/startup.d -I.  startup.S -o out/startup.o
     
    Compiling file: gpio.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/gpio.lst -DSTM32F10X_MD -MD -MP -MF out/gpio.d -I.  gpio.c -o out/gpio.o
     
    Compiling file: main.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/main.lst -DSTM32F10X_MD -MD -MP -MF out/main.d -I.  main.c -o out/main.o
     
    Compiling file: vectors.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sections -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-ahlms=out/vectors.lst -DSTM32F10X_MD -MD -MP -MF out/vectors.d -I.  vectors.c -o out/vectors.o
     
    Linking target: out/stm32_blink_led.elf
    arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -TSTM32F103xB_rom.ld -g -Wl,-Map=out/stm32_blink_led.map,--cref,--no-warn-mismatch -Wl,--gc-sections -nostartfiles  out/startup.o out/gpio.o out/main.o out/vectors.o    -o out/stm32_blink_led.elf
     
    Creating extended listing: out/stm32_blink_led.lss
    arm-none-eabi-objdump -S out/stm32_blink_led.elf > out/stm32_blink_led.lss
     
    Creating memory dump: out/stm32_blink_led.dmp
    arm-none-eabi-objdump -x --syms out/stm32_blink_led.elf > out/stm32_blink_led.dmp
     
    Creating IHEX image: out/stm32_blink_led.hex
    arm-none-eabi-objcopy -O ihex out/stm32_blink_led.elf out/stm32_blink_led.hex
     
    Creating binary image: out/stm32_blink_led.bin
    arm-none-eabi-objcopy -O binary out/stm32_blink_led.elf out/stm32_blink_led.bin
     
    Size of modules:
    arm-none-eabi-size -B -t --common out/startup.o out/gpio.o out/main.o out/vectors.o   
       text      data       bss       dec       hex   filename
        104         0         0       104        68   out/startup.o
        272         0         0       272       110   out/gpio.o
        388         0         0       388       184   out/main.o




        320         0         0       320       140   out/vectors.o
       1084         0         0      1084       43c   (TOTALS)
     
    Size of target .elf file:
    arm-none-eabi-size -B out/stm32_blink_led.elf
       text      data       bss       dec       hex   filename
       1084         0      1024      2108       83c   out/stm32_blink_led.elf


    Jeżeli chodzi o weryfikację, wygląda dobrze:

    Code:
    > reset halt                                                                                          
    
    JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3)
    JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1)
    target state: halted
    target halted due to debug-request, current mode: Thread
    xPSR: 0x01000000 pc: 0x08000130 msp: 0x20000000
    > flash write_image erase (...)/stm32_blink_led-1.2.1-120107/out/stm32_blink_led.hex
    auto erase enabled
    wrote 2048 bytes from file (...)/stm32_blink_led-1.2.1-120107/out/stm32_blink_led.hex in 0.854963s (2.339 KiB/s)
    > verify_image (...)/stm32_blink_led-1.2.1-120107/out/stm32_blink_led.hex           
    verified 1084 bytes in 0.848048s (1.248 KiB/s)

    0
  • #29 04 Lut 2012 20:23
    Freddie Chopin
    Specjalista - Mikrokontrolery

    U mnie pliki zajmują trochę więcej... Ponawiam pytanie o wersję kompilatora i dopytuje jakie zmiany zrobiłeś w projekcie?

    Code:
    Assembling file: startup.S
    
    arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m3 -mthumb -g -ggdb3 -Wa
    ,-amhls=out/startup.lst  -MD -MP -MF out/startup.d -I.  startup.S -o out/startup
    .o

    Compiling file: gpio.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sect
    ions -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-a
    hlms=out/gpio.lst -DSTM32F10X_MD -MD -MP -MF out/gpio.d -I.  gpio.c -o out/gpio.
    o

    Compiling file: main.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sect
    ions -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-a
    hlms=out/main.lst -DSTM32F10X_MD -MD -MP -MF out/main.d -I.  main.c -o out/main.
    o

    Compiling file: vectors.c
    arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb -O0 -ffunction-sections -fdata-sect
    ions -Wall -Wstrict-prototypes -Wextra -std=gnu89 -g -ggdb3 -fverbose-asm -Wa,-a
    hlms=out/vectors.lst -DSTM32F10X_MD -MD -MP -MF out/vectors.d -I.  vectors.c -o
    out/vectors.o

    Linking target: out/stm32_blink_led.elf
    arm-none-eabi-g++ -mcpu=cortex-m3 -mthumb -TSTM32F103xB_rom.ld -g -Wl,-Map=out/s
    tm32_blink_led.map,--cref,--no-warn-mismatch -Wl,--gc-sections -nostartfiles  ou
    t/startup.o out/gpio.o out/main.o out/vectors.o    -o out/stm32_blink_led.elf

    Creating extended listing: out/stm32_blink_led.lss
    arm-none-eabi-objdump -S out/stm32_blink_led.elf > out/stm32_blink_led.lss

    Creating memory dump: out/stm32_blink_led.dmp
    arm-none-eabi-objdump -x --syms out/stm32_blink_led.elf > out/stm32_blink_led.dm
    p

    Creating IHEX image: out/stm32_blink_led.hex
    arm-none-eabi-objcopy -O ihex out/stm32_blink_led.elf out/stm32_blink_led.hex

    Creating binary image: out/stm32_blink_led.bin
    arm-none-eabi-objcopy -O binary out/stm32_blink_led.elf out/stm32_blink_led.bin

    Size of modules:
    arm-none-eabi-size -B -t --common out/startup.o out/gpio.o out/main.o out/vector
    s.o
       text    data     bss     dec     hex filename
        104       0       0     104      68 out/startup.o
        340       0       0     340     154 out/gpio.o
        444       0       0     444     1bc out/main.o
        320       0       0     320     140 out/vectors.o
       1208       0       0    1208     4b8 (TOTALS)

    Size of target .elf file:
    arm-none-eabi-size -B out/stm32_blink_led.elf
       text    data     bss     dec     hex filename
       1208       0    1024    2232     8b8 out/stm32_blink_led.elf


    4\/3!!

    0
  • #30 04 Lut 2012 20:25
    tyrreus
    Poziom 9  

    W projekcie nie zrobiłem żadnych zmian. Po ściągnięciu nic nie modyfikowałem rozpakowałem i odrazu make.

    Natomiast wersja kompilatora to: (Sourcery G++ Lite 2011.03-42) 4.5.2

    0