آموزش stm32 قسمت پنجم(بررسی ریجستر های GPIO میکرو STM32F103RET6 )

آموزش stm32

کار با رجیستر های GPIO

توابع HAL دستوراتی را برای تغییر وضعیت پین ها و خواندن وضعیت پین ها در اختیار ما قرار داده پس این توابع واسطه بین ما و رجیستر های اصلی میکرو می باشد.گاهی اوقات این واسطه گری باعث کاهش سرعت انتقال دیتا به GPIO ها و یا کاهش سرعت خواندن وضعیت GPIO  ها می شود و ما را مجبور به استفاده مستقیم از ریجیستر های اصلی  میکرو را می کند.

این اتفاق بیشتر مربوط به دستورات HAL مربوط GPIO ها است ولی در دیگر امکانات میکرو تقریبا چنین مشکلاتی نداریم.

ریجیستر های GPIO  عبارتند از:


 

1.GPIOx_CRL : Port configuration register low

این رجیستر برای مشخص کردن وضعیت ورودی و خروجی و مد های کاری پورت ها است و 32 بیتی می باشد.(پین های 0 تا 7).


2.GPIOx_CRH :Port configuration register high

این رجیستر برای مشخص کردن وضعیت ورودی و خروجی و مد های کاری پورت ها است و 32 بیتی می باشد.(پین های 8 تا 15)


3.GPIOx_IDR :Port input data registe

این رجیستر فقط برای خواندن وضعیت پورت ها است و 32 بیتی می باشد. 16 بیت اول برای خواندن وضعیت پین و 16 بیت آخر رزور است.


4.GPIOx_ODR : Port output data register

این رجیستر برای مقدار دهی به پورت ها است و 32 بیتی می باشد. 16 بیت اول برای ست و ریست پین ها و 16 بیت آخر رزور است.


5.GPIOx_BSRR : Port bit set/reset register

این رجیستر برای صفر و ست کردن پین ها است و 32 بیتی می باشد.16 بیت اول فقط برای ست کردن و 16 بیت بعد برای صفر کردن پین ها است.

نکته : در 16 بیت آخر شما با مقدار یک گذاشتن در بیت ها پین ها را صفر می کنید.


6.GPIOx_BRR : Port bit reset register

این رجیستر فقط رای صفر کردن پین ها است و 32 بیتی می باشد که 16 بیت اول برای صفر کردن و 16 بیت آخر رزرو است.

نکته : تفاوت دو رجیستر آخر با رجیستر GPIOx_ODR این است که رجیستر GPIOx_ODR  برای تغییر وضعیت پورت ها است اما آن دوتای دیگر برای تغییر وضعیت پین ها به صورت تکی است و همچنین دو رجیستر آخر سرعت بیشتری نسبت به رجیستر GPIOx_ODR دارند.

به عنوان مثال تابع زیر را ببینید برای انتقال دیتا به پایه های OLED 0.96 است ( با رجیستر های اصلی میکرو )

حال دستورات با توابع HAL به صورت زیر است

 

9
دیدگاه بگذارید

avatar
6 Comment threads
3 Thread replies
1 Followers
 
Most reacted comment
Hottest comment thread
6 Comment authors
isaمحمدعلیرضا خلجfaridmicrodroidprjsiteیونس Recent comment authors
mojtaba
Guest
mojtaba

به این آموزش ادامه میدین؟

یونس
Guest
یونس

سلام و ممنون بابت آموزشتون. لطفا ادامه بدید آموزش ها تون را.

علیرضا خلج
Guest
علیرضا خلج

سلام
مطالبتون فوق العادس! لطفا قسمت های بعدی رو هم قرار بدید
ممنونم

محمد
Guest
محمد

سلام خسته نباشید .. پرقدرت اموزش رو ادامه بدید ممنونم ..

محمد
Guest
محمد

توضیحات یخورده ساده یا کم نیس؟

isa
Guest
isa

سلام
ممنون از اموزشتون
یه سوال داشتم
چطوری می تونم به حداکثر ارسال و دریافت روی portb میکرو stm32f103c8 دسترسی داشته باشم
یعنی حداکثر سرعت پین ها 50 مگ
متاسفانه هر کاری کردم ولی سرعت خیلی پایینه
اگر می تونید راهنمایی بفرمایید ممنون