اموزش تایمر های میکروکنترلر STM32 تنظیم و کنترل وقفه ها
اموزش تایمر های میکروکنترلر STM32 تنظیم و کنترل وقفه ها کنترل رویدادها و وقفهها در سیستمهای نهفته (Embedded Systems) نقش بسیار مهمی در اجرای برنامههای دقیق و کارآمد دارد. یکی از ابزارهای قدرتمند برای مدیریت زمان و رخدادهای وابسته به زمان، تایمرها هستند. در سری STM32، تایمرها به عنوان یکی از قابلیتهای اصلی واحد میکروکنترلر به کار میروند. در این مقاله، به آموزش نحوه استفاده از تایمرها در STM32 میپردازیم، به ویژه برای کنترل رویدادها و ایجاد وقفهها.
تایمرها در STM32
میکروکنترلرهای STM32 دارای چندین تایمر مختلف هستند که هر کدام ویژگیها و قابلیتهای خاص خود را دارند. بر اساس اطلاعاتی که در دیتاشیت STM32F103 ارائه شده است، این میکروکنترلر دارای 7 تایمر میباشد که شامل تایمرهای عمومی (General-Purpose Timers)، تایمرهای پیشرفته (Advanced-Control Timers) و تایمرهای مخصوص کنترل وقفه و شمارش سریع میشوند.
انواع تایمرها:
- تایمرهای عمومی: این تایمرها برای وظایف عمومی مانند شمارش پالسها، تولید سیگنال PWM (پهنای پالس مدولاسیون) و یا اندازهگیری مدت زمان بین رویدادها استفاده میشوند. هر تایمر عمومی دارای یک شمارنده 16 بیتی است که توانایی شمارش در حالتهای مختلف (بالا، پایین یا بالا و پایین) را دارد.
- تایمرهای پیشرفته: این نوع تایمرها قابلیتهای بیشتری نسبت به تایمرهای عمومی دارند و بیشتر برای وظایفی مانند کنترل موتور و تولید سیگنالهای دقیق PWM با قابلیتهای پیشرفته مثل خروجیهای مکمل (Complementary Outputs) و توقف اضطراری (Emergency Stop) به کار میروند.
تنظیم تایمرها در STM32
برای استفاده از تایمرها، ابتدا باید تنظیمات اولیهای مانند فرکانس کاری، پریاسکیلر (Prescaler) و مود تایمر را انجام داد. در زیر مراحل تنظیم یک تایمر برای ایجاد یک وقفه در بازههای زمانی مشخص توضیح داده شده است:
1. انتخاب تایمر مناسب: ابتدا باید تصمیم بگیرید که کدام تایمر برای کار شما مناسب است. برای مثال، اگر به یک شمارنده ساده نیاز دارید، میتوانید از تایمرهای عمومی (مثل TIM2 یا TIM3) استفاده کنید.
2. فعال کردن کلاک تایمر: برای فعال کردن تایمر در STM32، ابتدا باید کلاک آن را از طریق رجیستر RCC فعال کنید. به طور معمول، این کار با تنظیم بیت مربوطه در رجیستر RCC_APB1ENR
یا RCC_APB2ENR
انجام میشود.
برای مثال:
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
3. تنظیم پریاسکیلر (Prescaler): پریاسکیلر سرعت شمارش تایمر را تعیین میکند. اگر میخواهید تایمر با فرکانس پایینتری نسبت به کلاک اصلی کار کند، باید یک پریاسکیلر تنظیم کنید. این مقدار تعیین میکند که هر چند سیکل کلاک یک شمارش در تایمر انجام شود.
TIM2->PSC = 8000 - 1; // تنظیم پریاسکیلر برای کاهش فرکانس به 1kHz
4. تنظیم مقدار Auto-Reload (ARR): این مقدار مشخص میکند که تایمر پس از چند شمارش به مقدار صفر بازگردد و یک وقفه تولید کند. به عنوان مثال، برای تولید وقفه هر 1 ثانیه، میتوانید مقدار ARR را بر اساس فرکانس تایمر تنظیم کنید:
TIM2->ARR = 1000 - 1; // تنظیم ARR برای تولید وقفه هر 1 ثانیه
5. فعالسازی وقفه: پس از تنظیم تایمر، باید وقفه مربوط به تایمر را فعال کنید تا پس از پایان شمارش، یک وقفه به پردازنده ارسال شود. برای این کار، بیت مربوط به وقفه در رجیستر DIER
تنظیم میشود:
TIM2->DIER |= TIM_DIER_UIE; // فعالسازی وقفه Update Interrupt
NVIC_EnableIRQ(TIM2_IRQn); // فعالسازی وقفه در NVIC
6. شروع تایمر: در نهایت، تایمر را با تنظیم بیت CEN
در رجیستر CR1
فعال کنید:
TIM2->CR1 |= TIM_CR1_CEN; // شروع تایمر
ایجاد وقفه و مدیریت آن
وقتی تایمر به مقدار صفر میرسد، یک وقفه تولید میشود. این وقفه میتواند برای انجام وظایف مختلف مانند خواندن دادهها یا تغییر وضعیت یک پین استفاده شود. برای مدیریت وقفه، یک تابع وقفه (Interrupt Service Routine) در برنامه تعریف میشود.
به عنوان مثال:
void TIM2_IRQHandler(void)
{
if (TIM2->SR & TIM_SR_UIF) // بررسی وقوع وقفه
{
TIM2->SR &= ~TIM_SR_UIF; // پاک کردن فلگ وقفه
// عملیات مورد نظر در هنگام وقوع وقفه
}
}
استفاده از تایمرها برای تولید PWM
یکی از کاربردهای مهم تایمرها در STM32، تولید سیگنالهای PWM برای کنترل سرعت موتور یا تنظیم روشنایی LEDها است. در حالت PWM، مقدار زمان روشن یا خاموش بودن یک سیگنال توسط تایمر کنترل میشود. برای تولید سیگنال PWM، میتوانید کانالهای Capture/Compare تایمرها را تنظیم کنید:
TIM2->CCR1 = 500; // تنظیم مقدار برای ایجاد سیگنال PWM با 50% Duty Cycle
جمعبندی
تایمرها در STM32 یکی از ابزارهای کلیدی برای کنترل دقیق زمان و مدیریت وقفهها هستند. با تنظیم صحیح پریاسکیلر، مقدار شمارش و فعالسازی وقفهها، میتوان کاربردهای متنوعی از جمله تولید سیگنالهای PWM، شمارش پالسها و مدیریت رویدادهای زمانمحور را پیادهسازی کرد.
اموزش تایمر های میکروکنترلر STM32 تنظیم و کنترل وقفه ها
مطلب پیشنهادی
آموزش GPIO در میکروکنترلر STM32 نحوه استفاده از پایه های ورودی و خروجی