قسمت هفتم – تنظیمات پایه ها

حبیب نصراصفهانی دیدگاه ها 0 سپتامبر 15, 2019

ا درود فراوان.اولین مبحث برنامه نویسی جهت STM8S003 را با معرفی پورتها و پینها شروع میکنیم.

نکته1 :یک کردن(یا PULL UP) هر پین به این معنی است که ولتاژ آن پین ولتاژ VCC(که می تواند 5 ولت یا 3.3 ولت باشد) باشد.و صفر کردن(PULL DOAWN) هر پین به معنی صفر ولت کردن این پین می باشد.

نکته2: برای بعضی از فراگیران که برای اولین بار با مباحث میکرو آشنا می شوند مطالبه بعضا گویا نمی باشدلازم است مطالب را مروری بخوانند و در طول ادامه قسمت های آموزشی مطالب به مرور هضم می شود.

برای استفاده از پین های میکرو در ابتدا باید نوع کاربرد آن را مشخص نمود.چنانچه بعنوان مثال می خواهید یک LED متصل به پین را روشن کنید این پین باید خروجی تعریف گردد.چنانچه بخواهید یک کلید را به پین وصل نمایید باید ورودی تعریف گردد.در کل چنانچه میکرو می خواهد به قطعه متصل و به آن فرمان دهد باید پین بصورت خروجی و چنانچه می خواهد از بیرون فرمان بگیرد باید ورودی تعیین گردد.بعنوان مثال شما با زدن یک کلید می خواهید LED راروشن نمایید.بنابر پین متصل به کلید فرمان روشن شدن را دریافت می نماید و به پین متصل به LED فرمان روشن شدن را میدهد.

به برنامه نویسی و توضیح کد های IAR در ارتباط با پورت و پینهای STM8S003 می پردازیم و پس از هر برنامه به یک مثال می پردازیم.

GPIO_DeInit(GPIO_TypeDef* GPIOx);
GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode);
GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal);
GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins);
GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin);
GPIO_ExternalPullUpConfig(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, FunctionalState NewState);

توضیح کد های بالا:

با دستور خط اول تمامی تنظیمات مربوط به یک پورت ریست می شود.

مثال: برنامه زیر تنظیمات مربوط به پورت D را ریست می نماید.

GPIO_DeInit(GPIOD);

با دستور خط دوم یک پین از یک پورت را ورودی و خروجی و … می کنیمGPIO_TypeDef* GPIOx را با پورت مورد نظر و GPIO_Pin_TypeDef GPIO_Pin را با شماره پین مورد نظر و GPIO_Mode_TypeDef GPIO_Mode را ورودی یا خروجی و …همانند توضیحات زیر تعریف مینماییم.

GPIO_MODE_IN_FL_NO_IT —> Input floating, no external interrupt 
GPIO_MODE_IN_PU_NO_IT —> Input pull-up, no external interrupt 
GPIO_MODE_IN_FL_IT —> Input floating, external interrupt 
GPIO_MODE_IN_PU_IT —-> Input pull-up, external interrupt 
GPIO_MODE_OUT_OD_LOW_FAST —> Output open-drain, low level, 10MHz 
GPIO_MODE_OUT_PP_LOW_FAST —> Output push-pull, low level, 10MHz 
GPIO_MODE_OUT_OD_LOW_SLOW —> Output open-drain, low level, 2MHz
GPIO_MODE_OUT_PP_LOW_SLOW —> Output push-pull, low level, 2MHz 
GPIO_MODE_OUT_OD_HIZ_FAST —> Output open-drain, high-impedance level,10MHz 
GPIO_MODE_OUT_PP_HIGH_FAST —> Output push-pull, high level, 10MHz 
GPIO_MODE_OUT_OD_HIZ_SLOW —> Output open-drain, high-impedance level, 2MHz
GPIO_MODE_OUT_PP_HIGH_SLOW —> Output push-pull, high level, 2MHz

مثال:برنامه زیر پین 1 مربوط به پورت D را ورودی تعریف می نماید.

GPIO_Init(GPIOD, GPIO_PIN_1, GPIO_MODE_IN_PU_NO_IT);

با دستور خط چهارم یک پین از یک پورت را یک می کنیم.GPIO_TypeDef* GPIOx را با پورت مورد نظر و GPIO_Pin_TypeDef GPIO_Pin راپورت مورد نظر تعریف مینماییم.

مثال:برنامه زیر پین 1 مربوط به پورت D را یک نماید.

GPIO_WriteHigh(GPIOD, GPIO_PIN_1);

با دستور خط پنجم یک پین از یک پورت را صفر می کنیم.GPIO_TypeDef* GPIOx را با پورت مورد نظر و GPIO_Pin_TypeDef GPIO_Pin راپورت مورد نظر تعریف مینماییم.

مثال:برنامه زیر پین 1 مربوط به پورت D را صفر نماید.

GPIO_WriteLow(GPIOD, GPIO_PIN_1);

با دستور خط ششم یک پین از یک پورت را Tigle(اگر حالت قبلی پین صفر بود به یک تبدبل می شود و اگر حالت قبلی پین یک بود به صفر تبدیل می شود) می کنیم.GPIO_TypeDef* GPIOx را با پورت مورد نظر و GPIO_Pin_TypeDef GPIO_Pin راپورت مورد نظر تعریف مینماییم.

مثال:برنامه زیر پین 1 مربوط به پورت D را Tigle نماید.

GPIO_Reverse(GPIOD, GPIO_PIN_1);

با دستور خط نهم مقدار یک پین از یک پورت را می خوانیم.بدین معنا که این دستور هر مقدار صفر یا یک را بعنوان مثال بر روی PD0(بخوانید پین صفرم از پورت D) را مشخص می نماید.در حالت کلی اعلام می کند که این پین صفر است یا یک.این کد زمانی کارایی دارد که بخواهیم وضعیت صفر یا یک بودن یک پین را بدانیم.

مثال:برنامه زیر مقدار پین 1 از پورت D را میخاند.

GPIO_ReadInputPin(GPIOD, GPIO_PIN_1);

0 دیدگاه ها

پاسخی بگذارید