در بخش معرفی آموزش میکروکنترلرهای STM32، با این خانواده از میکروکنترلرها آشنا شدیم و درباره اهمیت یادگیری آنها صحبت کردیم. در این سری آموزش یکی از ابزارهای برنامه نویسی این میکروکنترلرها، یعنی توابع HAL را میآموزیم. درباره این کتابخانه در گذشته به صورت مختصر صحبت شد. در این قسمت از سری آموزش STM32 با توابع HAL، میخواهیم کمی بیشتر در مورد HAL و مزایا و معایب آن صحبت کنیم. با سیسوگ همراه باشید.
گفتیم که توابع HAL یا Hardware Abstraction Layer در بالاترین سطح ممکن قرار دارند و با استفاده از آنها معمولاً بهطور مستقیم با رجیسترها سروکار نداریم. با استفاده از این توابع اگرچه حجم کد و زمان کامپایل (نسبت به استفاده از توابع LL) بیشتر میشود، اما فرآیند توسعه برنامه با سرعت و سهولت بیشتری صورت میگیرد. هر دستور HAL کار چندین دستور LL را برای ما انجام میدهد و دیگر نیازی به تنظیم رجیسترها نداریم.
توابع HAL خالی از اشکال نیستند. درواقع در بسیاری از انجمنهای مربوط به میکروکنترلرها، میبینیم که کاربران و بهخصوص توسعهدهندگان قدیمیتر، ترجیح میدهند با روشهای قبل برنامهنویسی کنند و رجیسترها را مقداردهی کنند. اصلیترین مشکلاتی که به آنها اشاره میشود، مشکلات Documentation این درایورهاست که به نسبت راهنمای جامع Standard Peripheral Libraries، گمراهکننده و بینظم هستند. حجم کد تولیدشده به این روش به نسبت قابلتوجهی بیشتر است و در بعضی موارد گزارششده که کدهای تولیدشده بهوسیله این توابع دارای باگ هستند. مشکل دیگر دشواری و زمانبر بودن اطمینان از صحت کامل پیادهسازی و اجرای کد موردنظر است. ریشه اکثر این موارد نیز در دور شدن از لایه سختافزار است.
باوجود تمامی مشکلات گفتهشده، استفاده از HAL مزایای مهمی دارد که به مهمترین آنها (که دلایل توسعه این کتابخانهها نیز هستند) اشاره میکنیم. یک مزیت مهم قابلیت انتقال بالای کد نوشتهشده روی میکروهای مختلف ST است. مورد مهم دیگر این است HAL توسعهدهنده را قدر میسازد که بیشتر وقت و انرژی را صرف توسعه لایههای بالاتر پروژه کند. بنابراین نمیتوان از اهمیت آشنایی با این کتابخانهها گذشت. میتوان گفت که توابع HAL و توابع LL مکمل یکدیگر هستند و با استفاده مناسب از آنها میتوان بسیاری از کاربردها را پوشش داد؛ توابع سطح بالای HAL که پیچیدگیهای سختافزاری را از دید ما پنهان میکنند، در کنار LL که امکان توسعه بهینه برنامه را به ما میدهد. اگرچه استفاده از توابع LL برخلاف HAL به آشنایی با سختافزار نیاز دارد.
در هدر فایل عمومی درایورهای HAL (یعنی stm32f1xx_hal.h) تنظیمات کلی مربوط به همه بخشهای مورداستفاده کتابخانه HAL، گنجانده میشود. درواقع Include کردن این هدر فایل، بهتنهایی به ما این امکان را میدهد که در سورسهای خود از منابع HAL استفاده کنیم. در شکل زیر ارتباط فایلهای HAL نشان دادهشده است:
برای استفاده از درایورهای HAL مزایای زیادی را میتوان برشمرد:
توابع Initialization و De-initaialization
این بخش شامل API های زیر میشود:
توابع عملیات ورودی/خروجی
این بخش شامل API های زیر میشود:
نام تابع: void HAL_GPIO_Init (GPIO_TypeDef * GPIOx, GPIO_InitTypeDef * GPIO_Init)
توضیح: راهاندازی دستگاهجانبی GPIOx با توجه به پارامترهای مشخص شده در GPIO_Init.
پارامترها:
مقادیر بازگشتی: این تابع مقدار بازگشتی ندارد.
با توجه به نکات گفتهشده، استفاده از درایورهای HAL میتواند در بسیاری از شرایط سودمند باشد و زمان توسعه را کاهش دهد. این مورد بهخصوص راجع به پروژههایی که در دسته آزمایش و خطا هستند صادق است. زیرا بدین طریق در زمان کمی کارایی پروژه یا ضعفها و ایرادات آن مشخص میشوند. اگرچه توابع سطح بالا ویژگیهای اضافهای دارند که ممکن است در برخی از شرایط موردنیاز نباشند، و بهاینترتیب فضای بیشتری از حافظه اشغال میشود و کارایی میکرو نیز به دلیل همین ویژگیهای اضافی کندتر میگردد. میتوان با استفاده از توابع LL استفاده از حافظه و سرعت اجرا را بهینهسازی کرد اما در این صورت انتقال برنامه به میکروهای دیگر ساده نخواهد بود (البته میتوان تنها از آن دسته از توابع LL بهره گرفت که در تمامی میکروها یکسان هستند).
در این سری آموزش میخواهیم کار با درایورهای HAL را یاد بگیریم و وسایل جانبی میکروکنترلر را به ویسلهی آنها راهاندازی کنیم. بعد از راهاندازی هر وسیله جانبی پروژه سادهای به کمک آن اجرا میکنیم. در قسمت بعد این آموزش نحوه پیکربندی پروژه و محیط برنامهنویسی Cube IDE را بررسی میکنیم و بعدازآن نیز سراغ اولین پروژه خواهیم رفت. با ما همراه باشید.
وسایل جانبی میکروکنترلر را به ویسلهی آنها راهاندازی…
>>وسیله<<
سلام
از آموزش LL که لذت بردیم، فقط آیا میشه از LL و HAL هم زمان در یک پروژه استفاده کرد؟ چطور؟؟
از این لینک هم میشه این آموزش رو دنبال کرد، همه رو یکجا نوشته:
https://sisoog.com/category/%d8%aa%d9%88%d8%a7%d8%a8%d8%b9-hal
با عرض سلام و احترام بی کران
تبریک بنده را برای اموزشهای خوبی که میگزارید پذیرا باشید
لطفا بنده را راهنمایی کنید پیوستگی اموزشها را چگونه دنبال کنم
بدین معنی که بعضی سایت ها اول مطلب لینک مطلب قبلی را دارد و در انتها لینک مطلب بعدی
بنده تازه شروع به اموزش stm32 کرده ام
با تشکر ممنون میشوم زود پاسخ عنایت کنید
سلام و درود بر شما
معمولا در انتهای آموزش ها در صورت وجود قسمت بعدی لینک آن قرار خواهد گرفت و البته در ابتدای ان هم لینک قسمت قبلی
و راه دیگر هم دنبال کردن صفحه آموزش است که تمام قسمت ها درآن منشر خواهد شد.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.