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

آموزش stm32

در آموزش های قبلی ( آموزش1 و آموزش2 و آموزش3)  یک پروژه را برای نرم افزاز مورد نظرمان تولید کردیم.

دراین آموزش با بخش های اولیه میکرو که در نرم افزار STM32CubeMx در قسمتPinout است کار کنیم و یک پروژه چشمک زن بسازیم.

برای شروع کار ما با سه قسمت SYS و GPIO و RCC آشنا و آماده برای ساخت یک پروژه چشمک زن می شویم.

RCC:

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

گزینه ی اول ( High Speed Clock ( HSE: برای تنظیم کریستال فرکانس بالا می باشد که دارای سه گزینه است:

Disable: در این حالت میکرو روی کریستال داخلی تنظیم می شود.

BYPASS Clock Source: در این حالت شما فرکاسی را باید به پایه ی OSC_IN به صورت خارجی اعمال کنید و پایه ی OSC_OUTOSC هم رها کنید.

Crystal/Ceramice Resonator: در این حالت میکرو از یک کریستال خارجی یه عنوان منبع کلاک استفاده می کند.

گزینه ی (Low Speed Clock (LSE: برای تنظیم کریستال فرکانس پایین می باشد. که همانند بالا می توان آن را تنظیم کرد.

قسمت Master Clock Output: با فعال کردن این گزینه یکی از پین های میکرو که درSTM32F103RET6 پین A8 می باشد می تواند یکی از کلاک های سیستم را روی این پین انداخت که منبع این کلاک قابل تنظیم است.

SYS:

این قسمت مربوط به تنظیمات پروگرامر و دیباگ و تنظیمات زمانی و پین بیداری (Wake_Up) میکرو است که این دو مورد آخر را بعدا توضیح می دهیم.

خوب گزینه ی Debug: شما در این قسمت نوع دیباگر و پروگرامر را مشخص می نمایید.

گزینه No Debug: با فعال کردن این گزینه پین های مخصوص دیباگ غیر فعال می شود و فقط می توان از آنها به عنوان Gpio استفاده کنیم.

گزینه Serial Wire: با فعال کردن این گزینه پین های مخصوص پرو گرامر و دیباگ فعال و دیگر نمی توان به عنوان GPIO استفاده کرد.وقتی این گزینه را فعال می کنید پین های پرو گرامر در برنامه یSTM32CubeMx سبز می شوند.همانند عکس زیر پین های A13 و A14 سبز شده اند.

همچنین این گزینه را فعال کنید می توانید توسط پروگرامر St-link میکرو ی خود را پرو گرام کنید.

گزینه های Jtag مربوط به پرو گرامر Jtag که پین هایش مثل شرایط بالا می باشد. میکرو در این حالت فقط با پروگرامر Jtag پروگرام می شود.

در آموزش های بعدی نحوه ی پروگرام کردن و همچنین ساختن پروگرامر Stlink را آموزش می دهیم.

بخش GPIO:

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

 

GPIO_Output: پین را خروجی می کند.

GPIO_Input: پین را ورودی می کند.

که در اینجا ما Pin C0 را خروجی کرده ایم.

– حال در قسمت Configuration نرم افزار ، قسمت GPIO در قسمت System اضافه شده است.روی آن کلیک کنید تا صفحه ی زیر باز شود و سپس پین مورد نظرتان را به صورت زیر انتخاب کنید.

در پایین پنجره باز شده می توانید ویژگی های پین مورد نظرتان را وارد کنید.

گزینه ی Gpio Output level: در این گزینه حالت اولیه پین را مشخص می کند که High یا Low می باشد.(صفر یا یک)

گزینه ی Gpio Mode: حالت پین را مشخص می کند که یا به صورت پوش پول یا به صورت درین باز باشد.

گزینه ی Maximum Out Speed: سرعت پین را مشخص می کند.

گزینه ی User Label: در این گزینه شما می توانید نام دلخواهی را به پین مورد نظرتون قرار دهید.مثلاLED

و روی OK کلیک کنید.

ودر نهایت طبق اموزش قسمت 3 پروژه برای kail تولید میکنیم…

زمانی که کامپایلر باز شد فایل main.c را باز نمایید و تابع main را پیدا کرده و آخر تابع حلقه ی while قرار دارد که ما دستورات  را در این حلقه می نویسیم.

برای دسترسی به GPIO ها  کتابخانه HAL دستوراتی برای ما آماده کرده که توسط این دستورات ما می توانیم به تک تک پین های میکرو دسترسی داشته باشیم و آنها را تغییر وضعیت یا وضعیت  آنها را بخوانیم.

دستور:

void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

این دستور برای تغییر وضعیت هر پین می باشد که می توانیم پین مورد نظرمان را با این دستور صفر یا یک کنیم.این تابع دارای چند ورودی است که به ترتیب آنها را توضیح می دهیم.

GPIO_TypeDef* GPIOx: این ورودی پورت پین مورد نظر را مشخص می کند به عنوان مثال : GPIOC

uint16_t GPIO_Pin: این ورودی پین مورد نظر را مشخص می کند به عنوان مثال: GPIO_PIN_0

GPIO_PinState PinState: این ورودی حالت پین را مشخص می کند. به عنوان مثال:

GPIO_PIN_RESET: یعنی وضعیت صفر

GPIO_PIN_SET: یعنی وضعیت یک

نکته:می توانید در ورودی آخر از همان صفر یک عددی هم استفاده نمایید.

خوب حال اگر بخواهیم پین C0 را به وضعیت یک تغییر حالت دهیم دستور بالا را این گونه استفاده می کنیم.

HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, GPIO_PIN_SET);

یا

;(HAL_GPIO_WritePin(GPIOC, GPIO_PIN_0, 1

دستور:

GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

     این دستور برای خواندن وضعیت پین می باشد.ورودی های این دستور همانند ورودی های دستور قبل است با این تفاوت که وضعیت پین به جای ورودی ،خروجی دستور است و وضعیت پین را برای ما مشخص می کند.

به عنوان مثال:

if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_1)==1)HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0, GPIO_PIN_SET);

نکته:پین C1 را قبلا باید ورودی کرده باشیم تا این if بر قرار شود.

دستور:

void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

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

به عنوان مثال:

HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_0);

نکته:کتابخانه HAL دستوری به نام ()Hal_Delay برای ما قرار داده که ما می توانیم توسط این دستور تاخیر تولید کنیم.

خوب حال می خواهیم یک برنامه چشمک زن بنویسیم.

دستور اول پین C0 را یک و بعد از یک ثانیه تاخیر آن را صفر و دوباره بعد از یک ثانیه تاخیر آن را یک می کند.

فایل پروژه چشمک زن

موفق و سربلند باشید

 

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

avatar
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
faridmicrodroidprjsiteمبینا Recent comment authors
مبینا
Guest
مبینا

عالی بود