1. خانه
  2. آموزش
  3. جلسه بیست و یکم _ نحوه راه اندازی کانتر و برنامه آن در محیط STM32CubeIDE (بخش دوم)

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

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

در ادامه آموزش STM32 با استفاده از توابع HAL در این جلسه قصد داریم تا به بررسی برنامه در محیط نرم افزاری STM32CubeIDE بپردازیم و با دستورات مربوط به کانتر بیشتر آشنا شویم.

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

LED_Conf

با اجرا نمودن برنامه مورد نظر، در محیط STM32CubeIDE به سراغ معرفی خطوط و دستورات مربوط به کانتر می رویم. در فایل main.c استراکچر مربوط به تایمر ۲ اضافه شده است.

Var_htim2

در ادامه این فایل و در بخش Private function تابع مربوط به تنظیمات تایمر مورد نظر و تنظیم کلاک و پایه های ورودی/خروجی قرار گرفته شده است:

Private_Func

حال به سراغ بدنه تابع MX_TIM2_Init می رویم تا مقادیری را که در نرم افزار STM32CubeMX تنظیم نموده ایم مشاهده نماییم.

Tim2_Init

با توجه به تصویر بالا به معرفی و وظیفه برخی از این دستورات می پردازیم.
قسمت htim2.Instance مشخص کننده نوع تایمر است و در زمان فعال شدن اینتراپت مورد نظر با بررسی Instance متوجه می شویم که کدام تایمر وقفه اش فعال شده است.
خط htim2.Init.Prescaler مربوط به مقدار پیش تقسیم کننده می باشد که در این پروژه با قرار دادن مقدار ۰ از پیش تقسیم کننده استفاده نشده است.
نوع شمارش کانتر با مقدار دهی دستور 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 عبارات زیر را وارد می کنیم:

Define

پس از آن فایل main.c را باز می نماییم و دستور زیر را اضافه می کنیم:

Tim_Start_IT

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

HAL_TIM

پس از کپی تابع مورد نظر آن را در فایل stm32f1xx_it.c و در بخش USER CODE BEGIN 1 اضافه می نماییم. فایل stm32f1xx_it.c در پوشه Src وجود دارد.

IT

پس از انتقال تابع مذکور به فایل stm32f1xx_it.c درون بدنه تابع باید بررسی شود که اگر اینتراپت رخ داده شده مربوط به کانتر ۲ می باشد پس وضعیت LED تغییر نماید.

CallBack

همچنین می توانید با اتصال یک LCD2x16 که قبلا آموزش آن ارائه شده است و استفاده از ماکرو __HAL_TIM_GET_COUNTER مقدار کانتر را بخوانید و روی نمایشگر نمایش دهید.

زندگی تون پر از نور و مسیرتون سبز

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

لینک های مرتبط با آموزش:
جلسه اول_معرفی هسته آرم و میکروکنترلرهای ۳۲ بیتی شرکت ST

جلسه دوم_معرفی نرم افزارهای مورد نیازجهت برنامه نویسی و پروگرام

جلسه سوم _ آموزش نحوه دانلود آخرین نسخه از نرم افزار STM32CubeIDE

جلسه چهارم _نصب نرم افزار STM32CubeIDE و نصب کتابخانه

جلسه پنجم _ نحوه انجام تنظیمات در نرم افزار STM32CubeMX برای تولید کد برنامه چشمک زن

جلسه ششم _ برنامه نویسی یک چشمک زن ساده با استفاده از نرم افزار STM32CubeIDE

جلسه هفتم _ نحوه انجام تنظیمات پایه به صورت ورودی در نرم افزار STM32CubeMX و برنامه نویسی یک کلید

جلسه هشتم _ معرفی نرم افزار STM32 Flash Loader Demonstrator (پروگرامر سریال) 

جلسه نهم _ نحوه راه اندازی ال سی دی کاراکتری (قسمت اول)

جلسه دهم _ نحوه راه اندازی ال سی دی کاراکتری _ افزودن کتابخانه (قسمت دوم)

جلسه یازدهم _ نحوه راه اندازی ال سی دی کاراکتری _ معرفی توابع (قسمت سوم)

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

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

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

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

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

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

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

جلسه نوزدهم _ نحوه راه اندازی سون سگمنت و برنامه آن در محیط STM32CubeIDE (بخش دوم)

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

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

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

جلسه بیست و چهارم _ معرفی واحد UART و سطوح منطقی ولتاژ و انواع مبدل ها(بخش اول)

جلسه بیست پنجم _ نحوه راه اندازی واحد UART ونحوه انجام تنظیمات در محیط STM32CubeMX(بخش دوم)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
برای ادامه، شما باید با قوانین موافقت کنید