[elektro] STM32 IO output help

elight elight at gmail.hu
Mon Feb 9 14:52:50 CET 2015


Szia,

Nem volt sok időm bögyözni,
de tíz perc alatt nem jött össze ,
és nem is nagyon értem miért..

A referencia ként az eredeti adatlapot vettem.
http://www.st.com/web/en/resource/technical/document/reference_manual/CD00171190.pdf
Innen indulva értelmeztem amit írtál
de lehet hogy kihagytam valamit.

Én MikroC -t használok, meg PIC-re már elég sok letesztelt
részletem van könyvtárazva, ami szinte változatlanul felhasználható.
Ezzel nem volt gond, mert a regisztereket
sasolgatva már írtam át eljárásokat Atmel, től
Ardunión keresztül többféle platformról is..

Inkább idézném az initelő részt kommentezve mit szeretnék.
Hátha kibukik mit felejtettem el.

//--------------------------------------------------- Definiálom a  biteket.
sbit OUTREG_13  at GPIOA_ODR.B13;       // -out
sbit OUTREG_14  at  GPIOA_ODR.B12; // -out
sbit OUTREG_15  at  GPIOA_ODR.B11; // -out


  //---------------------------------------------- Bekapcsolom a 
periféria clock-okat
GPIO_Clk_Enable(&GPIOA_BASE);
GPIO_Clk_Enable(&GPIOB_BASE);
GPIO_Clk_Enable(&GPIOC_BASE);

// Ezt a bitet találtam a kiterjesztett dolgokhoz (pl SWD is ) 
alaphelyzetnek ha jól értem. 106.oldal
    AFIORST_bit = 1;
Delay_ms(1);

//  valahol olvastam  hogy ezt a parancsot többször is szükséges lehet 
kiadni,
//  de egyébként e nélkül se volt jó az egész.
AFIORST_bit = 0;
    Delay_ms(1);
AFIORST_bit = 1;
    Delay_ms(1);
AFIORST_bit = 0;
    Delay_ms(1);



// Letiltom a SWJ-t 177oldal      de próbáltam úgy is , hogy AFIO_MAPR 
be a SWJ / 100  állítok,
// azt se vette észre.
GPIO_Alternate_Function_Enable(&_GPIO_MODULE_SWJ_JTAGDISABLE);

    Delay_ms(1);

  // Beállítom az A port megfelelő bitjeit OUTPUT típusúnak.
GPIO_Config(&GPIOA_BASE,
_GPIO_PINMASK_15 | _GPIO_PINMASK_14| _GPIO_PINMASK_13| _GPIO_PINMASK_12| 
_GPIO_PINMASK_11| _GPIO_PINMASK_10|
_GPIO_PINMASK_9  | _GPIO_PINMASK_8 | _GPIO_PINMASK_6 | _GPIO_PINMASK_5 | 
_GPIO_PINMASK_3| _GPIO_PINMASK_2  |
_GPIO_PINMASK_1  | _GPIO_PINMASK_0 ,
_GPIO_CFG_MODE_OUTPUT | _GPIO_CFG_SPEED_MAX | _GPIO_CFG_OTYPE_PP);


Mind a szükséges  28 lábra   rátettem egy -egy LED-et.
Mindegyiket tudom birizgálni és villogna,
kivétel a SWJ -hez tartozó A15,A14,A13  B3 és B4

STM32F100RB Discoverit használok
  az eredeti rajta lévő programozóval
ahol 2 drót és a RST van csak fizikailag bekötve.


Üdv István



