09120786892
atrinelectronic@gmail.com تهران پاساژ امجد طبقه1 واحد 16
دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد تایمر(بخش دوم)

دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد تایمر(بخش دوم)

2018-11-23 12:45:04

جلسه سیزدهم _ نحوه راه اندازی واحد تایمر و برنامه نویسی و راه اندازی این واحد در محیط keil

در جلسه قبل با نحوه فعال سازی واحد تایمر و برخی از ویژگی های آن آشنا شدیم و واحد مربوطه را در نرم افزار STM32CubeMX تنظیم نمودیم و پروژه را توسط آن ایجاد کردیم.

در این جلسه قصد داریم تا با دستورات کاربردی و مورد نیازمان برای راه اندازی یک تایمر یک ثانیه ای آشنا شویم و با استفاده از تایمر بتوانیم وضعیت LED مورد نظرمان را هر یک ثانیه تغییر دهیم. برای مشاهده توابع موجود در کتابخانه مربوط به تایمرها از بخش Project از پوشه Drivers/STM32F1xx_HAL_Driver می توانید stm32f1xx_hal_tim.c را انتخاب نمایید.

(HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim

وظیفه فعال سازی تایمر مربوطه به همراه وقفه را دارد برای فعال سازی تایمر مورد نظر کافیست تا ساختار htim مربوط به تایمر مورد نظرمان را   در آرگومان این تابع قرار دهیم.

 

(void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim

در صورت فعال سازی وقفه تایمر با وقوع وقفه برنامه به این تابع رجوع می کند و وظیفه این تابع اجرا کدهای کاربر در زمان اجرا وقفه تایمر مورد نظر می باشد که آرگومان ورودی آن اشاره گری از جنس ساختار تایمر(htim) مورد نظر می باشد.

با توجه به اینکه تمام تایمرها در زمان فعال شدن وقفه به این تابع رجوع می کنند برای تفکیک آنها باید درون این تابع از دستورات شرطی استفاده نمود زیرا در زمان اجرا وقفه ساختار Instance که در ساختار htim موجود است با شماره تایمر مورد نظر مقدار دهی می شود و دستورات شرطی درون این تابع مقدار Instance را بررسی می کنند. برای مثال اگر بخواهیم از فعال شدن وقفه مربوط به تایمر یک اطمینان حاصل کنیم درون این تابع دستور شرطی مطابق زیر را می نویسیم:

(if(htim->Instance==TIM1

در صورت درست بودن شرط متوجه می شویم که اینتراپت تایمر یک عمل کرده است.

 

(HAL_StatusTypeDef HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim

از این تابع برای غیرفعال نمودن تایمر مورد نظر به همراه وقفه آن استفاده می شود که آرگومان ورودی آن اشاره گری از htim تایمر مورد نظر می باشد.

 

برای شروع برنامه نویسی در محیط Keil ابتدا باید تابع HAL_TIM_PeriodElapsedCallback که در فایل stm32f1xx_hal_tim.c قرار دارد را کپی نماییم و در فایل stm32f1xx_it.c و در بخش USER CODE BEGIN 1 اضافه نماییم.

فایل stm32f1xx_it.c در بخش Project و در پوشه Aplication/User وجود دارد.

در فایل main بخش هایی مربوط به تایمر وجود دارد که به تعریف آنها می پردازیم:

استراکچر یا ساختار htim1 مربوط به تنظیمات تایمر یک می باشد و برای کار با تایمر در توابعی که ذکر شد این ساختار به عنوان آرگومان به تابع ارسال می شود

تابع MX_TIM1_Init وظیفه تنظیم تایمر یک را دارد.

 

بدنه تابع MX_TIM1_Init می باشد که کلیه تنظیمات مربوط به تایمر درون این تابع انجام می شود و در این مرحله با تغییر مقادیر htim1.Init.Prescaler و htim1.Init.Period می توانیم زمان یک ثانیه را تغییر دهیم.

حال به سراغ توضیح برنامه مربوط به این پروژه می رویم:

در فایل main.c با توجه به اینکه فقط در این پروژه قصد داریم وضعیت یک LED را با استفاده از وقفه تایمر تغییر دهیم برنامه خاصی در main اضافه نمی شود و فقط لازم است تا تایمر را به همراه وقفه آن فعال کنیم که تابع قبل از حلقه while این کار را برای ما انجام می دهد.

همانطور که قبلا گفته شد تابع  HAL_TIM_PeriodElapsedCallback که در فایل stm32f1xx_hal_tim.c قرار دارد را کپی می نماییم و در فایل stm32f1xx_it.c قرار می دهیم و درون بدنه این تابع شرط زیر را قرار می دهیم.

در صورت وقوع وقفه برنامه به تابع HAL_TIM_PeriodElapsedCallback می آید و پس از آن با دستور شرطی بالا روبرو می شود این شرط در صورتیکه که وقفه تایمر یک اتفاق افتاده باشد برقرار است پس از ورود به شرط وضعیت LED تغییر می کند.

این فرآیند مدام تکرار می شود و با هر بار فعال شدن وقفه تایمر یک، وضعیت LED تغییر می کند.

در انتها می توانید شماتیک مربوط به این جلسه و برنامه (keil , STM32CubeMX)  آنرا دانلود نمایید.

 Timer_Sample_Code

 Timer_Schematic

                                                                                                                                                                    دلتون شاد و لبتون پرخنده

                                                                                                                                                                             محمد هادی دشتی

دیگر آموزش ها مرتبط با STM32:

برای مشاهده آموزش جلسه اول(معرفی هسته آرم و میکروکنترلرهای 32 بیتی شرکت ST  ) کلیک کنید.

برای مشاهده آموزش جلسه دوم( معرفی نرم افزارهای مورد نیازجهت برنامه نویسی و پروگرام  ) کلیک کنید.

برای مشاهده آموزش جلسه سوم( نحوه دانلود آخرین نسخه از نرم افزار STM32CubeMX   ) کلیک کنید.

برای مشاهده آموزش جلسه چهارم(نحوه انجام تنظیمات در نرم افزار STM32CubeMX  ) کلیک کنید.

برای مشاهده آموزش جلسه پنجم(نحوه برنامه نویسی پروژه چشمک زن با نرم افزار Keil ) کلیک کنید.

برای مشاهده آموزش جلسه ششم(نحوه تولید کد و تنظیمات در محیط STM32CubeMX و برنامه نویسی در محیط Keil برای راه اندازی کلید) کلیک کنید.

برای مشاهده آموزش جلسه هفتم(معرفی نرم افزار STM32 Flash Loader Demonstrator و نحوه دانلود برنامه و پروگرام کردن میکرو) کلیک کنید.

برای مشاهده آموزش جلسه هشتم( نحوه راه اندازی ال سی دی کاراکتری-قسمت اول) کلیک کنید.

برای مشاهده آموزش جلسه نهم( نحوه راه اندازی ال سی دی کاراکتری و آشنایی با دستورات کاربردی کتابخانه ال سی دی کاراکتری ) کلیک کنید.

برای مشاهده آموزش جلسه دهم(دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد ADC(بخش اول)  ) کلیک کنید.

برای مشاهده آموزش جلسه یازدهم(دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد ADC(بخش دوم)  ) کلیک کنید.

برای مشاهده آموزش جلسه دوازدهم(دوره آموزشی میکرو کنترلرهای STM32 _ راه اندازی واحد تایمر(بخش اول)  ) کلیک کنید.

به سبد خرید اضافه شد.
سبد خرید
Item removed. بازگرداندن