[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