[elektro] STM8 Discovery --> 32 gyakorlati kérdés

Bali Zoltan eltexto at freemail.hu
Sun Dec 7 10:55:13 CET 2014


Ja, közben lehet rájöttem, a DMA lehet az oka,
mivel a mérés bekapcsolása után elindítom és
elég hosszú a tranzakció (50000 smpl.).
Csak egyik esetben mér jó, a másikban nem,
még nem tudom megmagyarázni.

Köszi

Üdv.  Zoli



2014.12.07. 9:50 keltezéssel, Bali Zoltan írta:
> Hi,
>
> Ennyire még nem másztam bele, ez egy adhoc összeállítás.
> A felprogramozás a gyári mintapélda alapján, csak a prescaler
> felprogramozását módosítottam.
>
>     /* TIM1 clock enable */
>     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
>     /* Time base configuration */
>     TIM_TimeBaseStructure.TIM_Period = 65535;
>     TIM_TimeBaseStructure.TIM_Prescaler = 0;
>     TIM_TimeBaseStructure.TIM_ClockDivision = 0;
>     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
>
>     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
>
>     /* Compute the prescaler value */
>     PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 10000000) - 1;
>     /* Prescaler configuration */
>     TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);
>
> APB preiféria osztó 2  (SystemCoreClock / 2 ).
> A TIM3-at töröltem itt az IT ben is engedélyezés előtt,
> de kitettem a main-ba próbaképpen.
> TIM3->CNT = 0x00000000UL;
>
> Na de, első eset 37us ok, és utána csak ezt az előosztót változtattam.
> Jó még a prescalert live nem néztem, de most meg fogom.
> Hátha elcseszi a lib.
>
> Köszi
>
> Üdv.  Zoli
>
> 2014.12.07. 9:13 keltezéssel, hg12345 írta:
>> Hi,
>>
>> A IT handlerből sok minden nem látszik :-) Mivel nem itt olvasod ki az értékét még hazardos is lehet!
>> Maga a program csak indítja és leállítja a számlálót. Hogy a számláló hogy van felprogramozva az itt nem látszik, a kiolvasás és a számláló nullázása se.
>>
>>
>> Pontos időmérésre több megoldás létezik:
>> a capture, ebbe nem játszik bele az IT késleltetés a kezelésből adódó eltérő futási idők. Ha TIMER2 esetén 32 bites számláló áll rendelkezésre, de 16 bit esetén is megoldható a hosszú időmérés, az átfordulást IT-vel kezelve akárhány bitesre bővíthető a számláló.
>>
>> vagy
>> az ST eszközöknél felfűzhető az TMR2,TM3,TMR4 számláló egy 48 bites lánccá, ITR és az ETR bemenetekkel a számlálás tiltható és engedélyezhető is, egyenként és egybe is, hasonlóan a törlés is megoldható, gondlom ad IT amikor leáll vagy DMA-val kiolvasod, és csak a DMA-t kell birizgálni a többi automatikussá tehető. Max késleltetési 3...5 óraciklus mert a DMA és uC azonos buszt használni és ha egyszerre szeretnék használni akkor az nem megy...
>>
>> A TIMER3-nak mi a órajel forrása, van előosztó előtte? Ez nem látszik a kezelésből.
>> Indítád rlött törlöd a számláló értékét...
>>
>> Bali Zoltan <eltexto at freemail.hu> írta:
>>> Hali!
>>>
>>> Na én pont most nyüstölöm ezt és van amit nem értek.
>>> Külső mexakítás portlábról mérem az időt a TIM3-al.
>>> Fel és lefutó éllel meg akarom mérni a pulzus hosszát.
>>>
>>> void EXTI1_IRQHandler(void)
>>> {
>>>     if(EXTI_GetITStatus(EXTI_Line1) != RESET)
>>>     {
>>>       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1))
>>>       {
>>>          /* TIM3 enable counter */
>>>         TIM3->CR1 |= TIM_CR1_CEN;
>>>         ADC_ClearFlag(ADC1,ADC_FLAG_OVR);
>>>         ADC_ClearFlag(ADC2,ADC_FLAG_OVR);
>>>         ADC_ClearFlag(ADC3,ADC_FLAG_OVR);
>>>         DMA_Cmd(DMA2_Stream0, ENABLE);
>>>
>>>         /* Start ADC1 Software Conversion */
>>>         ADC_SoftwareStartConv(ADC1);
>>>       }
>>>       else
>>>       {
>>>         /* TIM3 disable counter */
>>>         TIM3->CR1 &= (uint16_t)~TIM_CR1_CEN;
>>>         SampleReady = 1;
>>>       }
>>>       /* Clear the EXTI line 1 pending bit */
>>>       EXTI_ClearITPendingBit(EXTI_Line1);
>>>     }
>>> }
>>>
>>> Elsőre 1usec időalapot állítottam a TIM3-nak.
>>> 37 a main-ban mért elvileg már álló TIM3->CNT értéke.
>>> Az analizátorral 37.61us-ot mérek. Edigg érthető.
>>> Szerettem volna pontosabban mérni, ezért 10MHz
>>> időalapot állítottam a prescalerrel.
>>>
>>> PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 10000000) - 1;
>>>
>>> A rendszer órajel 144MHz, kerek 71 jön ki értékre. Viszont most
>>> 384-et mér a TIM3. Ezt viszont nem értem. Elég jelentős eltérés.
>>>
>>> Van ötlete valakinek?
>>>
>>> Köszi
>>>
>>> Üdv.  Zoli
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> 2014.12.06. 21:29 keltezéssel, elight írta:
>>>> Sziasztok..
>>>>
>>>>
>>>> Lehet pont nem ezt vártátok,
>>>> de errefelé is olvasgatni  esetleg  hasznos lehet..
>>>> https://www.aut.bme.hu/Upload/Pages/Szakirany/VillamosBsc/F4Discovery/stm32f4discovery-eclipse_v2.pdf
>>>>
>>>> Most olvastam, .visual  net- is befordítható pl. a nagyobb chipekbe.
>>>>
>>>> Ez nekem kicsit magas, mint teknősnek a létra..
>>>> De szorgosan  nézelődök ..
>>>>                     nekem is van egy kis panelkém ,és  életre kellne leheni
>>>> valahogy.
>>>>
>>>> Üdv István
>>>>
>>>>
>>> -



More information about the Elektro mailing list