نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
آزادی حجاز از دست نااهلان
Avatar

آموزش stm32f103 جلسه 4 GPIO و پروژه بلینکر

خب بریم سر قولی که داده بودیم قرار شد که توی جلسه 4 بتونیم یک پین رو کانفیگ کنیم؛ توی جلسه قبلی ( آموزش stm32f103 جلسه 3 کانفیگ کردن کلاک ) از سری مطالب آموزش stm32f103 که کلاک رو توضیح دادیم و پیش نیاز این جلسه هستش ( توضیح اضافه )
آموزش stm32f103 جلسه 4 GPIO و پروژه بلینکر

آموزش stm32f103 جلسه 4 GPIO و پروژه بلینکر


خب برای کانفیگ GPIO ها (پورت های دیجیتال یا  I/O ها) میریم سراغ فایل های GPIO.h از کتابخونه ای spl؛ فایل GPIO.h رو باز میکنیم :
آموزش آرم
 
این لیست توابعی هستش که برای GPIO ها و کانفیگ هاشون نوشته شده (شروع از خط 349)

اکثر این توابع یه استراکچر از نوع GPIO_InitTypeDef دارن و یک متغیر 32 بیت پین
میریم سراغ تشریح این استراکچر این استراکچر دوتا عضو داره به این نام ها

خب حالا هر کدوم از این توابع هم یک سری دیفاین دارن که میشه توی ورودیشون گذاشت؛ میریم سراغ  gpio_speed

در واقع GPIO_Speed یه یونیون هست که سه تا عضو بالارو داره؛ این 3 تا فرکانس هر پین رو تعریف میکنه و برای پیکر بندی هر پین باید یک سرعتی برای سرعت پین در نظر گرفته بشه.
خب میریم سراغ  GPIO_Mode این تابع میاد حالت پین رو تنظیم میکنه و 8 تا عضو داره؛ یعنی اینکه شما میتونید یک پین رو در 8 وضعیت مختلف پیکر بندی کنید (یادتونه avr این سه تا وضعیت بود ؟ laugh )؛ حالا 8 تا عضوش هم اینا هستن :

 
 

توضیح توابع GPIO میکرو کنترلر stm32

GPIO_DeInit : غیر فعال کردن پین هست که به حالت پیش فرض برمیگردونه
GPIO_AFIODeInit : غیر فعال کردن RCC یا منبع کلاک پورت هست
GPIO_Init : اینیشیال GPIO هست
GPIO_StructInit : استراکچر کانفیق شده رو اینیشیال میکنه.
GPIO_ReadInputDataBit : خواندن مقدار یک بیت
GPIO_ReadInputData : خوندن مقدار یک پورت
GPIO_ReadOutputDataBit : مقدار خروجی یک بیت رو دریافت میکنه
GPIO_ReadOutputData : مقدار پورت خروجی رو دریافت میکنه
GPIO_SetBits : مقدار یک بیت رو ست یا یک میکنه
GPIO_ResetBits : مقدار یک بیت رو صفر میکنه
GPIO_WriteBit : مقدار یک بیت رو مینوسه
GPIO_Write : مقدار یک پورت رو مینویسه
GPIO_PinRemapConfig : برای ریمپ یا تغییر وضعیت پین استفاده میشه؛ یکی از کاربردی ترین توابع اینه(بعدا راجبش بحث میشه)
 
