FAQ | Points | Add... | Recent posts | Search | Register | Log in


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


Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B
Author
Message
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#1 Post from the author of the topic 02 Feb 2012 21:35   

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


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:

Code C - [expand]
 
// Defines of the ports:
// LED PORT PB, pins PB8 to PB15
 
// Definition of addresses for PORTS:
 
#define GPIO_B_ADDRESS 0x40010400 // Main address of the port.
 
#define GPIOx_CRL_OFFSET 0x00000000 // Offset for younger part of CR register
#define GPIOx_CRH_OFFSET 0x00000004 // Offset for older part of CR register
#define GPIOx_IDR_OFFSET 0x00000008 // Offset for input data register
#define GPIOx_ODR_OFFSET 0x0000000c // Offset for output data register.
#define GPIOx_BSRR_OFFSET 0x00000010 // Offset for bit set/reset register
#define GPIOx_BRR_OFFSET 0x00000014 // Offset for bit reset register.
#define GPIOx_LCKR_OFFSET 0x00000018 // Offset for lock register.
 
// Definition of addresses for RCC register:
 
#define RCC_ADDRESS 0x40021000 // Main address of the port.
#define RCC_APB1ENR_OFFSETT 0x00000018
 
void prepareOutputRegisterForLed();
 
int main()
{
// Initialize portB:
prepareOutputRegisterForLed();
 
// Turn off all LEDS:
*((unsigned int *) GPIO_B_ADDRESS + GPIOx_ODR_OFFSET) = (unsigned int) 0b00000000000000000000000000000000;
 
// Light odd LEDS:
*((unsigned int *) GPIO_B_ADDRESS + GPIOx_ODR_OFFSET) = (unsigned int) 0b00000000000000001010101010101010;
 
return 0;
}
 
void prepareOutputRegisterForLed()
{
 
// Activating clock for PORT B:
*((unsigned int *) RCC_ADDRESS + RCC_APB1ENR_OFFSETT) = (unsigned int) 0b00000000000000000000000001000000;
 
// Setting port B older part as push-pull output working with 2MHz.
*((unsigned int *) GPIO_B_ADDRESS + GPIOx_CRH_OFFSET) = (unsigned int) 0b00100010001000100010001000100010;
 


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
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#2 02 Feb 2012 21:54   

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


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ę:
http://www.elektroda.pl/rtvforum/topic1313509.html
http://www.elektroda.pl/rtvforum/topic1339518-0.html

4\/3!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#3 Post from the author of the topic 04 Feb 2012 14:34   

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


Hej,

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

Quote:
http://www.elektroda.pl/rtvforum/topic1313509.html


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.

Quote:
http://www.elektroda.pl/rtvforum/topic1339518-0.html


Zaczyna się słowami:

Quote:
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ć):

Quote:

http://embeddedfreak.wordpress.com/2009/08/09/cortex-m3-blinky-in-assembly/

http://stackoverflow.com/questions/270078/resources-for-learning-arm-assembly

http://www.8051projects.net/lofiversion/t12647/definitive-guide-to-arm-cortexm3-by-joseph-yiu.html

http://tldp.org/HOWTO/Assembly-HOWTO/hello.html


Pozdrawiam
Back to top
   
gaskoin
Poziom 22
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#4 04 Feb 2012 14:38   

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


tyrreus wrote:

Quote:
http://www.elektroda.pl/rtvforum/topic1339518-0.html


Zaczyna się słowami:

Quote:
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.
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#5 04 Feb 2012 14:55   

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


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!!
Back to top
   
gaskoin
Poziom 22
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#6 04 Feb 2012 15:14   

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


tyrreus wrote:

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 ?
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#7 Post from the author of the topic 04 Feb 2012 15:20   

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


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.
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 04 Feb 2012 15:20   





Back to top
   
gaskoin
Poziom 22
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#8 04 Feb 2012 15:22   

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


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 :)
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#9 Post from the author of the topic 04 Feb 2012 15:28   

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


Quote:
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:

