Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

STM32F4 Inicijalizacija - startup code

[es] :: Elektronika :: Mikrokontroleri :: STM32F4 Inicijalizacija - startup code

Strane: 1 2 3 4

[ Pregleda: 17545 | Odgovora: 77 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 00:07 - pre 147 meseci
Ja sam se zabo oko SysTick primera jer sam hteo da u Bogdanov kod umesto one for petlje dodam Delay(); Radi to ali ne blinka u odgovarajucem ritmu. Ocigledno da je problem sa podesavanjem oscilatora.
gorankg
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 00:37 - pre 147 meseci
Nasao:
Clock configuration tool
i AN3988
Pa ako pomogne, javljam.
gorankg
 
Odgovor na temu

New Village DC
Projektant hardvera
Srbija

Član broj: 65539
Poruke: 438
*.dynamic.isp.telekom.rs.

Sajt: www.itnetwork.rs


+222 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 01:35 - pre 147 meseci
Odlicno uputstvo, bacio sam pogleda na brzinu i imacu par pitanja, ali cu ih postaviti sutra kad sve pogledam detaljnije.

Svidja mi se ovakav nacin predstavljanja koda, sa sve komentarima. Nama pocetnicima ce te cake i objasnjenja mnogo znaciti, tako da: komentarisite sto vise.
Ovi se prepanuše, a Marko, onako srdit iza sna, uze jednog po jednog darivati: kog
sabljom, kog buzdovanom. Nije se ni triput okrenuo, a već svih sedam s dušom rastavi.

 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 07:02 - pre 147 meseci
Citat:
lazar00: Nije mi jasno na sta se odnosi ovaj gore kod? Da li je ovo header file?


ne, to je sadrzaj "main.c"


Citat:
lazar00:I zasto nema istih komandi kao sto su u one u atollicu ? o.O


cini mi se da je odin vec odgovorio, dakle ono je bilo samo proba da li atollic radi ili ne, ovde pricamo o globalno arm kontrolerima, ovako se setuje na svakom, atollic ima posebnu biblioteku koja direktno pristupa ovim ledarama i direktno pristupa dugmetu, ali to necemo koristiti posto nema svrhe mnogo za ucenje :)

Citat:
lazar00:takodje mi nije jasno
Code:
GPIO_InitTypeDef  GPIO;

zar se u c-u ne definisu tipovi na sledeci nacin

Code:
typedef short   SMALLINT 




typedef short smallint - kreira novi tip podataka koji se zove smallint a koji je u stvari shor
GPIO_InitTypeDef GPIO kreira varijablu GPIO koja je tipa GPIO_InitTypeDef



Citat:
lazar00:
Code:
 GPIO.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;

sta rade ovi separatori "|" ?
Pitanje jeste glupo,ali meni je ovo skroz konfuzno.


to su binarlni operatori, prostudiraj binarne operatore u C-u posto se to mnoooooooooooogo koristi u radu sa mikrokontrolerima, bez toga mozes samo da pevas borbene :D
http://www.cprogramming.com/tutorial/bitwise_operators.html

Citat:
lazar00:p.s. zasto se ova inicjalizacija razlikuje od one u blink primeru sto smo radili sa LEDarama?
skroz sam pogubljen,ne znam da l' sam pos'o il' sam dos'o. :/


ignorisi onaj source, on je samo test da li sve radi
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 07:04 - pre 147 meseci
Citat:
New Village DC: Odlicno uputstvo, bacio sam pogleda na brzinu i imacu par pitanja, ali cu ih postaviti sutra kad sve pogledam detaljnije.

Svidja mi se ovakav nacin predstavljanja koda, sa sve komentarima. Nama pocetnicima ce te cake i objasnjenja mnogo znaciti, tako da: komentarisite sto vise.


bice komentara u stvari sve manje i manje ... pitajte sta nije jasno, u ovom primeru sta je izkomentarisano, ja takve stvari vise necu komentarisati ... na primer vise nikad necu komentarisati zasto je nesto volatile, ili sta koji property GPIO_InitTypeDef radi i zasto ga postavljam na koju vrednost..
 
