آموزش میکروکنترلرهای LPC1768 جلسه پنجم: پورت های ورودی و خروجی lpc17xx_gpio

اگر جلسات قبلی آموزش میکروکنترلرهای LPC1768 را در سایت میکرو دیزاینر الکترونیک دنبال کرده باشید میدانید که در جلسه قبلی  توابع CMSIS را برسی کردیم و گفتیم که میخواهیم برنامه ها را بر اساس این توابع بنویسیم. در این جلسه میخواهیم پورت های ورودی و خروجی lpc17xx_gpio  میکروکنترلر LPC1768 را برسی کنیم البته برای سری های مختلف فرقی ندارند و بطور کلی LPC17XX مینامیم.

آموزش میکروکنترلرهای LPC1768 جلسه پنجم: پورت های ورودی و خروجی lpc17xx_gpio

میکروکنترلر LPC1768 حداکثر دارای پنج پورت و این پنج پورت سرجمع دارای هفتاد پین ورودی و خروجی میباشند.نام گذاری پورت ها بصورت P0,P1,P2,P3,P4 میباشند.

بعضی پورت ها دارای 32 پایه و بعضی دیگر کمترند و در داخل بعضی پورت ها بعضی پین ها قابل استفاده نیستن !!مثلا پین های P0[12,13,14],P1[2,3,5,6,7,11,12,13] قابل استفاده نیستن.بقیه پین ها بصورت زیر هستن:

P[30:0]

P1[31:0]

P2[13:0]

P3[26:25]

P4[29:28]

فایل PDF زیر نقشه پایه های میکروکنترلر LPC1768 میباشد.فایل زیر را دانلود کنید در ادامه آموزش ها هم لاز میشه.

دانلود

برای اطلاعات دقیق تر در مورد پین های ورودی و خروجی به قست pin configuration مراجعه کنید.

خب اول کاری گفتم نمیخوام با رجیستر های میکروکنترلر LPC1768 کار کنیم و سعی میکنیم همه برنامه ها و آموزش ها بر اساس توابع CMSIS باشند در این قسمت فقط نگاهی گذرا به رجیستر ها می اندازیم و میریم سر توابع lpc17xx_gpio.h که خیلی راحتر یاد بگیریم.

مطلب پیشنهادی:  اتصال STM32 به کامپیوتر با پورت سریال (بخش تکمیلی راه اندازی پروتکل سریال STM32)

رجیستر های GPIO میروکنترلر LPC1768

رجیستر FIOxDIR

این رجیستر برای تعیین جهت پورت ها (ورودی یا خروجی ) مورد استفاده می شود.

رجیستر FIOxSET

این رجیستر جهت 1 کردن پین هایی که بصورت خروجی تعریف شدن.

رجیستر FIOxCLR

این رجیستر جهت 0 کردن پین هایی که بصورت خروجی تعیین شدن.

رجیستر FIOxPIN

این رجیستر دسترسی مستقیم به پورت های ورودی و خروجی را فراهم میکند. بطور مستقیم میتوانیم روی پین بنویسید و بخوانیم.

رجیستر FIOxMASK

برای اینکه در پورت بعضی بیت ها را از عملیات نوشتن/خواندن یا تغییر حالت ورودی/ خروجی  محافظت کنیم از این رجیستر استفاده میکنیم.

رجیسترهای PINSEL 0-10

جهت اننتخاب نحوه عملکرد پین ها مورد استفاده قرار میگیرد بعضی پین ها عملکرد های مختلفی مانند GPIO,UART,SPI,… دارن

رجیسترهای PINMODE 0-9

جهت تنظیم مقاومت های PULL-UP و PULL-DOWN داخلی پورت ها

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

رجیتسر های PINMODE_OP 0-4

برای انتخاب حالت  Open Drain یا درین باز پین ها مورد استفاده قرار میگرن.

خب تا اینجا مروری کردیم بر رجیستر های GPIO میکروکنترلر LPC1768 ، بریم سراغ توابع CMSIS برای کار با ورودی و خروجی ها.

برسی توابع کار با GPIO کتابخانه lpc17xx_gpio.h

دقت داشته باشید همه توابعی که در زیر برسی میکنیم در هدر فایل lpc17xx_gpio.h موجود میباشند و از اینجا دانلود کنید.

