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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

  1. Avatar

    مهمان

    مهدی

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

  2. Avatar

    مهمان

    محمد

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

  3. Avatar

    مهمان

    مجید

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

    • Avatar

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

      مهدی زمانی

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

  4. Avatar

    مهمان

    احسان

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

    • Avatar

      مهمان

      مهدی زمانی

      چشم حتما

    • Avatar

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

      مهدی زمانی

      چشم حتما

  5. Avatar

    مهمان

    دانیال

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

    • Avatar

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

      مهدی زمانی

      مچکرم قربان