[elektro] GPIO AF valtas / spike

uprogc . uprogc at gmail.com
Wed Aug 17 14:07:46 CEST 2016


Koszi kiprobalom.
Volatile nem kerdes, de azert koszi.

Eredetileg igy volt megirva :

Uart3McuInit()
{
....
    GpioInit( &obj->Tx, tx, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP,
0 );
    GpioInit( &obj->Rx, rx, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP,
0 );

    GPIO_PinAFConfig( obj->Tx.port, ( obj->Tx.pin & 0x0F ), GPIO_AF_USART3
); //--> glitch
    GPIO_PinAFConfig( obj->Rx.port, ( obj->Rx.pin & 0x0F ), GPIO_AF_USART3
);
}

Igy sokkal rosszabb volt, minden alkalommal tuske.

Aztan a PULL_UP-okat kicsereltem PULL_DOWN-ra. Igy a USART huzza fel a
kimenetet H szintre.

Igy jobb lett + a kod optimalizalassal, de veletlenszeruen igy is elofordul
tuske. Nem ertem miert csak veletlenszeruen...


2016-08-17 14:53 GMT+03:00 hg12345 <hg12345 at freemail.hu>:

> Hi, szerintem az ST ARM-okban van ilyen funkció az UART/USART-ban.
> ha csak egyszer akarod írni a AFR regiszterek, akkor
>
> volatile register tmp;
> tmp = (AFR & mask) | new;
> AFR = tmp;
>
> a "volatile", ha nem így csinálod kioptimalizálja,
>
> amúgy megpróbálható egy sorba leírva, ezt áltálaban jó optimalizálja,
>
> AFR =  (AFR & mask) | new;   (az AFR gyárilag "volatile")
> ez biztos beolvassa a belső regiszterbe az AFR értéket elvégzi a műveletet
> és  és kiírja.
>
> Sokat segíthet, ha átállítás előtt úgy állítod a GPIO lábat, hogy a TX-nek
> megfelelő állapotú legyen, esetleg még segíthet az is ha mindig felhúzó
> ellenállást állítasz kimenetre, mert amikor átkapcsol ez mindig felhúz, még
> ha egy pillanatra bemenet lenne....
>
>
> "uprogc ." <uprogc at gmail.com> írta:
> >Jobban orulnek ha mar nem kellene a HW-t bonyolitani.
> >
> >2016-08-17 14:21 GMT+03:00 Pipi <lista at puzsar.hu>:
> >
> >> nem tudsz még egy lábat elhasználni?
> >> pici soros ellenállás a tx-el, erre megy a másik gpio láb, ami vagy
> >> kimenet, vagy ts/bemenet, ezzel adod a break-ot
> >>
> >> Idézet ("uprogc ." <uprogc at gmail.com>):
> >>
> >> Sziasztok,
> >>>
> >>> Break conditiont kell generalnom a usart-on.
> >>> Ugy oldottam meg hogy atvaltok gpio-ra es lehuzom a tx labat t idore,
> >>> aztan
> >>> visszavaltok usart-ra es kuldom amit kell.
> >>>
> >>> Amikor kapcsolok vissza usart-ra ( gpio / AF valtas ) akkor van egy
> tuske
> >>> a
> >>> tx es rx pin-en.
> >>> A tusket konkretan az AFR ketszeri irasa okozza a fv. vegen.
> >>>
> >>> Optimalizaltam ezt:
> >>> void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,
> >>> uint8_t
> >>> GPIO_AF)
> >>>
> >>> ugy hogy a fv. vegen csak ennyi maradt:
> >>>   *afr =  temp_2;
> >>>   *afr |= temp;
> >>>
> >>> Az afr egy mutato , erteke :
> >>> afr = &GPIOx->AFR[indx];
> >>>
> >>> Igy eltunt a tuske, viszont nem teljesen, veletlenszeruen megjelenik.
> >>>
> >>> Hogy tudnam meg jobban optimalizalni a gpio / af atvaltast ?
> >>>
> >>> Udv.
> >>> Szabi
> >>> -----------------------------------------
> >>>           elektro[-flame|-etc]
> >>>
> >>
> >>
> >> -----------------------------------------
> >>          elektro[-flame|-etc]
> >-----------------------------------------
> >          elektro[-flame|-etc]
>
> -----------------------------------------
>           elektro[-flame|-etc]
>


More information about the Elektro mailing list