بررسی پایه های 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
سطح ولتاژ خروجی GPIO در STM32 برابر 3.3V است و ولتاژ ورودی GPIO نیز 3.3V میباشد، در حالی که برخی از این پینهای ورودی توانایی تحمل 5V را دارند. اما برای اطمینان باید به دیتاشیت مراجعه کنید تا مشخص شود کدام پینها 5V قابل تحمل هستند.

بهطور پیشفرض، باید فرض کنید که تمام پینهای GPIO قابلیت تحمل 5V را ندارند تا زمانی که در دیتاشیت مشخص شود یک پین خاص 5V قابل تحمل است و تنها در آن صورت میتوان از آن بهعنوان پین 5V استفاده کرد. اکثر پینها 3.3V هستند و اتصال آنها به خطوط ورودی دیجیتال 5V میتواند باعث آسیب شود. در بسیاری از موارد، تبدیل سطح ولتاژ ضروری است.
حداکثر ولتاژ و جریان STM32 GPIO
حداکثر جریان هر پین GPIO برابر 25mA است. این جریان بیشینهای است که هر پین I/O میتواند تأمین یا جذب کند. بنابراین، باید در مورد سطح ولتاژ پینهای ورودی دقت کنید و همچنین به جریان خروجی هنگام تنظیم پینهای خروجی GPIO توجه داشته باشید. حداکثر جریان قابل تأمین یا جذب در هر پین GPIO طبق دیتاشیت 25mA است و باید برای میکروکنترلر STM32 مورد نظر بررسی شود.

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

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

مقادیر سرعت خروجی در دیتاشیت هر دستگاه قابل مشاهده است:
- Low-speed → تا 10MHz
- Medium-speed → تا 50MHz
- High-speed → تا 100MHz
- Very High-speed → تا 180MHz

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







