[elektro] STM8 Discovery --> 32 gyakorlati kérdés
hg12345
hg12345 at freemail.hu
Sun Dec 7 09:13:03 CET 2014
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
>>
>>
>
>-----------------------------------------
> elektro[-flame|-etc]
More information about the Elektro
mailing list