STM32F051 a Input Capture

Jan Waclawek konfera na efton.sk
Pondělí Duben 22 21:58:22 CEST 2019


Precitajte, co je v registroch toho timera (vsetkych) potom, co nastane
problem, a ukazte nam to.

Tipujem, ze riesenie zahady bude vo zvysku programu, ktory nevidime. 

Napriklad, jeden z read-only clenov sa pyta, ci nahodou nie je TIM2_CH1
pouzity aj ako systick v cube/spl.

Klasicky zvyknem doporucovat zredukovat program na absolutne minimum, co
este vykazuje problem, najlepsie zacnuc od nuly. 

wek


----- Original Message ---------------

Subject: Re: STM32F051 a Input Capture
   From: <hudaklan at volny.cz>
   Date: Mon, 22 Apr 2019 18:50:00 +0200
     To: "HW-news" <hw-list at list.hw.cz>

Break point tam nedavam, mam tam signalizaci ledkama.
Pokud je povoleno InputCaptute 2, tak blika zelena ledka podle hran
vstupniho signalu.
Modra se vubec nerozsviti. Kontrolovano osciloskopem.
Pri InpitCapture 1 zelena ledka blikne (nebo se jen rozsviti] a pak se
rozsviti  modra.
Zatuhnuti myslim to, ze pak uz preruseni na TIM2 vubec nevznikne.
Blikani led je kontrolovano osciloskopem (pokd by bylo jen kratke). 
Proc ale tento problem nevznika na kanalu 2?

Na vstupy vsech ctyr kanalu  TIM2 mam privedeny signaly odpovidajici vystupu
RC prijimace (jen jsou generovany PWM kanaly z TIM3). 

HUDA

void TIM2_IRQHandler(void)
 {
  pok = TIM2->SR;
  TIM2->SR = (uint16_t)~pok;                               //! Clear TIM2
Capture interrupt flag

#ifdef TEST1
  if ((pok & TIM_IT_CC1) == TIM_IT_CC1)
#else
  if ((pok & TIM_IT_CC2) == TIM_IT_CC2)
#endif
    {
#ifdef TEST1
     STM32vldiscovery_LEDToggle(LEDGREEN);
     if ((GPIO_PORT->IDR & GPIO_PinSource5) == GPIO_PinSource5)
       (data)->start = TIM2->CCR1;
      else
       (data)->konec = TIM2->CCR1;
#else
     if ((GPIO_PORT->IDR & GPIO_PinSource1) == GPIO_PinSource1)
       (radio)->start = TIM2->CCR2;
      else
       (radio)->konec = TIM2->CCR2;
#endif
     (data)->value = (data)->konec - (data)->start);
    }
   else
    {
     STM32vldiscovery_LEDToggle(LEDBLUE);
    }

 }




______________________________________________________________
> Od: "Jan Waclawek" <konfera at efton.sk>
> Komu: "HW-news" <hw-list at list.hw.cz>
> Datum: 22.04.2019 01:02


> Pøedmìt: Re: STM32F051 a Input Capture
>
>> První 2 poeru?ení od vstupního signálu probihnou, ale pak poijde
>> poeru?ení CC1OF (opravdu skoeí do rutiny poeru?ení) i kdy? není povolené 
>
>CC1OF je overcapture flag, t.j. je nastaveny, ked pride capture udalost (vo
>Vasom pripade ktorakolvek hrana) a CC1IF je uz nastaveny - inaksie
>povedane, overcapture nastane, ak nestihnete vcas vynulovat capture flag
>medzi dvomi testne za sebou nasledujucimi capture udalostami.
>
>Pokial viem, samotny CC1OF nevyvola prerusenie, preto ani k nemu neexistuje
>povolovaci bit.
>
>Budete mi oponovat, ze ste si dali breakpoint do prerusovacej rutiny a tam
>ste v TIMx_SR videli nastaveny CC1OF ale nie CC1IF. Mohlo to vzniknut
>nasledovnym scenarom: na CH1 prislo niekolko hran pocas vykonavania
>prerusenia (napr. vstupny signal na zamyslanej hrane v skutocnosti fyzicky
>zakmitava - co je jeho zdroj?). To nastavilo CC1IF aj CC1OF, ale vykona sa
>riadok (data)->start = TIM2->CCR1; ktory vynuluje CC1IF (ale nie CC1OF),
>pricom vsak prerusovaci signal z CC1IF zacal prechadzat synchronizacnym
>mechanizmom medzi TIM/APB a NVIC a vyvola prerusenie tesne po odchode z
>toho aktualneho.
>
>> a pak TIM2 zatuhne.
>
>Neviem, co tym myslite.
>
>wek
>
>
>PS. Podla mna je lepsie sa systematicky drzat makier z CMSIS headera, t.j.
>STM32xxxx.h, nez pouzivat vselijake bastardy z CUBE a SPL (v tomto pripade
>TIM_IT_CC1/TIM_IT_CC2).



Další informace o konferenci Hw-list