[elektro] STM32 IO output help

elight elight at gmail.hu
Mon Feb 9 15:58:09 CET 2015


sbit OUTREG_20   at GPIOA_ODR.B13;       // -out

Egy ilyen sor ( makró ) csak azt hivatott , hogy az adott
regisztert átnevezzem olyan névre  amelyen én szeretném
használni.. Igy a portbiteket egészen más sorrendbe rendezhetem.
Tehát pl eltérő portok bitjeiből készíthetek egy 32 bites
pl.  LONGPORT_0_bit   -  LONGPORT_31_bit   kimenetet.

Ezt a definiciót csak a program elején tehetem meg ,
és a fordítónak szól, és még programfutással nem jár.

- utána bekapcsolom a priféria portot. (clock on )

- Resetelem a kiterjesztet periférihasználat állapotát

- Kiterjestési regiszteben 184 oldal SWJ bitekkel letiltom a SWJ funkciót..
   (ez elvileg resettel majd visszaáll, de nem tudom hogy mitől
    érhetném   el ismételten az SWD vel , mert azonnal kikapcsolódnia 
kellene )

-  beállítom a kérdéses lábakat kimenetként

-   és birizgálom a főprogramban.

Röviden gondolom  eddig ennyi lenne. Vagy kellhet még valami?

Szeretném most az összeset kimenetre állítani, mert szükséges lenne,
de ha nem jön össze , átköthetném még hiányzókat a kvarcok lábaira ,
és akár  belső oscival is járathatom a proct.
Szerencsére maga az alkalmazás egyszerű, és órajere sem annyira kényes.
Végső soron?

Üdv István






2015-02-09 15:16 keltezéssel, hg12345 írta:
> A hibát beleírtam a megfelelő sorok után. A periféri programozás során a következőkre kell figyelni, ha adhatok tanácsot:A 32bites rendszerek esetén (a legtöbb ARM...) a perifériák kikapcsolt állapotban vannak induláskor.(persze vannak kivételek, de ezt a manuál tartalmazza).A periféria elérésnél 3 dologra általánosságban ügyelni kell- a periféria belegyen kapcsolva, ezt általában a busz illesztőnél kell beállítani- a periféria kapjon órajelet ez szintem a buszillesztőben kell engedélyezni (clock gate)- a periféria ne legyen blokkolva, vannak olyan uC ahol ez az alaphelyzet, de a ST-nél pont nem.(az ilyen esetben, a blokkolást megfelelő kód sorozat feloldva programozható a periféria. Az első két feltétel a fogyasztással kapcsolatos, míg az utolsó a  saját program elszállás elleni védelmet hivatott betölteni. ---------------------az SBIT utasítás mit takar? Ez egy makró vagy mi, az at mint C nehezen értelmezhető. Ez a mikroC ansi99 vagy milyen utasítás és fordítási szemantikát használ?
> elight <elight at gmail.hu> írta:
>> 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
>>
>> Itt a hiba, amíg nem kapcsolod be a perifériákat, addig hiába állítsz a porttal kapcsolatban.
>>   //---------------------------------------------- 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]
>> -----------------------------------------
>>           elektro[-flame|-etc]
> -----------------------------------------
>            elektro[-flame|-etc]




More information about the Elektro mailing list