Odgovor na temu

tomam
Tomislav Milicevic
Beograd

Član broj: 104895
Poruke: 163
77.243.16.*



+4 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 07:27 - pre 147 meseci
Ima u reference manual za stm32f4 internu strukturu za svaku periferiju i za sta sluzi koji registar.

Moje misljenje da bi kad se referencirate na neki dokument , bilo dobro dati link (ne samo naziv dokumenta) , zbog pocetnika (ljudi koji se ne snalaze nabolje)

Pozdrav
DINO smo poceli BRAVO za Odina bogdan.kecman .......
 
Odgovor na temu

vos
Novi Sad

Član broj: 285814
Poruke: 134
*.teol.net.



+91 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 07:45 - pre 147 meseci
Evo samo da primetim u originalnom Bogdanovom kodu da je mozda bolje umesto ovoga:

GPIOD->BSRRL = GPIO_Pin_12;

koristiti funkciju koja postoji u STM biblioteci:

GPIO_SetBits(GPIOD, GPIO_Pin_12)
GPIO_ResetBits(GPIOD, GPIO_Pin_12)

ili

GPIO_WriteBit(GPIOD, GPIO_Pin_12, Bit_SET) // umesto Bit_SET moze i Bit_RESET koji setuje pin na 0

Ove funkcije ustvari rade bas ono sto je Bogdan naveo (setuju vrednosti registrima BSRRL i BSRRH). Naravno i ovde su moguce | operacije za istovremeno setovanje vrednosti vise bitova.
 
Odgovor na temu

the_tosic

Član broj: 37314
Poruke: 381
*.ptt.rs.



+128 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 09:54 - pre 147 meseci
Slazem se i meni je nekako logicnije (mada kontam da su iskusniji ljudi navikli onako sa upisom u registar).

Citat:
Odin D.:PS
Sta se zbiva sa preostalih 20-tak ljudi, kako ide?


Sa C-om dobro stojim, ovo sam presao kad sam nabavio discovery, td cekam sledeci korak :).
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 10:24 - pre 147 meseci
prvo da prodjemo kako se stvari rade "direktno" ... te neke osnovne .. a onda polako ukljucujemo biblioteke (cmsis, rcc, gpio...)
 
Odgovor na temu

_str_

Član broj: 53798
Poruke: 878
*.dynamic.isp.telekom.rs.



+10 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 15:10 - pre 147 meseci
Za probu sam koristio Keil 4.23, ST-link USBdriver za xp, a za generisanje 'system_stm32f4xx.c' fajla Clock configuration tool.
Debug radi normalno, dok direktan flash nesto steka. Evo i primera kako izgleda:
Code:
//******************************************//
//               LED  on/off                //
//******************************************//


#include "system_stm32f4xx.c"
#include "stdio.h"


//------------------------------------------------------------------
// Funkcija 'pauza_ms(x)' je kalibrisana za SYSCLK 168MHz i otuda 'i=33333'
// Za sporije jezgro smanjiti vrednost 'i'
void pauza_ms(vu32 wtf)
{
    vu16 i;
    while(wtf--)
    {
        for(i=33333;i>0;i--);
    }
}


//-----------------------------------------------------------------------
// Funcija 'LED_on(x)' ukljucuje LED_1 | LED_2 | LED_3 ili LED_4, gde je 
// 'x' broj LEDiode, ako je vrednost 'x' nula onda se ukjucuju sve cetiri 

void LED_on(u8 led_sw)
{
     switch(led_sw)
    {
         case 0:
            GPIO_SetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
        break;

         case 1:
            GPIO_SetBits(GPIOD, GPIO_Pin_12);
        break;

         case 2:
            GPIO_SetBits(GPIOD, GPIO_Pin_13);
        break;

         case 3:
            GPIO_SetBits(GPIOD, GPIO_Pin_14);
        break;

         case 4:
            GPIO_SetBits(GPIOD, GPIO_Pin_15);
        break;


        default:
        break;
    }
}