حالا برای اینکه بتونیم یه پین رو 0 و 1 کنیم یا کنترل کنیم باید بتونیم منبع کلاک اون پورت رو که اون پین توش هست رو فعال کنیم، توی کیوب میشه اینجا ها :
آموزش stm32f103
این منبع کلاک ها رو کلا RCC میگن؛ پس میریم سراغ فایل های stm32f10x_rcc.c و stm32f10x_rcc.h؛ که هرکدوم از بخش ها برای خودشون قابلیت تنظیم کلاک و پرسکیل دارن که هر کانال کلاک فقط به یه تعداد تایمر و پورت بخش وصله
توجه : این جدا کردن کلاک باعث میشه شما کنترل دقیق تر و سریعتری روی بخش های مختلف داشته باشید.
به عکس توجه کنید :
آموزش stm32f103
کانال های APB1 و APB2 رو میبینید؛ یعنی اگر قراره از واحد پورت A استفاده کنیم باید قبلش ABP2 رو کانفیق کنیم؛ پس باید قبلش پرسکیل و کانفیق مناسبی برا این مسیر کلاک کانفیق کنیم
حالا بریم سراغ تابع RCC_APB2PeriphClockCmd تا ببین چطوری میتونیم واحد پورت B رو فعال و کلاکشرو کانفیق کنیم
یه تعداد از دیفاین هایی که توی فایل هدر RCC هست انواع واحد های سخت افزاری میکرو هستش؛ اینجا میبینید :
آموزش stm32f103 جلسه 4 GPIO و پروژه بلینکر
حالا برای فعال کردن و وصل کردن کلاک به واحد پورت B باید مقدار ورودی تابع RCC_APB2PeriphClockCmd رو RCC_APB2Periph_GPIOB قرار بدیم و ورودی دوم که وضعیت کار هست رو ENABLE قرار بدیم؛ اینطوری :

این خط میاد کلاک روی خط کلاک دوم رو به پورت B وصل میکنه؛ به همین سادگی victory
حالا وقتشه یک تابع بنویسیم برای سادگی کار تا مقادیر کانفیگ پورت رو ازمون بگیره و روی استراکچر بریزه و پورت رو پیکر بندی کنه این تابع ورودی همه مشخصاتی هست که برای نوشتن توی پورت لازمه این تابع رو استادمون اقای هادی اسدی نوشتن و ما از همین استفاده میکنیم

 

پروژه آرم LED چشمک زن با میکرو کنترلر STM32

حالا میریم سراغ نوشتن کد بلینکر؛ برای بلینکر نوشتن به چنتا تابع برای اینجاد تاخیر نیاز داریم که اینجوری مینویسیم :
این توابع باید یک ورودی عدد بگیره و همونقد کلاک خالی از cpu رد کنه و تاخیر ایجاد کنه؛ این برای میکرو ثانیه :

این هم برای میلی ثانیه :

حالا میایم پین LED رو دیفاین میکنیم اول برنامه تا کارمون راحت تر بشه اینجوری در نظر داشته باشید روی برد من به PC.13 متصل هستش خب من اینجوری دیفاینش میکنم اول برنامه :

فکر میکنم این دیفاینه خیلی ساده باشه و نیازی به توضیح نداشته باشه؛ حالا یک تابع مینویسم و کل پیکر بندی پورت ها رو توی اون میریزیم این تابع نه ورودی داره خروجی پس مینویسیم :

حالا توی این تابع میایم پروت ال ای دی رو پیکر بندی میکنیم با استفاده از دیفیان های GPIO و تابعی که قبلش نوشتیم اینجوری :

خط اول محتویات این تابع میاد کلاک رو به پورت A که ال ای دی روی اونه وصل میکنه و خط دوم هم میاد پورت رو خروجی میکنه از نوع GPIO_Mode_Out_PP و سرعت پین رو روی 50 مگاهرتز تنظیم میکنه؛ حالا میریم این تابع رو توی مین فراخانی میکنیم تا پورت ها پیکر بندی بشه اینجوری :

حالا به حلقه اصلی برنامه میری و با استفاده از توابع کنترلی GPIO برنامه رو مینویسیم؛ یعنی با این خط پین مربوط به ال ای دی رو یک میکنیم و روشنش میکنیم :

حالا باید یک تاخیری ایجاد کنیم با استفاده از تابعی که نوشتیم اینجوری بهش مقدار میدم من :

حالا باید پین مورد نظر رو 0 کنیم یا ال ای دی رو خاموش کنیم :

حالا باید دوباره صبر کنیم :

و تمام به همین سادگی victory
 
