a)wie wird die Flanke erfasst?
Bei eine richtige Einstellung lauft das automatisch ab. Sobald eine Flanke erkannt ist, wird die Zaehlerstand von TIM2 in eine Register kopiert. Der Zaehler lauft weiter, eine IRQ wird ausgelost.
b)wird die steigende Flanke mit dieser Zeile Erfasst?
Das ist eine foreinstellung von diesen "Input capture channel". Nur zwei optionen, oder er soll reagieren auf eine Positive Flanke, oder eine negative.
2)Den Counter: mir ist nicht sicher ob Autoreload laufen soll?
Normalerweise lauft den timer einfach weiter, bei 0xFFFF fangt er dan wieder an bie 0x0000. Er kan auch eine Interrupt generiert werden, wenn sie das wunschen (wieder eine Foreinstellung).
3)Den Compare: wie lasse ihn einen Interrupt auslösen, wenn die Zwei Werte verglieschen hat?
Das ist ihre eigene Verantwortung : in den ISR (Interrupt Sub Routine) konnen sie das programmieren das bei Erfassung von beide Interrupts, eine Variable gesetzt werd. Der CC1 lost nur eine Interrupt aus bei eine steigende Flanke an Pin A0.2, und das jedesmal. Was passiert an CC2 ist abhangig was dort die Foreinstellung ist. CC2 ist normalerweise an eine andere Eingangpin gekuppelt (A0.3 ?). Den CC2 lost dan nur ein Interrupt aus bein eine Flanke an pin A0.3.
4)Bestimmung die Werte: wie werden die Werte dem Compare zugewiesen?
CC1 : bein eine Flanke an pin A0.2 wird die Zaeherstand von TIM2 abgelegt in register TIM_GetCapture1(TIM2)
CC2 : bei eine Flanke an pin A0.3 wird die Zaehlerstand von TIM2 abgelegt in register TIM_GetCapture2(TIM2)
An der Pin von CH3 passiert nicht, da auch nichts foreingestellt/ programmiert ist. Wie soll diese LED eigentlich reagieren ?
Hier meine code für eine ICP von CCH3/4 von TIM2 : durch eine Foreinstellung reagiert CC3 uaf eine Fallende flanke von A0.2, CC4 auf eine steigende flanke von A0.2 (remap von pins)
Code:
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_10;
GPIO_Init(GPIOA, &GPIO_InitStructure); //Pin A10=USART Rx,Pin A2 = Input capture TIM2 CH3
/* ² configuration: Input Capture mode ---------------------
The external signal is connected to TIM2 CH3 pin (PA.2)
The Rising edge is used as active edge,
The TIM2 CCR2 is used to compute the frequency value
------------------------------------------------------------ */
TIM_ICInitTypeDef TIM_ICInitStructure; //alleen voor input capture
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 0xFFFF;
TIM_TimeBaseStructure.TIM_Prescaler = 23;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/*Input capture channel 3 configuration*/
TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Falling;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;//PA.2
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM2, &TIM_ICInitStructure);
/*Input capture channel 4 configuration*/
TIM_ICInitStructure.TIM_Channel = TIM_Channel_4;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_IndirectTI;//Alternate function PA.2
TIM_ICInit(TIM2, &TIM_ICInitStructure);
/* TIM enable counter */
TIM_Cmd(TIM2, ENABLE);
/* Enable the CC3//CC4 Interrupt Request */
TIM_ITConfig(TIM2, TIM_IT_CC3, ENABLE);
TIM_ITConfig(TIM2, TIM_IT_CC4, ENABLE);
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
initialize the PLL and update the SystemFrequency variable. */
SystemInit();
/* PCLK1 = HCLK/4 */
/* TIM2 clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* GPIOA, GPIOB and GPIOC clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* Enable the TIM2 global Interrupt */
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
Lesezeichen