آموزش STM32 با توابع LL

در صفحه اصلی آموزش میکروکنترلرهای STM32، در مورد اهمیت این میکروکنترلرها صحبت کردیم. در این بخش که مربوط به سری آموزش STM32 با توابع LL است، به معرفی این درایورها می‌پردازیم و سپس وارد بخش‌های عملی آموزش خواهیم شد. در مجموعه آموزش STM32 با توابع LL تمام تلاش خود را کرده‌ایم که تمام دستگاه‌های جانبی (Peripheral) میکروکنترلر STM32F103 را با یک پروژه ابتدایی اما کاربردی پوشش دهیم. امیدواریم که این آموزش‌ها موردتوجه علاقه‌مندان به الکترونیک و میکروکنترلرها قرار گیرد. برای ادامه راه با سیسوگ همراه باشید.

کتابخانه‌های Low Layer

قبل از هر چیزی باید به این سؤال جواب دهیم که توابع LL در STM32 چه هستند؟ شرکت ST برای راه‌اندازی و توسعه نرم‌افزار برای میکروهای خود، ابزارهایی در اختیار کاربران قرار داده است که ازجمله این ابزارها، کتابخانه‌های LL یا Low Layer هستند. ویژگی بارز این توابع نزدیک بودن به لایه‌ی سخت‌افزار و دسترسی مستقیم به Register های میکروکنترلر است. به همین دلیل استفاده از این توابع به دانش سخت‌افزاری نیاز دارد.

آموزش STM32 با توابع LL

درواقع درایورهای 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 دستگاه موردنظر است.

 

آموزش STM32 با توابع LL

در فایل‌های هر برنامه، تنها هدرفایل‌های درایورهای LL مورداستفاده، Include خواهند شد.

ابزارهای مورداستفاده در آموزش STM32 با توابع LL

در این سری آموزش، علاوه بر ابزارهای کوچک و یا خاص سخت‌افزاری یا نرم‌افزاری که برای یک پروژه استفاده می‌شوند (و در همان‌جا معرفی خواهند شد)، از یک بورد آموزشی برای میکروکنترلر STM32F103C8T به نام BluePill و در بعضی آموزش‌ها نیز از بورد STM32F103RET (به همراه بردبورد و تجهیزات ازاین‌دست مثل سیم بردبورد و..) استفاده می‌شود. ابزارهای نرم‌افزاری موردنیاز هم STM32 Cube MX و Keil uVersion5 هستند. نرم‌افزار اول که توسط خود شرکت منتشرشده است، برای پیکربندی و راه‌اندازی پروژه و کد استفاده می‌شود. نرم‌افزار Keil نیز یک IDE شناخته‌شده است که برای توسعه کد پروژه و دیباگ و خطایابی آن کاربرد دارد.

نرم‌افزار STM32 Cube MX را می‌توانید از این صفحه در سایت سیسوگ یا از صفحه رسمی شرکت ST دریافت کنید.

 

STM32

آموزش STM32 با توابع LL قسمت اول: پردازنده‌های ARM

همان‌طور که می‌دانید میکروکنترلرها یا پردازنده‌های ARM (تفاوت میکروکنترلر و پردازنده در ادامه ذکر خواهد شد، فعلاً این دو را معادل هم در نظر بگیرید) امروزه بیشترین استفاده را در بین سایر میکروکنترلرها، حداقل در کشور ما دارد. ما هم ...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت دوم: روش‌های پیکره‌بندی و انواع توابع

در قسمت اول از آموزش STM32 با توابع LL، در رابطه با پردازنده و میکروکنترلر صحبت کردیم و به تفاوت‌های میکروکنترلر و پردازنده پرداختیم. همچنین گفته بودیم که خود شرکت ARM فقط طراح پردازنده است، نه میکروکنترلر و سه دسته‌ی مهم از پرداز...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX و Keil

در قسمت دوم از آموزش STM32 با توابع LL، در رابطه با چند بیتی بودن پردازنده و مزایای آن صحبت کردیم. در ادامه با نحوه‌ی پیکره‌بندی و همچنین روش‌های مختلفی که برای آن وجود دارد آشنا شدیم. نهایتاً هم با چندین نوع کتاب‌خانه و تابع آشنا...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت چهارم: RCC (کنترل ریست و کلاک)