میریم برای تست؛ برنامه رو کامپایل کردم و روی برد خودم تست کردم و مشکلی هم نبود؛ اگر دوستان هم مشکلی داشتند میتونن توی کامنت ها مطرح کنند بهشون جواب میدم؛ حالا ما یک بلینکر با ارم ساختیم.
فیلم عملکرد پروژه : 
لینک با کیفیت فیلم زیر(فیلم زیر نسخه کم حجم شده هستش) : دانلود فیلم پروژه LED چشمک زن با STM32
http://www.aparat.com/v/VJRGF

 

 

موضوع جلسه بعد :
جلسه بعد میخوایم تایمر رو راه اندازی کنیم ان شاء الله مبحث بعدی اینه چجوری کتابخونه بنویسیم و توی این مبحث یک کتابخونه کامل رو برای ال سی دی گرافیکی نوکیا 5110 مینویسیم.
هزینه آموزش هم 5  صلوات هست
اولی برای ظهور مولامون حضرت مهدی
دومی برای سلامتی رهبر انقلابمون ایت الله خامنه ای
سومی برای استاد خوبمون هادی اسدی
چهارمی هم برای سازنده سایت اقا مهدی دمرچیلو
و پنجمی هم برای من اگه لایق دونستید
 
خب بریم سراغ یک بحث اضافی یک پیشنهادی به همه دوستان
احتمالا همتون با این شرکتای بازاریابی شبکه ای به قول خودشون (نتورک مارکتینگ) اشنا هستید تعدادشونم کم نیستش؛ کار به کار های بیخودی که شرکتا انجام میدن و یکسری ادم رو گول میزنن ندارم (چون ما اینجا قرار نیست کسی رو گول بزنیم)
شیوه کار هم اینجوریه که هرکسی در حد توانش به صورت رایگان این مطالب رو پخش کنه (و به دیگران یاد بده) تا سطح  یادگیری این مطالب توی جامعمون بیشتر بشه و بتونیم پیشرفت کنیم و از تجربیات هم استفاده کنیم؛ من به دوتا از دوستام یاد میدم و اینا هم هرکدوم به دوتا از دوستاشون یاد میدن و اینجوری یه حرم داریم با قاعده نا محدود که کلی ادم رو شامل میشه؛ اینجوری توی مدت زمان کمی کلی ادم این اطلاعات رو دریافت میکنن و تجربه کسب میکنن.
به قول استادمون اقای اسدی “تجربه؛ معلم خشنیه، اول امتحان میگریه بعد درس میده”
 
منتظر نظرات دوستان راجب پیشنهادم هستم blush؛ با ارزوی موفقیت برای تک تکتونheart؛ تا جلسه بعدی یا علی

گروه پرسش و پاسخ الکترونیکی در سروش
تعداد مطالب : 20 تا
Avatar به شما توصیه میکنم سربازی نرید / با این قیمت دلار نمیشه الکترونیک کار کرد / برای مهاجرت به USA با لاتاری سال 2020 برنامه هایی دارم افرادی که در این ضمینه با من موافق هستن (تحقیقات کامل خودتون رو از اینترنت انجام بدید و سوالت رو از من نپرسید) برای ایجاد کمپین و مهاجرت دسته جمعی مشخصات ارتباطی خودتون برای من ایمیل کنید zamanimahdi@icloud.com در سابجکت ایمیل حتما بنویسید "لاتاری" به امید موفقیت :)
ارسال دیدگاه
21

1) نظرات غیر فارسی به صورت خودکار حذف میشوند ( حداقل 5 حرف فارسی وارد کنید ).

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید ( طبیعتا لینک کدتون رو باید برای من بفرستید! ) : debian

