ตอนนี้ผมกำลังศึกษาเรื่องของ TIM อยู่เลยครับ (ผมมือใหม่หัดเล่นครับ เพิ่งมาเขียนจริงๆ จังๆ แค่เดือนเดียวนี่เอง) ตอนนี้อยากทราบว่า การทำงานของ TIM นั้นเป็นการกำหนดสัญญาณพัลส์เพื่อทำการทริกการทำงาน ถูกไหมครับ แล้วทีนี้ผมต้องการนำสัญญาณทริกนั้นไปกำกับการทำงานของ ADC อยากทราบว่า ถ้าสมมติผมตั้งค่า TIM3 ดังคำสั่งนี้
uint16_t PrescalerValue = 0;
/**********************************************************************************************************************/
void TIM3_Configuration(void)
/**********************************************************************************************************************/
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* Compute the prescaler value */
PrescalerValue = (uint16_t) ((SystemCoreClock / 2) / 6000000) - 1;
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 20;
TIM_TimeBaseStructure.TIM_Prescaler = 167;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_PrescalerConfig(TIM3, PrescalerValue, TIM_PSCReloadMode_Immediate);
/* Output Compare Timing Mode configuration: Channel1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 10;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM3, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Disable);
/* Output Compare Timing Mode configuration: Channel2 */
/*TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
TIM_OC2Init(TIM3, &TIM_OCInitStructure);
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Disable);
/* Output Compare Timing Mode configuration: Channel3 */
/*TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR3_Val;
TIM_OC3Init(TIM3, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Disable);
/* Output Compare Timing Mode configuration: Channel4 */
/*TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
TIM_OC4Init(TIM3, &TIM_OCInitStructure);
TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Disable);
/* TIM Interrupts enable */
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE);
/* Connect TIM3 pins to AF2 */
GPIO_PinAFConfig(GPIOC, GPIO_PinSource6, GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource7, GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource8, GPIO_AF_TIM3);
GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_TIM3);
}
อยากทราบว่า
1. พัลส์ของ Channel ไหนที่จะไปทริกการทำงานของ ADC ครับ
2. NVIC ต้องตั้งค่าเพื่อกำกับ TIM3 แล้วต้องตั้งค่าเพื่อกำกับ ADC และ DMA ด้วยหรือเปล่าครับ
3. ผมต้องการนับสัญญาณการทริกจาก TIM3 ไม่ทราบว่าจะมีวิธีการอย่างไรครับ เนื่องจากฟังก์ชั่น TIM ไม่ใช่ลูปของ Interrupt จึงไม่สามารถใส่ตัวแปรเพื่อทำการนับค่า count ในนั้นได้ ทีนี้ไม่ทราบว่าหากผมทำการส่งสัญญาณ Pulse ไปที่พอร์ตๆ หนึ่ง แล้วนับจังหวะที่พอร์ตนั้นส่งออกสัญญาณ pulse ซึ่งจะมีค่า logic == 1 และทำการตรวจจับโลจิคนั้นเป็นการ count หนึ่งค่า ไม่ทราบว่าพอจะเป็นไปได้ไหมครับ เพราะผมกลัวว่าการทำงานนับค่า count ซึ่งอยู่ใน main loop นั้น จะไม่ทันสัญญาณการทริก
ขอบคุณครับ