نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
قدس خرمشهر دیگر می شود
Avatar

آموزش آرم stm32f103 جلسه ۶ دیلای های دقیق

346

سلام دوباره؛ جلسه قبلی ( آموزش آرم stm32f103 جلسه ۵ کانفیگ اولیه تایمر ) رو یادتونه؟ خب داخلش ی قولی دادیم که بریم سراغ اینکه با تایمر یکسری دیلای بسازیم تا دقیق دربیاد؛ حالا میخوایم ی تایمر رو جوری پیکر بندی کنیم که چنتا زمان دقیق رو بهمون بده و روی دستورات تاخیر استفاده کنیم.
آموزش آرم stm32f103 جلسه 6 دیلای های دقیق

آموزش آرم stm32f103 جلسه ۶ دیلای های دقیق


برای این کار من دوتا تابع مینویسم یکی برای تاخیر میلی ثانیه و دیگری برای تاخیر میکرو ثانیه؛ برای راحتی کار اول تاخیر میکرو ثانیه رو میسازیم (واحد کوچیک تر) و بعدش تاخیر میلی ثانیه رو بر اساس میکرو ثانیه میسازیم (مثلا توی میلی ثانیه مینویسم اینقد میکرو ثانیه صبر کن )؛ خب، این توابع رو اینجوری اسم میزارم و یک ورودی براش تعریف میکنم

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

میریم توی وقفه تایمر تا دستورات مربوطه رو اونجا بنویسیم؛ اونجا باید اگر متغیر DELAY_US مقدار داشت ازش کم کنیم (یعنی هر باری که تایمر سر ریز میشه یکی از این متغیر کم کنه تا به ۰ برسه؛ پس یک شرط  میزاریم برای اینکار و دستور کم شدن مقدار رو توی اون شرط مینویسیم (تا اگر متغیر ۰ بود  دیگه ازش کم نکنه )؛ اینجوری مینویسیم :

حالا کل تابع تایمر ما میشه این :

میریم سراغ اصل تابع دیلای اونجا باید ی دستوری بنویسیم تا مقدار متغیر زمان یعنی DELAY_US مساوی با ۰ نشده برنامه رو توی همون خط نگه داره اینجوری مینویسیم :

خط اول میاد ورودی تابع رو میریزه توی متغیر زمان تا تایمر بتونه ازش کم کنه
خط دوم هم میاد منتظر میمونه تا مقدار متغیر که یکی یکی توسط تایمر کم میشه صفر بشه ……
خب تا اینجا میکرو ثانیه رو ساختیم برای میلی ثانیه هم اینجوری عمل میکنیم که برای هر میلی ثانیه ۱۰۰ میکرو ثانیه توقف میکنیم یعنی از میلی ثانیه رو هم بر اساس تابع میکرو ثانیه میسازیم که کل این تابع میشه ابن :

خب تمومه دیگه الان دوتا تابع داریم که دیلای هایی دقیق رو برامون بر اساس تایمر میسازن smile
از تاخیر بین جلسات عذر خواهی میکنم سرم شلوغ شده درگیر چنتا پروژه هستم
انشالله سری بعد اموزش ها تایمر هست و بعدش کتابخونه برای nokia 5110 lcd مینویسم.
در ضمن stm یک انجمن قوی و خوب هم داره میتونید برای سوالتتون ازش کمک بگیرید : انجمن stm
موفق باشید  heart

انجمن های تخصصی برق و الکترونیک ECA
تعداد مطالب : 20 تا
Avatar
بقیه جلسات : آموزش آرم stm32f103
ارسال دیدگاه

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

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

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

  1. Avatar

    مهمان

    مهدی

    سلام استفاده از وقفه برای تولید تاخیر اگر توی یک تابع وقفه باشیم مشکل بوجود نمیاره؟ توی تابع وقفه ها به طور خودکار وقفه غیر فعال میشه و ورود به دستور تاخیری که با وقفه غیر فعال شده کار میکنه باعث یه حلقه بی نهایت میشه
    راه حلی بجوز استفاده از تکنیک وقفه های تو در تو وجود داره برای stem ها؟

  2. Avatar

    مهمان

    محمد

    سلام
    آقا ما موفق نشدیم
    میشه بیشتر راهنمایی کنید؟تاخیر ایجاد میشه ولی دقیق نیست اصلا
    خیلی فرق میکنه با مقدار تنظیم شده

    • Avatar

      مهمان

      حمید

      سلام به دوستان. در تایپیک من یه مشکل کوچیک دیدم اونم اینکه هر 1000 میکرو ثانیه میشه 1 میلی ثانیه نه هر 100 میکرو
      پس احتمالا اگه بجای 100 عدد 1000 بزارین در صورت صحیح بودن برنامه تون تاخیر خیلی دقیقی بدست میارین

  3. Avatar

    مهمان

    مجید

    اگه میشه آموزشا رو کامل کنید

    • Avatar

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

      مهدی زمانی

      سلام بلهیکم وقتم ازاد بشه

  4. Avatar

    مهمان

    احسان

    خیلی عالی هستین خدا خیرتون بده جهاد علم و ذکاته خوبی برای خودتون میدین..
    ادامه بدین لطفا…

    • Avatar

      مهمان

      مهدی زمانی

      چشم حتما

    • Avatar

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

      مهدی زمانی

      چشم حتما

  5. Avatar

    مهمان

    دانیال

    واقعا افرین باید بهت گفت
    خسته نباشید و ارزوی موفقیت دارم براتون

    • Avatar

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

      مهدی زمانی

      مچکرم قربان