//------------------------------------------------------------------------
// Funcija 'LED_off(x)' iskljucuje LED_1 | LED_2 | LED_3 ili LED_4, gde je 
// 'x' broj LEDiode, ako je vrednost 'x' nula onda se iskjucuju sve cetiri 

void LED_off(u8 led_sw)
{
     switch(led_sw)
    {
         case 0:
            GPIO_ResetBits(GPIOD, GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
        break;

         case 1:
            GPIO_ResetBits(GPIOD, GPIO_Pin_12);
        break;

         case 2:
            GPIO_ResetBits(GPIOD, GPIO_Pin_13);
        break;

         case 3:
            GPIO_ResetBits(GPIOD, GPIO_Pin_14);
        break;

         case 4:
            GPIO_ResetBits(GPIOD, GPIO_Pin_15);
        break;


        default:
        break;
    }
}

//-------------------------------------------------------
// Konfigurisanje LED-ova...

void LED_Config()
{
     // Prvo nam treba struktura GPIO_InitTypeDef
     // Ta struktura sadrzi podatke za setovanje
     // GPIO perfierije na ARM-u

     // Deklaracija promenjljive GPIO tipa GPIO_InitTypeDef
    GPIO_InitTypeDef GPIO;

     // Svaki zaseban "deo" samog mikrokontrolera moze da se
     // upali / ugasi. Po default-u svi su ugaseni. Da bi
     // upalio neki "delo/periferiju" treba da ukljucis
     // njegov klok. Ovde sada palimo klok za port D.
     // Obratite paznju da ako neki deo nema klok on ne trosi
     // struju (zato su po defaultu svi ugaseni. Ako preskocimo
     // ovu liniju, sve ce "delovati" da radi, ali fizicki
     // sam port ce biti ugasen te u realnosti nikakvi signali
     // na tom portu nece napustiti mcu
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

     // Sada setujemo samo pinove na portu D da budu izlazni
     // to radimo tako sto prvo popunimo GPIO_InitTypeDef strukturu
     // i prosledimo je GPIO_Init funkciji.
     // u varijabli GPIO_Pin GPIO_InitTypeDef strukture definisemo masku
     // za pinove kojima hocemo da modifikujemo status
    GPIO.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

     // u varijabli GPIO_Mode GPIO_InitTypeDef strukture definisemo
     // SMER
     // GPIO_Mode_OUT je izlaz
     // GPIO_Mode_IN je ulaz,
     // GPIO_Mode_AF je "alternate function" (UART, SPI ..)
     // GPIO_Mode_AIN je analogni ulaz
     // GPIO_Mode_AN je analogni izlaz

     // postoje (ne na ovom mcu-u) jos _in_floating za floating input,
     // _ipd za input + pull down, _ipu za input + pull up,
     // _out_od za output koji je open drain,
     // _af_od za alternate function + open dran ..i verovatno jos neki
     // koje ja nikad nisam koristio, zavisi od mcu-a do mcu-a
     // sve zavisi, dakle na nekim mcu-ima se tip izlaza definise
     // ovde, na ovom se definise kroz OType
    GPIO.GPIO_Mode=GPIO_Mode_OUT;

     // u varijabli GPIO_Otype GPIO_InitTypeDef strukture definisemo
     // kog je tipa output. Na SMT32F4 se to definise kroz ovu varijablu
     // a ne kroz GPIO_Mode kao na STM32F1 na primer.
     // GPIO_OType_PP je PushPull izlaz (standardan)
     // GPIO_OType_OD je Open Drain izlaz
     // na ovom mcu-u nema trece vrste,
    GPIO.GPIO_OType=GPIO_OType_PP;

     // u varijabli GPIO_PuPd GPIO_InitTypeDef strukture definisemo
     // push up / pull down na ovom pinu
     // mogucnosti su _NOPULL za jeli "blanko", _UP i _DOWN za push up
     // u pull down
    GPIO.GPIO_PuPd=GPIO_PuPd_NOPULL;

     // u varijabli GPIO_Speed GPIO_InitTypeDef strukture definisemo
     // obratiti paznju da se ovo uvek odnosi na CEO PORT ne samo na
     // odabrane pinove. Ovo definise brzinu na kojoj GPIO port prica
     // sa jezgrom. Zavisno od frekvencije na kojoj radite i od mcu-a
     // sa kojim radite ima raznih brzina. 50MHz je safe na skoro svim
     // ARM procesorima, neki dozvoljavaju i vise (STM32F4 na discovery
     // plocki radi na 100MHz ok.
     // obratite paznju da veci takt znaci i veca potrosnja struje, ako
     // ce port da pali i gasi ledaru jedno u sekundi 2MHz je vise nego
     // dovoljno za frekvenciju gpio magistrale za taj port
    GPIO.GPIO_Speed=GPIO_Speed_2MHz;

     // i finalno pozovemo GPIO_Init i prosledimo port koji hocemo da
     // setujemo i pointer na strukturu koju smo upravo napravili
    GPIO_Init(GPIOD, &GPIO);    
}







//-------------------------------------------------------
// Pocetak 'glavnog programa'...

int main(void)
{
    LED_Config();
    
    while(1)
    {
        u8 u,i;
        for(i=10;i>0;i--)
         {
            for(u=4;u>0;u--)
            {
                LED_on(u);
                pauza_ms(20);
                LED_off(u);
                pauza_ms(15);
            }        
        }

        LED_on(0);
        for(i=8;i>0;i--)
        {
            LED_off(4);
            pauza_ms(50);

            LED_off(1);
            LED_on(4);
            pauza_ms(50);

            LED_off(2);
            LED_on(1);
            pauza_ms(50);

            LED_off(3);
            LED_on(2);
            pauza_ms(50);

//            LED_off(4);
            LED_on(3);
        }

        LED_off(0);

    }     
}


Evo i 'system_stm32f4xx.c', podesavanja su vidljiva u tablici u okviru istog fajla.
__*__
*___*
Prikačeni fajlovi
 
Odgovor na temu

elaki
Nis

Član broj: 116370
Poruke: 32
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 21:18 - pre 147 meseci
Pitanja u vezi startup koda sa pocetka teme:

1.
Napravili smo promenljivu GPIO (koja je tipa GPIO_InitTypeDef), dodelili smo vrednosti njenim clanovima
i treba da pozovemo funkciju za inicijalizaciju GPIO_Init kojoj prosledjujemo port i pointer na GPIO strukturu.
To se jasno vidi i iz stm32f4xx_gpio.c:

00175 /**
00176 * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_InitStruct.
00177 * @param GPIOx: where x can be (A..I) to select the GPIO peripheral.
00178 * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains
00179 * the configuration information for the specified GPIO peripheral.
00180 * @retval None
00181 */
00182 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
.
.

Ovde me zbunjuju ove zvezdice. Sta one znace? Citajuci o C-u video sam da je zvezdica "indirection operator"
i u primerima stoji ispred promenljive - bez razmaka, i drugo, u opisu ovde stoji da je samo drugi parametar
ove funkcije pointer a zvezdica se nalazi kod oba?

2.
Da smo hteli, npr. na istom portu da definisemo nekoliko pinova koji bi bili ulazni, da li bi onda trebalo da
definisemo novu promenljivu (isto tipa GPIO_InitTypeDef), dodelimo vrednost njenim clanovima u skladu sa svrhom
(ulazi) i ponovo pozovemo GPIO_Init. Sta se tada desava sa clanom nove strukture koji definise klok - posto
se klok odnosi na ceo port, da li se on izostavlja ili se vodi racuna da bude isti kao u prethodnoj strukturi?
 
Odgovor na temu

HeYoo

Član broj: 72595
Poruke: 491



+1017 Profil

icon Re: STM32F4 Inicijalizacija - startup code01.03.2012. u 22:59 - pre 147 meseci
Meni pre lici da je ovo prvo macro pointera
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
a ovo da je klasicna promenljiva
GPIO_InitTypeDef GPIO;

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
ocekuje adrese za parametre pa zato &GPIO

GPIOSpeed je ovako komentarisan:

GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */

Koliko vidim u dokumentaciji svaki port ima 32bitni OSPEEDR registar koji prlagodjava izlaze tj tranzistore da mogu da isprate odredjene brzine (rise i fall time)



[Ovu poruku je menjao HeYoo dana 02.03.2012. u 01:05 GMT+1]
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
*.31.24.217.adsl2.beograd.com.

Sajt: mysql.rs


+2377 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 06:50 - pre 147 meseci
Citat:
elaki:

1.
Napravili smo promenljivu GPIO (koja je tipa GPIO_InitTypeDef), dodelili smo vrednosti njenim clanovima
i treba da pozovemo funkciju za inicijalizaciju GPIO_Init kojoj prosledjujemo port i pointer na GPIO strukturu.
To se jasno vidi i iz stm32f4xx_gpio.c:

00175 /**
00176 * @brief Initializes the GPIOx peripheral according to the specified parameters in the GPIO_InitStruct.
00177 * @param GPIOx: where x can be (A..I) to select the GPIO peripheral.
00178 * @param GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that contains
00179 * the configuration information for the specified GPIO peripheral.
00180 * @retval None
00181 */
00182 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
.
.

Ovde me zbunjuju ove zvezdice. Sta one znace? Citajuci o C-u video sam da je zvezdica "indirection operator"
i u primerima stoji ispred promenljive - bez razmaka, i drugo, u opisu ovde stoji da je samo drugi parametar
ove funkcije pointer a zvezdica se nalazi kod oba?


koje zvezdice ?

Sve izmedju /* i */ je komentar, ako mislis na te zvezdice samo su deo komentara

ako mislis na GPIO_TypeDef* GPIOx zvezdicu, to znaci da se prosledjuje pointer na strukturu GPIO_TypeDef a ne kopija strukture. Dakle kada zoves GPIO_Init to mozes da uradis ovako:

Code:

GPIO_TypeDef struktura;

struktura.nesto = x;
struktura.nestodrugo = y;
...

GPIO_Init(&struktura .. 


vidis ovde pre struktura & to znaci da fuknciji saljemo adresu na kojoj se nalazi struktura a ne kopiju strukture.

druga mogucnost je sledeca:


Code:

GPIO_TypeDef * pointernastrukturu;

//e sad posto pointer na strukturu ne kreira objekat u memoriji
// vec je samo pointer na memorisku lokaciju onda nam treba
// da kreiramo objekat, tj rezervisemo mesto za njega u ram-u

pointernastrukturu = (GPIO_TypeDef *) malloc( sizeof (GPIO_TypeDef) );

// dakle malloc je rezervisao onoliko bajtova koliko je velika 
// struktura GPIO_TypeDef i pointer na tu memorisku lokaciju
// ja smesten u nasu varijablu pointernastrukturu 


// obrati paznju da se sada clanovima strukture pristupa sa -> a ne sa .
// posto je pointernastrukturu pointer a ne struktura
pointernastrukturu->nesto = x;
pointernastrukturu->nestodrugo = y;
...

// i finalno mozemo da prosledimo taj pointer GPIO_Init funkciji
GPIO_Init(pointernastrukturu .. 


jasno?



Citat:
elaki
2.
Da smo hteli, npr. na istom portu da definisemo nekoliko pinova koji bi bili ulazni, da li bi onda trebalo da
definisemo novu promenljivu (isto tipa GPIO_InitTypeDef), dodelimo vrednost njenim clanovima u skladu sa svrhom
(ulazi) i ponovo pozovemo GPIO_Init. Sta se tada desava sa clanom nove strukture koji definise klok - posto
se klok odnosi na ceo port, da li se on izostavlja ili se vodi racuna da bude isti kao u prethodnoj strukturi?


NE :) moze da se koristi ista varijabla
sta je fora, ne mozemo istovremeno da definisemo i ulazne i izlazne pinove ali je sledeca stvar skroz ok:

Code:

    GPIO_InitTypeDef GPIO;

    // definisemo 12-15 kao output
    GPIO.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
    GPIO.GPIO_Mode=GPIO_Mode_OUT;
    GPIO.GPIO_OType=GPIO_OType_PP;
    GPIO.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOD, &GPIO);    

    // definisemo 5 i 6 kao input
    // ostale clanove (npr speed) ne moramo da setujemo ponovo
    // posto su vec setovani malopre, posto koristimo istu varijablu
    GPIO.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
    GPIO.GPIO_Mode=GPIO_Mode_IN;
    GPIO_Init(GPIOD, &GPIO);    



 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 12:36 - pre 147 meseci
Implementing Multiple Breakpoints with Atollic Lite
http://www.stm32challenge.com/node/124

Code:

Implementing Multiple Breakpoints with Atollic Lite
 
1. Create a software break function (in your main program) and set the single hardware breakpoint within.
 
void Break(int Number) {
    volatile int Temp;
    Temp = Number;  <------ set a single hardware breakpoint here!
}
 
 
2. Place a Function Prototype in any source file that will use the Break() function
// debug function to allow multiple breakpoints
void Break(int);
 
3.  Place the Break function before the line you wish to break.
     Increment the Break Number parameter each time you insert the Break() function.
 
    /* Start the scheduler. */
Break(1);
vTaskStartScheduler();
 
void vButtonLedtInitialise( void ) { GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
Break(2);
GPIO_Init( GPIOC, &GPIO_InitStructure );
 
4. Build the Program and run the Debugger. You will hardware break within the common Break() function as shown below.
    The Break number can be inspected by "hovering" the cursor over it.
    The "Step Out Of" command will place you at the desired line of code you wish to debug.
 
void Break(int Number)
{
volatile int Temp;
Temp = Number;    <---------- hardware will break here, current value of Number will help identify which source line caused the break.
}
 
Admittedly not as convenient as double-clicking on a source line to set a breakpoint, but it will get the job done.
 
Cheers,
Jim Lynch


[Ovu poruku je menjao Odin D. dana 02.03.2012. u 16:05 GMT+1]
 
Odgovor na temu

tomam
Tomislav Milicevic
Beograd

Član broj: 104895
Poruke: 163
77.243.16.*



+4 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 14:45 - pre 147 meseci
Samo da dodam

// komentar do kraja linije

/* pocetak komentara


u vise linija



*/ kraj komentara

znaci pred porocesor to ignorise
 
Odgovor na temu

elaki
Nis

Član broj: 116370
Poruke: 32
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 17:42 - pre 147 meseci
Kad sam se usudio da postavljam pitanja o pointerima i strukturama to u najmanju ruku podrazumeva da sam savladao komentare... :)
salu na stranu, funkcija GPIO_Init trazi dva parametra: GPIO_TypeDef* GPIOx i GPIO_InitTypeDef* GPIO_InitStruct (to su te dve zvezdice)
kada je pozivamo, u nasem primeru joj prosledjujemo: GPIOD i &GPIO. Ako prethodno navedene zvezdice oznacavaju da funkciji treba dati pointere a mi koristimo & samo u drugom parametru (&GPIO), da li to znaci da je GPIOD po prirodi stvari pointer?
To je bila sustina prvog dela mog prethodnog pitanja. Odgovor na drugi deo mi je jasan.
 
Odgovor na temu

elektrostudio
Vladimir Pavkovic
SZR Elektrostudio, servis idustrijskih
masina i software developer
Novi Sad

Član broj: 201423
Poruke: 283
*.dynamic.isp.telekom.rs.

Sajt: elektrostudio.com


+25 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 21:19 - pre 147 meseci
@ODIN - ostatak (20-tak) verovatno prati kao i ja koliko vreme dopusta... ukoliko zapne negde javljam se. Do sada je sve ok i razumljivo (bar za mene). +++ za Bogdana i komentare u okviru koda. Nek svi nauce da je jedan od najvaznijih elemenata programiranja komentar . Necu da zurim sa nekim stvarima, doci ce na red (dok se ostali prikljuce).
@elaki - jeste, GPIOD je zapravo adresa GPIOD_BASE sto je zapravo AHB1PERIPH_BASE+0x0C00 sto se vidi iz stm32f4xx.h
a kako je base 0x4002 0000 + 0x0C00 adresa je 0x4002 0C00 sto je zapravo GPIOD - strana 50 RefManual32F4



[Ovu poruku je menjao elektrostudio dana 02.03.2012. u 23:05 GMT+1]
Elektrostudio
 
Odgovor na temu

elaki
Nis

Član broj: 116370
Poruke: 32
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 22:19 - pre 147 meseci
evo, sad sam nasao:
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
u stm32f4xx.h
 
Odgovor na temu

Odin D.
Mlađi referent za automatizaciju
samoupravljanja

Član broj: 37292
Poruke: 2549



+8370 Profil

icon Re: STM32F4 Inicijalizacija - startup code02.03.2012. u 22:47 - pre 147 meseci
Najlakse je da te stvari procesljas u onom .chm helpu koji dolazi iz biblioteke.
Koriscenjem search-a, polazeci od GPIOD, pa u rikverc, dobijes za 20 sekundi ovo:

search: GPIOD
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)

