تایمرهای General purpose این قابلیت را دارند که از منابع خارجی کلاک شوند و می توانید آنها را در دو حالت متمایز تنظیم کنید: External Clock Source Mode 1 and 2 . حالت اول زمانی قابل اجرا است که تایمر در حالت slave پیکربندی شده باشد.
حالت دوم، به سادگی با استفاده از یک منبع کلاک خارجی فعال می شود. این امر باعث می شود تا از منابع دقیق تر و اختصاصی استفاده کنید و در نهایت تعداد دفعات شمارش را کاهش دهید. هنگامی که حالت منبع کلاک خارجی 2 انتخاب می شود، فرمول محاسبه فرکانس به روز رسانی رویدادها به صورت زیر در می آید:
UpdateEvent = EXTclock/(EXTclockP rescaler)(P rescaler + 1)(P eriod + 1)(RepetitionCounter + 1)
که EXTclock فرکانس منبع خارجی است و EXTclockP rescaler یک تقسیم کننده فرکانس منبع است که می تواند مقادیر 1، 2، 4 و 8 را در برگیرد.
منبع کلاک یک تایمر general purpose را می توان با استفاده از تابع HAL_TIM_ConfigClockSource() و نمونه ای از ساختار TIM_ClockConfigTypeDef انتخاب کرد که به صورت زیر تعریف می شود:
typedef struct {
uint32_t ClockSource; /* TIM clock sources */
uint32_t ClockPolarity; /* TIM clock polarity */
uint32_t ClockPrescaler; /* TIM clock prescaler */
uint32_t ClockFilter; /* TIM clock filter */
{ TIM_ClockConfigTypeDef;
- ClockSource: منبع سیگنال کلاک مورد استفاده برای بایاس تایمر را مشخص می کند و می تواند مقادیر جدول زیر را در بر گیرد. به طور پیش فرض، حالت TIM_CLOCKSOURCE_INTERNAL انتخاب شده است.

- ClockPolarity: قطبیت سیگنال کلاک مورد استفاده برای بایاس تایمر را نشان می دهد و می تواند مقادیر جدول زیر را در بر گیرد. به طور پیش فرض، حالت TIM_CLOCKPOLARITY_RISING انتخاب شده است.

- ClockPrescaler: مقدار prescaler را برای منبع کلاک خارجی مشخص می کند و می تواند مقادیر جدول زیر را در بر گیرد. به طور پیش فرض، مقدار TIM_CLOCKPRESCALER_DIV1 انتخاب شده است.

- ClockFilter: این فیلد 4 بیتی فرکانس مورد استفاده برای نمونه برداری از سیگنال کلاک خارجی و طول فیلتر دیجیتال اعمال شده روی آن را مشخص می کند. فیلتر دیجیتال از یک شمارنده رویداد ساخته شده است که در آن N رویداد متوالی برای تأیید یک انتقال در خروجی مورد نیاز است. در مورد نحوه محاسبه fDT S (سیگنال Dead-Time) به برگه دیتاشیت مراجعه کنید. به طور پیش فرض، این فیلتر غیرفعال است.
در ادامه نحوه استفاده از منبع کلاک خارجی برای تایمر TIM3 را شرح می دهیم.در این مثال پین خروجی Master Clock Output (MCO) را به پایه TIM3_ETR2 ، که متناظر با پین PD2 برای همه بردهای Nucleo است ، متصل می کنیم (شکل زیر).

پین MCO فعال بوده و به منبع کلاک LSE، که با فرکانس 32.768 کیلوهرتز کار میکند، وصل شده است. کد زیر مهم ترین بخش مثال بالا را نشان می دهد:
23 void MX_TIM3_Init(void){
24 TIM_ClockConfigTypeDef sClockSourceConfig;
25
26 htim3.Instance = TIM3;
27 htim3.Init.Prescaler = 0;
28 htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
29 htim3.Init.Period = 16383;
30 htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
31 htim3.Init.RepetitionCounter = 0;
32 HAL_TIM_Base_Init(&htim3);
33
34 sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2;
35 sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED;
36 sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1;
37 sClockSourceConfig.ClockFilter = 0;
38 HAL_TIM_ConfigClockSource(&htim3, &sClockSourceConfig);
39
40 HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
41 HAL_NVIC_EnableIRQ(TIM3_IRQn);
}42
43
44 void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) {
45 GPIO_InitTypeDef GPIO_InitStruct;
46 if(htim_base->Instance==TIM3) {
47 /* Peripheral clock enable */ __
48 HAL_RCC_TIM3_CLK_ENABLE(); __49HAL_RCC_GPIOD_CLK_ENABLE();
50
51 /**TIM3 GPIO Configuration 52 PD2 ------> TIM3_ETR 53 */ 54 GPIO_InitStruct.Pin = GPIO_PIN_2; 55 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; 56 GPIO_InitStruct.Pull = GPIO_NOPULL; 57 GPIO_InitStruct.Speed = GPIO_SPEED_LOW; 58 HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); 59 } 60 }
خطوط [27:33] تایمر TIM3 را پیکربندی میکنند و دوره را روی 19999 تنظیم میکنند. خطوط [34:38] منبع کلاک خارجی را برای TIM3 پیکربندی میکنند. از آنجایی که اسیلاتور LSE در فرکانس 32.768 کیلوهرتز کار می کند، با استفاده از معادله زیر می توانیم فرکانس UEV را محاسبه کنیم که برابر است با:
UpdateEvent = 32:768/(1)(0 + 1)(16383 + 1)(0 + 1) = 2Hz = 0.5s
در نهایت، خطوط [48:58] ، TIM3 را فعال کرده و پین PD2 (که مربوط به پایه TIM3_ETR2 است) را به عنوان منبع ورودی پیکربندی میکنند.
نکته: پورت GPIO D باید با استفاده از ماکرو __GPIOD_CLK_ENABLE () ، قبل از اینکه از آن به عنوان منبع کلاک برای TIM3 استفاده کنیم، فعال شود. همین امر حتی در مورد TIM3 نیز صدق میکند، که با استفاده از __TIM3_CLK_ENABLE() فعال می شود.
فهرست مطالب
صفحات مرتبط
آخرین مقالات