جلسه نوزدهم _ نحوه راه اندازی کانتر و برنامه آن در محیط keil (بخش دوم)
در ادامه آموزش کانتر در این جلسه قصد داریم تا به بررسی برنامه در محیط نرم افزاری Keil بپردازیم و با دستورات مربوط به کانتر بیشتر آشنا شویم.
همانطور که در جلسه قبل گفته شد تنظیمات مربوط به کانتر را انجام دادیم و پایه مورد نظر را انتخاب کردیم و قرار بر این شد تا کانتر مورد نظر با شمارش 100 پالس وقفه مربوط به آن فعال شود.
پس برای آگاهی از فعال شدن وقفه بهتر است از یک LED استفاده نماییم تا با هر بار فعال شدن وقفه مربوطه و وارد شدن به روتین وقفه خروجی مربوط به LED را تغییر وضعیت دهیم تا براحتی بتوانیم از فعال شدن وقفه آگاهی پیدا کنیم. برای این کار کافیست تا در نرم افزار STM32CubeMX یک پایه را به عنوان خروجی تنظیم نماییم و یک لیبل با عنوان LED انتخاب کنیم.
با اجرا نمودن برنامه مورد نظر در محیط Keil به سراغ معرفی خطوط و دستورات مربوط به کانتر می رویم. در فایل main.c استراکچر مربوط به تایمر 2 اضافه شده است.
در ادامه این فایل و در بخش Private function تابع مربوط به تنظیمات تایمر مورد نظر و تنظیم کلاک و پایه های ورودی/خروجی قرار گرفته شده است:
حال به سراغ بدنه تابع MX_TIM2_Init می رویم تا مقادیری را که در نرم افزار STM32CubeMX تنظیم نموده ایم مشاهده نماییم.
با توجه به تصویر بالا به معرفی و شرح وظیفه برخی از این دستورات می پردازیم.
قسمت htim2.Instance مشخص کننده نوع تایمر است و در زمان فعال شدن اینتراپت مورد نظر با بررسی Instance متوجه می شویم که کدام تایمر وقفه اش فعال شده است.
خط htim2.Init.Prescaler مربوط به مقدار پیش تقسیم کننده می باشد که در این پروژه با قرار دادن مقدار 0 از پیش تقسیم کننده استفاده نشده است.
نوع شمارش کانتر با مقدار دهی دستور htim2.Init.CounterMode مشخص می شود
مقدار سقف شمارش را در بخش htim2.Init.Period مشخص می نماییم.
حال به بررسی توابع مورد استفاده در کانتر می پردازیم.
(HAL_TIM_Base_Start(TIM_HandleTypeDef *htim
وظیفه فعال سازی تایمر یا کانتر مورد نظر را دارد و آرگومان ورودی آن استراکچر تایمر یا کانتر مورد نظر می باشد.
(HAL_TIM_Base_Stop(TIM_HandleTypeDef *htim
وظیفه غیر فعال نمودن تایمر و کانتر مورد نظر را دارد و آرگومان ورودی آن استراکچر تایمر یا کانتر مورد نظر می باشد.
(HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim
وظیفه آن مانند تابع HAL_TIM_Base_Start می باشد و علاوه بر فعال سازی کانتر مورد نظر اینتراپت مربوط به آن نیز فعال می شود.
(HAL_TIM_Base_Stop_IT(TIM_HandleTypeDef *htim
وظیفه غیر فعال سازی کانتر و اینتراپت مربوط به آن را دارد.
(__HAL_TIM_GET_COUNTER(__HANDLE__
از این ماکرو برای خواندن مقدار کانتر مورد نظر استفاده می شود بجای عبارت __HANDLE__ اشاره گر به استراکچر کانتر مورد نظر قرار می گیرد
(__HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__
از این ماکرو برای تنظیم مقدار کانتر مورد نظر استفاده می شود و بجای عبارت __HANDLE__ اشاره گر به استراکچر کانتر مورد نظر قرار می گیرد و بجای عبارت __COUNTER__ عدد مورد نظر قرار می گیرد
حال برای استفاده از برنامه، خطوط و دستورات زیر را به برنامه اضافه می نماییم.
در فایل main.h عبارات زیر را وارد می کنیم:
پس از آن فایل main.c را باز می نماییم و دستور زیر را اضافه می کنیم:
با اجرا شدن این دستور کانتر مورد نظر به همراه اینتراپت مربوط به آن فعال می شود. با توجه به اینکه در این برنامه قصد ما فقط راه اندازی کانتر می باشد در فایل main.c تنها به فعال سازی کانتر بسنده می کنیم و دستور دیگری را اضافه نمی کنیم. پس از آن قصد داریم تا با فعال شدن اینتراپت کانتر LED متصل به میکرو تغییر وضعیت دهد پس لازم است تا تابع HAL_TIM_PeriodElapsedCallback در فایل stm32f1xx_hal_tim.c را کپی نماییم . مسیر فایل مورد نظر در تصویر زیر مشخص است.
پس از کپی تابع مورد نظر آن را در فایل stm32f1xx_it.c و در بخش USER CODE BEGIN 1 اضافه می نماییم. فایل stm32f1xx_it.c در بخش Project و در پوشه Aplication/User وجود دارد.
پس از انتقال تابع مذکور به فایل stm32f1xx_it.c درون بدنه تابع باید بررسی شود که اگر اینتراپت رخ داده شده مربوط به کانتر 2 می باشد پس وضعیت LED تغییر نماید.
همچنین می توانید با اتصال یک LCD2x16 که قبلا آموزش آن ارائه شده است و استفاده از ماکرو __HAL_TIM_GET_COUNTER مقدار کانتر را بخوانید و روی نمایشگر نمایش دهید.
در انتها می توانید شماتیک مربوط به این جلسه و برنامه (keil , STM32CubeMX) آنرا دانلود نمایید.
دلتون شاد و لبتون پرخنده
محمد هادی دشتی
دیگر آموزش ها مرتبط با STM32:
برای مشاهده آموزش جلسه اول(معرفی هسته آرم و میکروکنترلرهای 32 بیتی شرکت ST ) کلیک کنید.
برای مشاهده آموزش جلسه دوم( معرفی نرم افزارهای مورد نیازجهت برنامه نویسی و پروگرام ) کلیک کنید.
برای مشاهده آموزش جلسه سوم( نحوه دانلود آخرین نسخه از نرم افزار STM32CubeMX ) کلیک کنید.
برای مشاهده آموزش جلسه چهارم(نحوه انجام تنظیمات در نرم افزار STM32CubeMX ) کلیک کنید.
برای مشاهده آموزش جلسه پنجم(نحوه برنامه نویسی پروژه چشمک زن با نرم افزار Keil ) کلیک کنید.
برای مشاهده آموزش جلسه هشتم( نحوه راه اندازی ال سی دی کاراکتری-قسمت اول) کلیک کنید.