[elektro] STM32 IO output help

hg12345 hg12345 at freemail.hu
Mon Feb 9 15:16:18 CET 2015


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]


More information about the Elektro mailing list