4) پسورد فایل های سایت : www.dmf313.ir

  1. Avatar

    مهمان

    سید میلاد

    سلام خسته نباشید و تشکر بابت سایت خوبتون
    “یعنی اگر قراره از واحد پورت A استفاده کنیم باید قبلش ABP2 رو کانفیق کنیم”
    این خط بالایی که نوشتین از کجا اومده؟پورت A چه ربطی داشت به APB2?
    “حالا بریم سراغ تابع RCC_APB2PeriphClockCmd تا ببین چطوری میتونیم واحد پورت B رو فعال و کلاکشرو کانفیق کنیم”
    بعد یهو واحد پورت B از کجا اومد؟

  2. Avatar

    مهمان

    REZA

    دقیقا کجا باید کد رو نوشت؟
    سربرگ MAIN.C یا سربرگ STM32F1XX_HALL_GPIO.C یا جای دیگه؟
    ببخشید سوالم ضایس یکم sarcastic

  3. Avatar

    مهمان

    علیرضا اهنی

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

  4. Avatar

    مهمان

    میلاد

    ممنون به خاطر آموزشا خوبتون جدیدا پروتئوس شبیه سازی stm32 هم اضافه کرده ازش استفاده کنید خیلی سطح آموزش بالاتر میره

    • Avatar

      نویسنده این مطلب

      مهدی زمانی

      سلام
      بنده ملا با شبیه سازی بجز در بعضی موارد جزیی مخالف هستم و فکر میکنم وقت تلف کردن باشه چون مداراتی که ما میسازیم باید با شرایط محیط کار کنن نه شرایط ایده ال شبیه سازی …
      برای سری های بعد اموزش میام یک برد رو میسازیم که بر اساس همون جلو بریم انشالله اقا مهدی فروشگاه سایت رو راه میندازن و میشه برد رو تو خود سایت گذاشت تا دوستانی که دسترسی به شرکت ها برای چاپ برد ندارن از این طریق برای تهیه اقدام کنن smile

      • Avatar

        مهمان

        میلاد

        واقعا تشکر میکنم از زحماتتون ,اگه برد رو بزارین که عالی میشه victory
        ولی شبیه سازی جزو جدانشدنی هر آموزشی هستش از اون هم استفاده کنید خیلی کامل میشه bb

  5. Avatar

    مهمان

    بهزاد

    یاد AVR بخیر میخواستی یه LED روشن کنی حد اکثر ۵-۶ خط برنامه بود . با این ARM آدم حس میکنه داره سیستم عامل مینویسه برای یه LED ساده !!
    دستت درد نکنه برای آموزش

    • Avatar

      نویسنده این مطلب

      مهدی زمانی

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

  6. Avatar

    مهمان

    mch

    عالیه

  7. Avatar

    مهمان

    محمد

    سلام خیلی عالیه ادامه بدید تیم ما حداقل ده نفر استفاده کردند

    • Avatar

      نویسنده این مطلب

      مهدی زمانی

      باعث افتخار بنده هست

  8. Avatar

    مهمان

    دانیال

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

    • مهدی دمرچیلو

      مدیر سایت

      مهدی دمرچیلو

      من تست کردم- تا 25 میگ میشه تولید کرد
      مطلبش مربوطه به بحث تایمر – فردا یا پسفردا مطلبش رو میزارم – مطلبش کامله تقریبا، باید مرتبش کنم.

  9. Avatar

    مهمان

    حسین

    سلام به شما استاد عزیز و خسته نباشید من در باره avr و میکرو کار کردم ولی میشه شما یه خوده بیشتر در مورد محیط برنامه نویسی و مراحل اون توضیح بدین من تازه ارم رو شروع کردم وبعضی از مراحل و محیط برنامه متوجه نمیشم با تشکر از شما

    • Avatar

      مهمان

      مهدی زمانی

      دوست عزیز هرجاشو متوجه نمیشید اعلام کنید من اصلاح میکنم smile

  10. Avatar

    مهمان

    جواد

    سلام ، لطفا هدر برد آموزشی سری stm32f10X قرار بدید

    • Avatar

      مهمان

      مهدی زمانی

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

  11. Avatar

    مهمان

    محمد

    آقا من هر چی مینویسم پاک میشه
    علتش چیه

    • مهدی دمرچیلو

      مدیر سایت

      مهدی دمرچیلو

      چی رو مینویسی پاک میشه؟

  12. Avatar

    مهمان

    محمد

    هر کاری میکنم بفهمم نمتونم چیکار کنم

    • Avatar

      نویسنده این مطلب

      مهدی زمانی

      کجاشون متوجه نمیشید ؟