آموزش STM32 با توابع LL قسمت بیست و ششم: استفاده از RTC برای اندازی‌گیری زمان

آموزش STM32 با توابع LL قسمت بیست و ششم: استفاده از RTC برای اندازی‌گیری زمان

آموزش STM32 با توابع LL قسمت بیست و ششم: استفاده از RTC برای اندازی‌گیری زمان
آموزش STM32 با توابع LL قسمت بیست و ششم: استفاده از RTC برای اندازی‌گیری زمان

در آموزش‌های قبلی، در چند بخش از تایمرها استفاده کردیم. Real Time Clock یا همان RTC عنصری است که از آن برای اندازه‌گیری دقیق زمان واقعی استفاده می‌شود. ممکن است این سؤال پیش بیاید که این عمل بدون استفاده از RTC نیز امکان‌پذیر است. چه نیازی به استفاده از این واحد داریم؟ که در جواب باید گفت استفاده از RTC مزایایی دارد که ازجمله آن‌ها می‌توان به موارد زیر اشاره کرد:

  • مصرف توان پایین (در کاربردهایی که از باتری یا منابع محدود برای توان استفاده می‌شود اهمیت دارد).
  • باعث خالی بودن سیستم جهت انجام عملیات مهم با وابستگی زمانی دقیق می‌شود.
  • بعضی‌اوقات از روش‌های دیگر دقیق‌تر است.

در این بخش می‌خواهیم واحد RTC داخلی میکرو را راه‌اندازی کنیم و علاوه بر اندازه‌گیری تاریخ و ساعت، یک هشدار یا Alarm تنظیم کنیم. با سیسوگ همراه باشید.

 

ایجاد پروژه

مثل قبل بخش‌های دیباگ و USART را تنظیم می‌کنیم. در این پروژه برای بخش کلاک هر دو بخش HSE و LSE را فعال می‌کنیم. زیرا می‌خواهیم برای کلاک RTC از کریستال فرکانس پایین استفاده کنیم. توجه کنید که اگر روی بورد BluePill شما این کریستال تعبیه نشده است از هدر بورد چیپ STM32F103RET6 استفاده کنید.

   مرحله بعدی تنظیم کلاک میکرو و انتخاب منبع کلاک برای واحد RTC است، طبق شکل زیر LSE را به‌عنوان منبع کلاک انتخاب می‌کنیم.

 

حالا باید به سراغ واحد RTC برویم. مانند شکل‌های زیر تنظیم این بخش را انجام می‌دهیم و وقفه را برای آن فعال می‌کنیم.

 

بقیه‌ی مراحل را مانند قبل انجام می‌دهیم و وارد بخش برنامه‌نویسی می‌شویم.

نوشتن کد برنامه

مثل پروژه قبل، در ابتدا کتابخانه stdio را به برنامه اضافه کرده و توابع ریدایرکت به USART را می‌نویسیم و تنظیمات مربوط به آن را انجام می‌دهیم. سپس ساختارها و متغیر‌های مورد نیاز برای تاریخ و ساعت را تعریف می‌کنیم؛

اکنون باید توابع موردنیازمان برای تنظیم و همچنین به‌روزرسانی تاریخ و ساعت، و نیز تنظیم هشدار را تعریف کنیم. این توابع را به‌صورت زیر می‌نویسیم:

 

حالا باید درون int main و قبل از حلقه while(1) تنظیم واحد RTC را انجام دهیم؛

تنها کاری که برای آماده‌سازی واحد RTC باقی‌مانده است، تنظیم Prescaler برای شمارش ثانیه است. همان‌طور که گفتیم برای این واحد از LSE به‌عنوان منبع کلاک استفاده کرده‌ایم. بنابراین فرکانس کلاک RTC برابر با 32.768KHz است. برای اینکه شمارش ثانیه به‌درستی انجام شود، باید مقدار Prescaler را برابر با معادل هگز 32768 یعنی 00008000 قرار دهیم؛

اکنون می‌توانیم زمان را اندازه‌گیری کنیم. کافی است در حلقه while(1) از توابع به‌روزرسانی زمان که نوشتیم استفاده کنیم. برای اطمینان از درستی عملکرد، زمان و تاریخ را به پورت سریال می‌فرستیم؛

در کدهای قبلی زمان هشدار را تنظیم کرده‌ایم. برای روشن کردن یک LED در زمان وقوع وقفه، در فایل stm32f1xx_it.c و در بدنه تابع مربوط به وقفه RTC کد زیر را می‌نویسیم:

پس از رسیدن به زمان تعیین‌شده برای هشدار، LED روشن خواهد شد. در قسمت بعدی در مورد کالیبره کردن RTC صحبت خواهیم کرد.

   لینک این پروژه در گیت‌هاب

برچسب ها

حمایت از سیاوش

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

سیاوش
سیاوش

کارشناس ارشد الکترونیک دیجیتال، علاقه‌مند به یادگیری

دیدگاه ها

0 دیدگاه

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 9 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک