آموزش STM32آموزش های ARM

بررسی پایه های GPIO برد STM32

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

پورت‌ های STM32 GPIO

هر یک از پورت‌های ورودی/خروجی عمومی دارای دو رجیستر پیکربندی 32 بیتی، دو رجیستر داده 32 بیتی، یک رجیستر تنظیم/ریست 32 بیتی، یک رجیستر ریست 16 بیتی و یک رجیستر قفل 32 بیتی هستند. هر بیت پورت I/O به‌طور آزاد قابل برنامه‌ریزی است، اما دسترسی به رجیسترهای پورت I/O باید به صورت کلمات 32 بیتی باشد (دسترسی نیم‌کلمه یا بایت مجاز نیست). هدف رجیسترهای تنظیم/ریست، اجازه دسترسی اتمی به هر یک از رجیسترهای GPIO است. به این ترتیب، هیچ خطری از وقوع IRQ بین خواندن و تغییر دسترسی وجود ندارد.

در اینجا یک دیاگرام دیجیتال از ساختار داخلی یک پین GPIO معمولی ارائه شده است. این دیاگرام محافظ دیودی، فعال/غیرفعال کردن Pull-Up یا Pull-Down داخلی، درایور خروجی Push-Pull، فعال/غیرفعال کردن خروجی برای تغییر حالت بین ورودی/خروجی، ورودی دیجیتال با Trigger شِمیت، و ورودی آنالوگ را نشان می‌دهد.

پورت‌های STM32 GPIO

ولتاژ خروجی و ورودی STM32 GPIO

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

ولتاژ خروجی/ورودی STM32 GPIO

به‌طور پیش‌فرض، باید فرض کنید که تمام پین‌های GPIO قابلیت تحمل 5V را ندارند تا زمانی که در دیتاشیت مشخص شود یک پین خاص 5V قابل تحمل است و تنها در آن صورت می‌توان از آن به‌عنوان پین 5V استفاده کرد. اکثر پین‌ها 3.3V هستند و اتصال آن‌ها به خطوط ورودی دیجیتال 5V می‌تواند باعث آسیب شود. در بسیاری از موارد، تبدیل سطح ولتاژ ضروری است.

حداکثر ولتاژ و جریان STM32 GPIO

حداکثر جریان هر پین GPIO برابر 25mA است. این جریان بیشینه‌ای است که هر پین I/O می‌تواند تأمین یا جذب کند. بنابراین، باید در مورد سطح ولتاژ پین‌های ورودی دقت کنید و همچنین به جریان خروجی هنگام تنظیم پین‌های خروجی GPIO توجه داشته باشید. حداکثر جریان قابل تأمین یا جذب در هر پین GPIO طبق دیتاشیت 25mA است و باید برای میکروکنترلر STM32 مورد نظر بررسی شود.

حداکثر ولتاژ و جریان STM32 GPIO

سرعت STM32 GPIO

خطوط GPIO در STM32 دارای کنترل سرعت قابل برنامه‌ریزی هستند که می‌توان از آن برای تنظیم نرخ تغییر (Slew Rate) خطوط I/O استفاده کرد و سرعت حداکثری مجاز برای رانده شدن خط I/O را تعیین می‌کند. در این بخش، ویژگی کنترل سرعت GPIO و تمامی گزینه‌های پیکربندی آن بررسی می‌شود.

سرعت ورودی STM32 GPIO

وقتی یک پین GPIO در حالت ورودی قرار می‌گیرد، داده موجود روی پین I/O در هر سیکل کلاک APB2 وارد رجیستر داده ورودی می‌شود. این بدان معناست که سرعت باس APB2 سرعت نمونه‌برداری ورودی پین‌های GPIO را تعیین می‌کند.

سرعت خروجی STM32 GPIO

وقتی پین GPIO در حالت خروجی تنظیم شود، می‌توانید سرعت پین را با برنامه‌ریزی بیت‌های مربوطه در رجیسترهای پیکربندی تعیین کنید. جدول زیر حالت‌های مختلف سرعت برای میکروکنترلر STM32F103C8 را نشان می‌دهد.

سرعت خروجی STM32 GPIO

میکروکنترلرهای دیگر گزینه‌های متفاوتی برای سرعت خروجی پین دارند. به عنوان مثال، میکروکنترلر STM32L432KC دارای رجیستر کنترل سرعت اختصاصی برای پین‌های GPIO است که 4 گزینه سرعت مختلف دارد: Low-speed، Medium-speed، High-speed و Very High-speed.

سرعت STM32 GPIO

اگر در مورد این مطلب سوالی دارید در قسمت نظرات بپرسید