zatitim search: GPIOD_BASE
#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00)

zatim search: AHB1PERIPH_BASE
#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000)

zatim search: PERIPH_BASE
#define PERIPH_BASE ((uint32_t)0x40000000)

Odnosno, GPIOD je pokazivac ciji je sadrzaj adresa 0x40000000 + 0x00020000 + 0x0C00 = 0x40020C00 :)
 
Odgovor na temu

bogdan.kecman
Bogdan Kecman
"specialist"
Oracle
srbistan

Član broj: 201406
Poruke: 15887
95.180.61.*

Sajt: mysql.rs


+2377 Profil

icon Re: STM32F4 Inicijalizacija - startup code03.03.2012. u 06:11 - pre 147 meseci
da se nadovezem na "lakse" :D

ako stavis pointer misa iznad nekog tipa, vrednosti etc etc, atollic ce ti prikazati sta je to ako je u pitanju neki define ili neki typedef, takodje ako stavis pointer pacova iznad neke funkcije ako je funkcija pisana ok dobices ceo onaj blok komentara iznad funkcije koja je opisuje

dalje, kada kliknes na neki tip, varijablu, konstantu, funkciju ... desnim tasterom pacova, imas opcije "jump to declaration", "jump to implementation" i slicno ... to ce te baciti direkt na .h i .c fajl koji obradjuju to na sta si klikno

i raja, DATASHEET, bez toga se ne mrda nigde, ja neke mikrokontrolere koristim intenzivno 5-6 godina i opet dok programiram na levom monitoru, na desnom imam otvoren datasheet!!! pre 25 godina kada sam ja pocinjao da se igram sa mikrokontrolerima bio je extra problem posto je max sto si mogao da imas kao hobista trideseta kopija tog datasheet-a na papiru gde se pola stvari ne vidi, pa si morao da listas 200 strana da nadjes sta ti treba... tada je bilo normalno da svi koriste "jedan" (citaj 6811 ili 8051 i kasnije 16f84) mikrokontroler posto za nejga imaju datasheet, sada sa ctrl+f nalazis u datasheet-u sta god ti treba za koju sekundy, tu su errata, primeri ... iskoristite to, dakle prvo se ceo datasheet procita "po dijagonali" onda se tokom rada non stop baca pogled na datasheet ... u 99% slucajeva ako nesto nije jasno - odgovor je u datasheet-u :D
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: STM32F4 Inicijalizacija - startup code

Strane: 1 2 3 4

[ Pregleda: 17545 | Odgovora: 77 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.