در قسمت سوم از آموزش STM32 با توابع LL، یاد گرفتیم که در نرم‌افزار STM32CubeMX چگونه می‌توان یک پروژه ایجاد کرد. همین‌طور در همان قسمت تنظیماتی که برای یک پروژه ساده نیاز بود را شرح دادیم و آن را پیکره‌بندی کردیم و درنهایت از پیکر...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت پنجم: GPIO-Output

در قسمت چهارم از آموزش STM32 با توابع LL، با واحد RCC آشنا شدیم و جزئیات و دلیل وجود کلاک در مدارات دیجیتال را بررسی کردیم، همچنین گفتیم که کلاک ورودی به میکروکنترلر چگونه در میکروکنترلر با استفاده از PLL افزایش و با استفاده از Pr...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت ششم: GPIO-Input

در قسمت پنجم از آموزش STM32 با توابع LL، در رابطه با GPIO در حالت خروجی صحبت کردیم و به بررسی جزئیات رجیسترهای GPIO پرداختیم که همین بررسی جزئیات و البته یک سری توضیحات دیگر، درک ما را از تفاوت سرعت فاحش بین توابع HAL و LL بیشتر ک...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت هفتم: Interrupt

در قسمت ششم از آموزش STM32 با توابع LL، در رابطه با GPIO در حالت ورودی صحبت کردیم. نحوه‌ی کار به این صورت بود که مقدار رجیستری که مربوط به پین‌های میکروکنترلر در حالت ورودی بود را می‌خواندیم و پس از آن، متناسب با آن مقدار، متغییری...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت هشتم: UART-Transmit

در قسمت هفتم از آموزش STM32 با توابع LL، ابتدا در رابطه با کلیت و ذات وقفه صحبت کردیم و گفتیم که به چه دلایلی وقفه مفید است و باید در سیستم وجود داشته باشد، در ادامه در رابطه با وقفه در میکروکنترلرهای STM32 سری F1 صحبت کردیم و طرز...

ادامه مطلب

STM32

آموزش STM32 با توابع LL قسمت نهم: UART-Receive

در قسمت هشتم از آموزش STM32 با توابع LL، ابتدا مقدمات پروتکل UART را بررسی کردیم و گفتیم که یک پکت دیتا در این پروتکل شامل چه بخش‌هایی می‌شود و این دیتا به چه صورت و با چه سرعت‌هایی می‌تواند منتقل بشود. در نهایت هم پروتکل UART را...

ادامه مطلب

ADC

آموزش STM32 با توابع LL قسمت دهم: مبدل آنالوگ به دیجیتال (ADC)

در قسمت نهم از آموزش STM32 با توابع LL، ابتدا چالش بخش Receive یا همان دریافت دیتا در پروتکل UART را بررسی کردیم و در نهایت با استفاده از بهترین روشی که ذکر کردیم، یعنی روش وقفه، این بخش را به صورت عملی بر روی برد راه‌اندازی کردیم...

ادامه مطلب

DAC

آموزش STM32 با توابع LL قسمت یازدهم: مبدل دیجیتال به آنالوگ (DAC)

در قسمت دهم از آموزش STM32 با توابع LL، ابتدا ADC را بررسی کردیم و گفتیم که یک ADC چه مشخصه‌ها و پارامترهایی دارد و در نهایت واحد ADC در میکروکنترلرهای STM32 را به صورت عملی راه‌اندازی کردیم و ولتاژ میکروکنترلر را با استفاده از ای...

ادامه مطلب

Timer

آموزش 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 همانطور که از نام آن مشخ...

ادامه مطلب

آموزش STM32 با توابع LL قسمت شانزدهم: استفاده از DMA برای ارسال اطلاعات از حافظه توسط واحد USART

همانطور که میدانید استفاده از 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 نمایش دهیم. با سیسوگ همراه باشید.   در ابتدا باید یک عکس متحرک پیدا کنیم و آن ...

ادامه مطلب