2015-02-06 18:42 keltezéssel, hg12345 írta:
> Hi, Ajánlom a ST.COM honlapot, elég sok kiegészítés van a STM32F eszközökhöz, többek között periféria port láb konfiguráló program is, grafikus beállítás után C forráskódban kifejti a a uC felprogramozását.  Kezdésnek nagyon kényelmes. (megkergült a levelezőm az előző levél fele lemaradt :-( Szóval mostanában célszerűbb NUCLEO-val próbálkozni, univerzálisabb megoldás!A J-LINK/V2 (SWO és UART kompatibilis) már leválasztható, MBED és ARDUNIO kompatibilis. Ettől függetlenül érdemes beszerezni egy univerzális JTAG alapú debuggert, attól függően milyen környezetben dolgozol.  A legelterjedtebb J-LINK (van belőle EDU ($60) de máshonnan is beszerezhető..., ez jó minden környezetben és elég gyors is, a V9 talán még gyorsabb is mert valódi USB2.0 felületen dolgozik.... A KEIL 32K ingyenes ehhez jól használható a U-LINK2 szintén sok helyen megvásárolható.Minkét eszközből a hasonmások is jól működnek,  $15... $20 az asztalodra teszik.
> elight <elight at gmail.hu> írta:
>> Első nekifutásra , talán  nem is csodalkoztam..
>>
>> Köszi!!! :-) :-) :-)
>>
>> Este majd átbogarászom mégegyszer..
>>
>> Közben találtam egy (nekem ) jó kis linket is ..
>>
>> http://embedded-lab.com/blog/?p=8837
>>
>> Üdv István
>>
>>
>> 2015-02-06 18:03 keltezéssel, hg12345 írta:
>>> Nem csoda :-() PB3 és PB4 a JTAG része és a PA12...15 is szintén ehhez tartozikHa a gyári stm32f10x.h használod, akkor a main-t ezekkel a sorokkal kezd, a 2MHz kicserélheted 10 vagy 50-re is.     MODIFY_REG( AFIO->MAPR, AFIO_MAPR_SWJ_CFG,AFIO_MAPR_SWJ_CFG_DISABLE);    //nincs debug
>>>       MODIFY_REG( GPIOA->CRH, GPIOdir(0x0F,14-8)|GPIOdir(0x0F,13-8), GPIOdir(GPIO_Out_PP_2MHz,14-8)|GPIOdir(GPIO_Out_PP_2MHz,13-8)); //minden kimenet   Bármi mást csak ezután csinálj. Így kimenetként fognak működni a JTAG portod, De debuggolni azt nem fogsz tudni :-( Célszerűbb ezt használni   DBGMCU ->CR= ( DBGMCU_TIM2_STOP | DBGMCU_TIM3_STOP |DBGMCU_SLEEP |DBGMCU_STOP|DBGMCU_STANDBY|DBGMCU_IWDG_STOP|DBGMCU_WWDG_STOP  | DBGMCU__SWOTRACE  )  //ill amit menetközben szeretnél debuggolni.    MODIFY_REG( AFIO->MAPR, AFIO_MAPR_SWJ_CFG,AFIO_MAPR_SWJ_CFG_JTAGDISABLE);        //SWD beállítása
>>>       MODIFY_REG( GPIOA->CRH, GPIOdir(0x0F,14-8)|GPIOdir(0x0F,13-8), GPIOdir(GPIO_In_IPP_swj,14-8)|GPIOdir(GPIO_In_IPP_swj,13-8));
>>>       GPIOA->BSRR = (0<<14) | (1<<13) ;                //felhúzó ellenállások beállítása Célszerű az SWD +SWO t engedélyezni (fenti sorok ezet csinálják), föleg a DISCOVERY esetén kis  ügyeskedésseln kizárhatod magad uC-ből, akkor csak belső flash vagy belső ram indulással beállítással tudod majd újra programozni A DISCOVERY eszközön felépített ST-LINK (ezen még V1-van)   Üdv
>>> elight <elight at gmail.hu> írta:
>>>> Sziasztok..
>>>>
>>>> STM32F100  nál a B port összes bitet  outputba állítom,
>>>>
>>>> mást nem birizgálok ezen a porton,
>>>>
>>>> mégis a sorban teszteszésnél a PB4 és PB3 kimarad.
>>>>
>>>> Közben találtam egy olyat , hogy AFIO_MAPR  ahol
>>>>
>>>> az SWD-t letiltottam SWJ_CFG = 0b100  értékkel
>>>>
>>>> mégsincs teljes portom.  Ugyyanez a jelenség
>>>>
>>>>    ahogy néztem a   Port A  12 , 13, 14, 15 pineknél
>>>>
>>>> is jelentkezik.
>>>>
>>>> Mit néztem be?
>>>>
>>>> Üdv István
>>>>
>>>> -----------------------------------------
>>>>            elektro[-flame|-etc]
>>> -----------------------------------------
>>>             elektro[-flame|-etc]
>> -----------------------------------------
>>           elektro[-flame|-etc]
> -----------------------------------------
>            elektro[-flame|-etc]



More information about the Elektro mailing list