Quote:
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 (...)

Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#10 04 Feb 2012 16:00   

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


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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#11 Post from the author of the topic 04 Feb 2012 16:30   

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


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ę ;)
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 04 Feb 2012 16:30   





Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#12 04 Feb 2012 16:50   

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


tyrreus wrote:
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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#13 Post from the author of the topic 04 Feb 2012 17:12   

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


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:

Quote:
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.
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#14 04 Feb 2012 17:35   

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


tyrreus wrote:
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 wrote:
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 wrote:
- 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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#15 Post from the author of the topic 04 Feb 2012 17:41   

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


No ok, temat myślę, że został wyczerpany. Po kłutniach i mocnej wymianie postów coś jednak się wyklarowało.

Quote:
Ś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


Nie można było tak od razu ? :P
Back to top
   
Google

Google Adsense


Post# Post from the author of the topic 04 Feb 2012 17:41   





Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#16 04 Feb 2012 17:44   

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


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

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


4\/3!!
Back to top
   
gaskoin
Poziom 22
Poziom 22


Joined: 02 Jun 2010
Posts: 2194
Location: Bytom

Post#17 04 Feb 2012 17:53   

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


Freddie Chopin wrote:

tyrreus wrote:
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).
Back to top
   
Matejkos
Poziom 16
Poziom 16


Joined: 16 Oct 2003
Posts: 272
Location: Katowice

Post#18 04 Feb 2012 18:35   

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


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
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#19 Post from the author of the topic 04 Feb 2012 19:09   

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


Quote:
manual (właściwie dwa)


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

A drugi?
Back to top
   
Matejkos
Poziom 16
Poziom 16


Joined: 16 Oct 2003
Posts: 272
Location: Katowice

Post#20 04 Feb 2012 19:13   

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


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


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#21 04 Feb 2012 19:14   

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


<ściana>

Swoje programy piszesz bez bibliotek, bez nagłówków i bez manuala od ST?

4\/3!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#22 Post from the author of the topic 04 Feb 2012 19:34   

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


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.

Quote:
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ę.
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#23 04 Feb 2012 19:50   

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


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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#24 Post from the author of the topic 04 Feb 2012 20:20   

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


Quote:

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.
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#25 04 Feb 2012 20:28   

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


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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#26 Post from the author of the topic 04 Feb 2012 20:39   

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


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?
Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#27 04 Feb 2012 20:55   

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


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!!
Back to top
   
Google

Google Adsense


Post# 04 Feb 2012 20:55   





Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#28 Post from the author of the topic 04 Feb 2012 21:18   

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


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)

Back to top
   
Freddie Chopin
Poziom 25
Poziom 25


Joined: 12 Dec 2005
Posts: 7300
Location: Zawiercie

Post#29 04 Feb 2012 21:23   

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


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!!
Back to top
   
tyrreus
Poziom 9
Poziom 9


Joined: 10 Oct 2009
Posts: 33

Post#30 Post from the author of the topic 04 Feb 2012 21:25   

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


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
Back to top
   
Post new topic  Reply to topic      Main Page -> Forum Index -> Microcontrollers Generally -> ARM Microcontrollers -> [STM32][C/Codesourcery] Inicjalizacja uC. Port GPIO B
Page 1 of 2 Go to page 1, 2  Next
Similar topics
[STM32][C/CodeSourcery] realizacja delay (13)
[STM32][C][KEIL] Pytania o GPIO - podstawy. (8)
[STM32] Funkcje alternatywne dla GPIO (4)
[STM32][CodeSourcery] memcpy (6)
[stm32] kanały timerów a GPIO (5)
[stm32][Eclipse/C] Konfiguracja GPIO. (3)
[c][stm32] konfiguracja gpio (7)
[STM32] [C] szybkość GPIO (6)
[STM32][CodeSourcery]Deklaracja struktury w pamięci flash. (21)
[STM32][CodeSourcery]Deklaracja funkcji w pamięci flash (3)

Page generation time: 0.178 seconds


FAQ || Administrator || Moderators || Widgets and banners || Contact
elektroda.pl topic RSS feed