در صفحه اصلی آموزش میکروکنترلرهای STM32، در مورد اهمیت این میکروکنترلرها صحبت کردیم. در این بخش که مربوط به سری آموزش STM32 با توابع LL است، به معرفی این درایورها میپردازیم و سپس وارد بخشهای عملی آموزش خواهیم شد. در مجموعه آموزش STM32 با توابع LL تمام تلاش خود را کردهایم که تمام دستگاههای جانبی (Peripheral) میکروکنترلر STM32F103 را با یک پروژه ابتدایی اما کاربردی پوشش دهیم. امیدواریم که این آموزشها موردتوجه علاقهمندان به الکترونیک و میکروکنترلرها قرار گیرد.
کتابخانههای Low Layer
قبل از هر چیزی باید به این سؤال جواب دهیم که توابع LL در STM32 چه هستند؟ شرکت ST برای راهاندازی و توسعه نرمافزار برای میکروهای خود، ابزارهایی در اختیار کاربران قرار داده است که ازجمله این ابزارها، کتابخانههای LL یا Low Layer هستند. ویژگی بارز این توابع نزدیک بودن به لایهی سختافزار و دسترسی مستقیم به Register های میکروکنترلر است. به همین دلیل استفاده از این توابع به دانش سختافزاری نیاز دارد.
درواقع درایورهای LL باهدف ارائه یک لایهی سریع و سبک نزدیک به سختافزار برای کاربران متخصص، طراحیشده است. درایورهای LL شامل بخشها و ویژگیهای زیر میشوند:
- مجموعهای از توابع برای راهاندازی ویژگیهای اصلی دستگاههای جانبی (Peripheral)، که منطبق بر پارامترهای مشخصشده در ساختارهای داده، نوشتهشدهاند.
- مجموعهای از توابع که ساختارهای دادهی مربوط به راهاندازی را با مقدارهای ریست، مقداردهی میکنند.
- توابعی برای De-initialization دستگاههای جانبی (بازگرداندن رجیستر دستگاههای جانبی به مقدارهای پیشفرض آنها)
- یک مجموعه از توابع inline برای دسترسی مستقیم و atomic به رجیسترها
- استقلال کامل از درایورهای HAL؛ توابع LL را میتوان بهتنهایی و بهصورت مجزا از HAL، یا بهطور ترکیبی با HAL استفاده کرد.
- پوشش کامل ویژگیهای دستگاههای جانبی که پشتیبانی میشوند.
نکته قابلتوجه در مورد توابع LL این است که اعمالی که انجام میدهند و سرویسهای ارائه میکنند، دقیقاً انعکاس تواناییهای سختافزاری هستند که در زمان فراخوانی بهصورت یک عملیات one-shot اجرا میشوند. همچنین ازآنجاکه این سرویسها هیچ پروسهای را پیاده نمیکنند، نیازی به حافظه برای ذخیره حالت، شمارنده یا اشارهگر ندارند. همهی کارها با تغییر محتوای رجیستر مربوط به دستگاههای جانبی موردنظر انجام میشوند.
در کتابخانههای low layer علاوه بر 5 هدرفایل که مربوط بهویژگیهای سیستم و Cortex هستند، به ازای هر دستگاه جانبی یک هدرفایل و یک فایل C وجود دارد. همچنین قابلذکر است که برای LL فایل Configuration وجود ندارد و فایلهای مربوط به درایورهای LL در پوشه درایورهای HAL قرار دارند.
در همه درایورهای low-layer، تنها فایلی که Include میشود، فایل CMSIS دستگاه موردنظر است.
#include "stm32yyxx.h"
در فایلهای هر برنامه، تنها هدرفایلهای درایورهای LL مورداستفاده، Include خواهند شد.
ابزارهای مورداستفاده در آموزش STM32 با توابع LL
در این سری آموزش، علاوه بر ابزارهای کوچک و یا خاص سختافزاری یا نرمافزاری که برای یک پروژه استفاده میشوند (و در همانجا معرفی خواهند شد)، از یک بورد آموزشی برای میکروکنترلر STM32F103C8T به نام BluePill و در بعضی آموزشها نیز از بورد STM32F103RET (به همراه بردبورد و تجهیزات ازایندست مثل سیم بردبورد و..) استفاده میشود. ابزارهای نرمافزاری موردنیاز هم STM32 Cube MX و Keil uVersion5 هستند. نرمافزار اول که توسط خود شرکت منتشرشده است، برای پیکربندی و راهاندازی پروژه و کد استفاده میشود. نرمافزار Keil نیز یک IDE شناختهشده است که برای توسعه کد پروژه و دیباگ و خطایابی آن کاربرد دارد.
نرمافزار STM32 Cube MX را میتوانید از صفحه رسمی شرکت ST دریافت کنید.
آموزش STM32 با توابع LL قسمت اول: پردازندههای ARM
آموزش STM32 با توابع LL قسمت دوم: روشهای پیکرهبندی و انواع توابع
در قسمت اول از آموزش STM32 با توابع LL، در رابطه با پردازنده و میکروکنترلر صحبت کردیم و به تفاوتهای میکروکنترلر و پردازنده پرداختیم. همچنین گفته بودیم که خود شرکت ARM فقط طراح پردازنده است، نه میکروکنترلر.
آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX و Keil
در قسمت دوم از آموزش STM32 با توابع LL، در رابطه با چند بیتی بودن پردازنده و مزایای آن صحبت کردیم. در ادامه با نحوهی پیکرهبندی و همچنین روشهای مختلفی که برای آن وجود دارد آشنا شدیم. نهایتا هم با چندین نوع کتابخانه و تابع آشنا …
آموزش STM32 با توابع LL قسمت چهارم: RCC (کنترل ریست و کلاک)
در قسمت سوم از آموزش STM32 با توابع LL، یاد گرفتیم که در نرمافزار STM32CubeMX چگونه میتوان یک پروژه ایجاد کرد. همینطور در همان قسمت تنظیماتی که برای یک پروژه ساده نیاز بود را شرح دادیم و آن را پیکرهبندی کردیم و در نهایت از پیکر…
آموزش STM32 با توابع LL قسمت پنجم: GPIO-Output
در قسمت چهارم از آموزش STM32 با توابع LL، با واحد RCC آشنا شدیم و جزئیات و دلیل وجود کلاک در مدارات دیجیتال را بررسی کردیم، همچنین گفتیم که کلاک ورودی به میکروکنترلر چگونه در میکروکنترلر با استفاده از PLL افزایش و با استفاده از Pr…
آموزش STM32 با توابع LL قسمت ششم: GPIO-Input
در قسمت پنجم از آموزش STM32 با توابع LL، در رابطه با GPIO در حالت خروجی صحبت کردیم و به بررسی جزئیات رجیسترهای GPIO پرداختیم که همین بررسی جزئیات و البته یک سری توضیحات دیگر، درک ما را از تفاوت سرعت فاحش بین توابع HAL و LL بیشتر ک…
آموزش STM32 با توابع LL قسمت هفتم: Interrupt
در قسمت ششم از آموزش STM32 با توابع LL، در رابطه با GPIO در حالت ورودی صحبت کردیم. نحوهی کار به این صورت بود که مقدار رجیستری که مربوط به پینهای میکروکنترلر در حالت ورودی بود را میخواندیم و پس از آن، متناسب با آن مقدار، متغییری…
آموزش STM32 با توابع LL قسمت هشتم: UART-Transmit
در قسمت هفتم از آموزش STM32 با توابع LL، ابتدا در رابطه با کلیت و ذات وقفه صحبت کردیم و گفتیم که به چه دلایلی وقفه مفید است و باید در سیستم وجود داشته باشد، در ادامه در رابطه با وقفه در میکروکنترلرهای STM32 سری F1 صحبت کردیم و طرز…
آموزش STM32 با توابع LL قسمت نهم: UART-Receive
در قسمت هشتم از آموزش STM32 با توابع LL، ابتدا مقدمات پروتکل UART را بررسی کردیم و گفتیم که یک پکت دیتا در این پروتکل شامل چه بخشهایی میشود و این دیتا به چه صورت و با چه سرعتهایی میتواند منتقل بشود. در نهایت هم پروتکل UART را…
آموزش STM32 با توابع LL قسمت دهم: مبدل آنالوگ به دیجیتال (ADC)
در قسمت نهم از آموزش STM32 با توابع LL، ابتدا چالش بخش Receive یا همان دریافت دیتا در پروتکل UART را بررسی کردیم و در نهایت با استفاده از بهترین روشی که ذکر کردیم، یعنی روش وقفه، این بخش را به صورت عملی بر روی برد راهاندازی کردیم…
آموزش STM32 با توابع LL قسمت یازدهم: مبدل دیجیتال به آنالوگ (DAC)
در قسمت دهم از آموزش STM32 با توابع LL، ابتدا ADC را بررسی کردیم و گفتیم که یک ADC چه مشخصهها و پارامترهایی دارد و در نهایت واحد ADC در میکروکنترلرهای STM32 را به صورت عملی راهاندازی کردیم و ولتاژ میکروکنترلر را با استفاده از ای…
آموزش STM32 با توابع LL قسمت دوازدهم: Timer-TimeBase
در قسمت یازدهم از آموزش STM32 با توابع LL، در رابطه با DAC صحبت کردیم و ویژگیهای مهم DAC در میکروکنترلرهای STM32 را بررسی کردیم و در نهایت با استفاده از DAC، دو سیگنال پالس و مثلثی را ایجاد کرده و بر روی اسیلسکوپ نمایش دادیم. در …
آموزش STM32 با توابع LL قسمت سیزدهم: Timer-Input capture
در قسمت دوازدهم از آموزش STM32 با توابع LL، در رابطه با تایمرها و نحوهی عملکرد آنها صحبت کردیم و در نهایت واحد تایمر در میکروکنترلرهای STM32 را در حالت TimeBase راهاندازی کردیم و زمان 1 ثانیه را اندازهگیری کردیم. در این قسمت…
آموزش STM32 با توابع LL قسمت چهاردهم: ریدایرکت کردن Printf و Scanf با استفاده از USART
در بخشهای هشتم و نهم، به ترتیب با نحوه ارسال و دریافت اطلاعات توسط واحد USART آشنا شدیم. در این بخش، میخواهیم واحد USART بورد Blue Pill را راهاندازی کنیم و دستورات printf و scanf را به کمک USART ریدایرکت یا ریتارگت کنیم. همانط…
آموزش STM32 با توابع LL قسمت پانزدهم: راهاندازی واحد ADC و گرفتن اطلاعات توسط DMA
در بخش دهم، با واحد ADC آشنا شدیم. در این بخش، میخواهیم واحد ADC بورد Blue Pill را راهاندازی کنیم و به کمک واحد DMA از این واحد اطلاعات را دریافت و در حافظه ذخیره کنیم. واحد DMA یا Direct Memory Access همانطور که از نام آن مشخ…
همانطور که میدانید استفاده از DMA برای انتقال اطلاعات بین وسایل جانبی میکروکنترلر (Peripheral) و حافظه موجب تسریع عملکرد میکروکنترلر خواهد شد. در این بخش مثل بخش قبلی میخواهیم از DMA برای ارتباط بین وسایل جانبی و حافظه استفاده کنی…
آموزش STM32 با توابع LL قسمت هفدهم: راه اندازی واحد SPI
قبل از هرچیز، باید به توضیح پروتکل ارتباطی SPI و مودهای کاری مختلف آن بپردازیم. SPI مخفف Serial Peripheral Interface است که به معنی رابط سریال برای دستگاههای جانبی است. SPI یک پروتکل پراستفاده برای ارتباط بین میکروکنترلر و ICهای …
آموزش STM32 با توابع LL قسمت هجدهم: راهاندازی LCD Nokia سریال به کمک واحد SPI
در بخش قبلی واحد SPI را راهاندازی کردیم و با جزییات آن تا حدودی آشنا شدیم. در این بخش میخواهیم به کمک این واحد، یک LCD سریال (Nokia 5110) را راهاندازی کنیم. در تصویر زیر نمونه LCD موردنظر و ترتیب پایههای آن نشان داده شده است. …
آموزش STM32 با توابع LL قسمت نوزدهم: راهاندازی LCD Nokia به کمک واحد SPI بخش دوم (استفاده از فونت)
در بخش قبلی یک LCD Nokia را به کمک واحد SPI را راهاندازی کردیم و یک تصویر را روی آن نمایش دادیم. در این بخش قصد داریم یک فونت برای نوشتن در LCD تعریف کنیم و پیامهای موردنظرمان را روی LCD نمایش دهیم. با سیسوگ همراه باشید. قبل…
آموزش STM32 با توابع LL قسمت بیستم: راهاندازی LCD Nokia به کمک واحد SPI بخش سوم (نمایش انیمیشن روی LCD Nokia)
در دو بخش قبل، یک LCD را به کمک واحد SPI را راهاندازی کردیم و تصویر و فونت روی آن نمایش دادیم. در این بخش قصد داریم یک انیمیشن روی LCD Nokia نمایش دهیم. با سیسوگ همراه باشید. در ابتدا باید یک عکس متحرک پیدا کنیم و آن …
آموزش STM32 با توابع LL قسمت بیست و یکم: راهاندازی PWM
در بخشهای قبلی با تایمرها آشنا شدیم و برخی کاربردهای آنها را دیدیم. یکی دیگر از کاربردهای تایمر، حالت PWM (Pluse width Modulation) یا همان مدولاسیون پهنای پالس است. در این بخش با نحوه استفاده از این حالت آشنا خواهیم شد. …
منبع:سیسوگ