مقادیر سرعت خروجی در دیتاشیت هر دستگاه قابل مشاهده است:

  • Low-speed → تا 10MHz
  • Medium-speed → تا 50MHz
  • High-speed → تا 100MHz
  • Very High-speed → تا 180MHz

سرعت GPIO برد STM32 در دیتاشیت

این جدول فقط حالت سرعت پایین را نشان می‌دهد. حالت‌های دیگر در جدول کامل موجود در برگه اطلاعات فنی آمده است.

عملیات اتمی بیت STM32 GPIO

نیازی به غیرفعال کردن وقفه‌ها هنگام برنامه‌ریزی رجیستر GPIOx_ODR در سطح بیت نیست؛ می‌توان تنها یک یا چند بیت را در یک دسترسی اتمی APB2 تغییر داد. این کار با برنامه‌ریزی بیت‌های رجیستر Set/Reset (GPIOx_BSRR یا برای ریست فقط GPIOx_BRR) انجام می‌شود و بیت‌های انتخاب نشده تغییر نمی‌کنند.

وقفه‌ های STM32 GPIO

تمام پورت‌ها قابلیت وقفه خارجی دارند. برای استفاده از خطوط وقفه خارجی، پورت باید در حالت ورودی تنظیم شود. این موضوع به تفصیل در بخش EXTI (کنترلر وقفه/رویداد خارجی) توضیح داده خواهد شد.

بازنگری پین‌ های توابع جایگزین در STM32

برای بهینه‌سازی تعداد توابع I/O جانبی در بسته‌های مختلف دستگاه، می‌توان برخی توابع جایگزین را به پین‌های دیگر بازنگری کرد. این کار از طریق برنامه‌نویسی رجیسترهای مربوطه انجام می‌شود. این ویژگی امکان تغییر راحت پین‌های جانبی بدون نیاز به اصلاح زیاد PCB و کاهش نویز در بخش‌های خاص را فراهم می‌کند.

مکانیزم قفل‌ گذاری STM32 GPIO

مکانیزم قفل‌گذاری امکان ثابت کردن پیکربندی I/O را فراهم می‌کند. پس از اعمال توالی LOCK روی یک بیت پورت، امکان تغییر مقدار آن بیت تا ریست بعدی سیستم وجود ندارد.

پیکربندی‌ های STM32 GPIO

با توجه به ویژگی‌های سخت‌افزاری هر پورت که در دیتاشیت ذکر شده است، هر بیت پورت GPIO می‌تواند به صورت جداگانه در چند حالت توسط نرم‌افزار پیکربندی شود:

پیکربندی خروجی:

  • خروجی Open-Drain
  • خروجی Push-Pull

پیکربندی ورودی:

  • ورودی Floating (Hi-Z)
  • ورودی Pull-Up
  • ورودی Pull-Down

پیکربندی توابع جایگزین:

  • Alternate Function Push-Pull
  • Alternate Function Open-Drain

پیکربندی آنالوگ

جمع‌ بندی STM32 GPIO

تمام پین‌های STM32 GPIO قابلیت تحمل 5V ندارند و عمدتاً 3.3V هستند. برای استفاده از هر GPIO، باید کلاک آن را فعال کنید. هنگام پیکربندی پین خروجی، می‌توانید سرعت مناسب برنامه خود را انتخاب کنید تا سوئیچینگ با فرکانس بالا انجام شود یا خیر.

سرعت باس APB2 نرخ نمونه‌برداری تمام پین‌های ورودی را تعیین می‌کند. می‌توانید هر پین GPIO را با تنظیم آن در حالت ورودی Hi-Z جدا کنید. پس از راه‌اندازی سیستم، با مکانیزم قفل‌گذاری می‌توان پیکربندی پین‌ها را ثابت نگه داشت.

پین‌های توابع جایگزین قابل تعویض داخلی هستند و آزادی بیشتری در مسیر‌دهی سیگنال‌ها فراهم می‌کنند. تمام پین‌های STM32 GPIO قابلیت وقفه دارند، اما باید در EXTI پیکربندی شوند که در ادامه سری آموزش‌های STM32 بررسی خواهد شد.

5 (1 نفر)

برای دریافت مطالب جدید کانال تلگرام یا پیج اینستاگرام ما را دنبال کنید.

محمد رحیمی

محمد رحیمی هستم. سعی میکنم در آیرنکس مطالب مفید قرار بدهم. سوالات مربوط به این مطلب را در قسمت نظرات همین مطلب اعلام کنید. سعی میکنم در اسرع وقت به نظرات شما پاسخ بدهم.

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

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