[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