مطلب پیشنهادی:  آموزش ARM LPC1768 (قسمت اول)
تابع GPIO_ReadValue

Uint32_t  GPIO_ReadValue(uint8_t portNum);

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

ورودی تابع port_Num شماره پورتی که میخواهید بخوانید.

خروجی تابع uint32_t وضعیت پورت

تابع GPIO_SetDir

void GPIO_SetDir(uint8_t portNum, uint32_t bitValue, uint8_t dir);

برای تعیین ورودی/خروجی پین های پورت مورد استفاده قرار میگرد.

ورودی portNum : شماره پورت مورد نظر

ورودی bitValue: شماره پین های مورد نظر

ورودی dir : اگر 0  باشد ورودی و اگر 1 باشد خروجی

تابع GPIO_SetValue

void GPIO_SetValue(uint8_t portNum, uint32_t bitValue);

برای یک کردن پین هایی که خروجی تعیین شدن.

ورودی portNum : شماره پورت مورد نظر

ورودی bitValue : شماره پین های مورد نظر

تابع GPIO_ClearValue

void GPIO_ClearValue(uint8_t portNum, uint32_t bitValue);

برای صفر نمودن پین های یک پورت استفاده میشه.

ورودی portNum: شماره پورت مورد نظر

ورودی bitValue: شماره پین های مورد نظر

نکته مهم : این هدر فایل دارای توابع بیشتری میباشد مثلا FIO_HalfWordSetDir که بصورت 16 بیتی میتونیم وضعیت ورودی و خروجی ها را تعیین کنیم. که در این مرحله از یادگیری به این توابع نیاز نداریم و اگر نیاز داشتیم میریم سراغشون.

مثال : پین های 21 و 22 از پورت 0 را خروجی تعیین و پین 21 را 1 و پین 22 را 0 کنید.

#include “lpc17xx.h”

#include “lpc17xx_gpio.c”

int main(void){

GPIO_SetDir(0, (1<<21)|(1<<22), 1);

GPIO_SetValue(0, (1<<21));

GPIO_ClearValue(0, (1<<22));

}

خروجی مثال : پورت های ورودی و خروجی lpc17xx_gpio

مثال دوم : مقدار پورت 0 را خوانده و در متغییر A ذخیره کنید.

مطلب پیشنهادی:  آموزش میکروکنترلرهای LPC1768 جلسه اول: معرفی ARM و هسته Cortex-M3

#include “lpc17xx.h”

#include “lpc17xx_gpio.c”

int main(void){

uint32_t A;

A=GPIO_ReadValue(0);

}

خب فک کنم یاد گرفتین چطوری در میکروکنترلر LPC1768 پایه ها را ورودی/خروجی تعیین کنید و مقدار آن را صفر/یک کنید ویا بخوانید.

تمامی جلسات این آموزش را اینجا دنبال کنید.

سوالی داشتین در قسمت نظرات و یا اینجا بپرسید.

هزینه این آموزش معرفی وبسایت Melec.ir به دوستانتان میباشد 🙂

درباره ی جهاندیده

کاربر عزیز از اینکه مطالب سایت ما را مطالعه میکنید بینهایت سپاسگذارم.با نظرات سازنده خود به ما انگیزه بیشتری دهید تا مطالب آموزشی بیشتری را تولید و منتشر کنیم. استیوجابز میگه "شغل شما بخش عمده ای از زندگیتان را تشکیل خواهد داد، پس تنها راهی که از این بخش احساس رضایت خواهید کرد این است که باور داشته باشید در حال انجام کار بزرگی هستید. بهترین راه برای انجام یک کار بزرگ نیز لذت بردن از آن کار است. اگر نمی دانید چه باید انجام دهید عجله نکنید و سعی نمایید اول راه خود را بیابید. با پیدا کردن راه درست مانند یک رابطه ی خوب با گذشت سال ها هر روز همه چیز بهتر و بهتر می شود و همواره رو به جلو پیش خواهید رفت. بنابراین به دنبال آن چیزی بگردید که قلباً شما را راضی می کند. عجله نکنید." امیدوارم همیشه موفق باشید.

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

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

یک دیدگاه

  1. ممنون از زحماتتون