آموزش میکروکنترلر STM32 قسمت دوازدهم: تنظیمات تاریخ و زمان

آموزش میکروکنترلر STM32 قسمت دوازدهم: تنظیمات تاریخ و زمان

آموزش میکروکنترلر STM32 قسمت دوازدهم: تنظیمات تاریخ و زمان
آموزش میکروکنترلر STM32 قسمت دوازدهم: تنظیمات تاریخ و زمان

آموزش میکروکنترلر STM32 – قسمت دوازدهم ;

سیسوگ در قسمت یازدهم از آموزش میکروکنترلر STM32  تنظیمات نرم‌افزار CubeMX برای رابط RTC  در خانواده CORTEXM3 را آموزش داد و تنظیمات را به نرم افزار Keil منتقل کرد. در این قسمت از آموزش میکروکنترلر STM32 قصد دارد در ابتدا توابع عمومی رابط RTC را بررسی کند و جزئیات ساختار RTC_TimeTypeDef  و RTC_DateTypeDef را بیان نمایید. در مجموعه آموزش میکروکنترلر STM32 با سیسوگ همراه باشید.

در قسمت قبل از نرم افزار Cubemx خروجی گرفتیم و وارد نرم افزار Keil شدیم. حال باید در ابتدا توابع عمومی رابط RTC را بررسی کنیم.

 

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

اعضای ساختار RTC_TimeTypeDef زمان در میکروکنترلر STM32

 

بعنوان مثال ما سه خط برنامه زیر ابتدا یک ساختار از نوع زمان تعریف می‌کنیم و در خط دوم زمان را از رابط RTC می‌خوانیم و داخل ساختار مورد نظر می‌ریزیم و در خط سوم زمان دریافتی را روی رابط سریال نمایش می‌دهیم.

 

توجه داشته باشید در خط دوم برنامه بالا آرگومان اول همان اسم واحد RTC مورد استفاده شماست و آرگومان دوم همان ساختار متغیر زمان است که در خط بالاتر تعریف کردید و آرگومان سوم همان نوع فرمت اطلاعات دریافتی است که در نرم افزار Cubemx هم آن را بصورت Binary تعیین کردیم.

 

بوسیله تابع بالا می‌توانید تاریخ را که تشکیل شده از سال به همراه ماه و روز و نام روز هفته داخل یک ساختار از نوع RTC_DateTypeDef دریافت کنید برای اینکه متوجه اعضای این ساختار شوید به محل تعریف آن می‌رویم. در عکس زیر می‌توانید اعضای این ساختار را مشاهده کنید.

اعضای ساختار RTC_DateTypeDef تاریخ در میکروکنترلر STM32

 

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

 

حال به قسمت توضیح توابع تنظیم زمان و تاریخ می‌رسیم.

 

بوسیله تابع بالا می‌توانید زمان را که قبلا در یک ساختار از نوع RTC_TimeTypeDef ذخیره شده، به واحد RTC اعمال کنیم. به عنوان نمونه ما در مثال زیر ابتدا یک ساختار از نوع RTC_TimeTypeDef تعریف می‌کنیم و سپس در سه خط بعد زمان خودمان را داخل آن قرار می‌دهیم و سپس در خط پنجم آن را به واحد RTC اعمال می‌کنیم تا با این زمان تنظیم شود.

 

خوب حالا باید تابع تنظیم تاریخ را توضیح دهیم.

 

بوسیله تابع بالا می‌توانید تاریخ را که قبلا در یک ساختار از نوع RTC_DateTypeDef ذخیره شده، به واحد RTC اعمال کنیم. به عنوان نمونه، در مثال زیر ابتدا یک ساختار از نوع RTC_DateTypeDef تعریف می‌کنیم و سپس در چهار خط بعد تاریخ خودمان را داخل آن قرار می‌دهیم و سپس در خط ششم آن‌ را به واحد RTC اعمال می‌کنیم تا با این زمان تنظیم شود.

 

در خط دوم از کدهای بالا، می‌توانیم روز هفته را تنظیم نمائیم که محدوده آن بین 0 تا 6 می‌باشد که می‌توانیم از ماکروهای از پیش تعریف شده نیز استفاده کنیم که میتوانید در عکس زیر مشاهده نمائید.

تنظیمات روز هفته در میکروکنترلر STM32

برای تنظیم ماه هم می‌توانیم از ماکرو های عکس زیر استفاده کنیم ولیکن تنها در فرمت BCD و چون ما در اینجا از فرمت باینری استفاده می‌کنیم باید از محدوده اعداد 1 تا 12 برای تنظیم ماه استفاده کنیم.

تنظیمات ماه برای میکروکنترلر STM32

در قسمت تنظیم سال هم ما باید عدد سال میلادی را منحی 2000 وارد کنیم یعنی اگر سال 2018 است ما باید عدد 18 را به عنوان سال وارد نمائیم.

 

بروز رسانی 1399/01/19

یکی از دوستان در قسمت نظرها نوشته بودند که تاریخ در سری F103 بعد از خاموش روشن شدن میکرو ریست می‌شود. برای ایشان توضیح دادم که این مشکل باگی هست که کتابخانه HAL برای سری F103 دارد و با تغییراتی در فایل‌های مربوط به RTC مشکل برطرف می‌گردد. (امکان دارد این مورد در نسخه‌های جدید کتابخانه برطرف گردد.)
با این حال فایل‌های اصلاح شده که در آن تاریخ مشکلی ندارد را می توانید از اینجا دانلود کنید.

 

در قسمت سیزدهم مجموعه آموزش میکروکنترلر STM32 سیسوگ قصد دارد وقفه های رابط RTC را آموزش دهد. با سیسوگ همراه باشید.

0 نفر

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

توجه

مهدی عبدالهی
مهدی عبدالهی

کانال میکروالکترونیک @microstm32

دیدگاه ها

13 دیدگاه

  • جواد
    ۶ مهر ۱۳۹۹

    سلام ممنون از مطلبتون
    وقتی دستمو به کریستال ساعت میزنم تا وقتی دستم روش هست دیگه تایم رو نمی شماره!!
    راه حلی هست براش؟
    بدنه کریستال رو به زمین مدار هم لحیم کردم

    • Zeus ‌
      زئوس Zeus
      ۱۳ مهر ۱۳۹۹

      خوب به کجای کریستال ساعت دست میزنید ؟
      البته منطقیه که وقتی ظرفیت خازنی پایه های کریستال عوض میشه نوسان ساز از کار بیفته

      • جواد
        ۱۵ مهر ۱۳۹۹

        به ترك هاي مسير بين كريستال و ميكرو
        اين اتفاق تو يك برد ديگه هم براي كريستال اصلي افتاده
        وقي انگشتمو به مسير بين كريستال و ميكرو ميزنم سرعت چشمك زدن يكي از پايه هاي ميكرو كه به ال اي دي وصله تغيير ميكنه و درنهايت ميكرو ريست ميشه(فكر ميكنم چون واچ داگ فعاله)
        البته اينم بگم كه برد بدون چاپ محافظ هست

        • Sisoog Os
          Sisoog Os
          ۱۵ مهر ۱۳۹۹

          خب دوست عزیز نباید به اون قسمت دست بزنید
          کوچکترین امپدانس میتونه باعث اختلال قسمت اسیلاتور بشه و این موضوع عادی هست

          • جواد
            ۲۰ مهر ۱۳۹۹

            بله متوجه شدم، خيلي ممنون

            0
  • مهدی
    ۱ تیر ۱۳۹۹

    سلام من از برد آزمایشی f103 استفاده میکنم. باتری را هم قرار دادم و ولتاژش هم درسته. وقتی میکرو ریست میشه ساعت و تاریخ صفر میشه و از اول شروع به شمارش میکنه.نباید شمارش را ادامه بده؟ این دستور rtc_int آیا باعث دوباره کانفیگ شدن واحد rtc نمیشه؟ ممنون از آموزش های خوبتون.

    • Zeus ‌
      زئوس Zeus
      ۱ تیر ۱۳۹۹

      سلام دوست عزیز – تا اونجا که به خاطر دارم کتابخانه rtc این مساله رو هندل می کرد به این شکل که اگر مثلا مقدار رجیسترهای بک آپ (توی تری ۱۰۳ ۱۶ رجیستر بک اپ داریم که با قطع برق مقدارشون حفظ میشه) مقدار خاصی باشه – نشون میده که ما قبلا rtc رو مقدار دهی کردیم و اگر چنین نبود میرفت برای مقدار دهی rtc و بعد از اتمام کار مقدار بک آپ رجیستر ست میشد. من فکر میکنم بیشتر مشکل شما نرم افزاری باشه
      سمپل های کتابخانه رو برای rtc ببینید احتمالا مشکلتون رو بتونید حل کنید.

  • علی کریمی
    ۸ مهر ۱۳۹۷

    سلام و عرض ادب خداقوت و تشکر
    بنده با همین میکرو کار میکنم ولی قسمت تاریخ ظاهرا کار نمیکنه و بعد از ریست میکرو اون هم ریست میشه
    بعد از کمی تحقیقات متوجه شدم مدل F103 از تاریخ پشتیبانی نمیکنه. درس میگم؟

    • Zeus ‌
      زئوس Zeus
      ۸ مهر ۱۳۹۷

      ببیند F103 داری واحد RTC است پس از زمان و تاریخ به درستی پشتیبانی میکنه ، اما نکنه ای که باید بهش توجه داشته باشید اول این است که خانواده های ST بر خلاف خانواده های NXP که RTC داری رجیتسر های مجزا برای تاریخ (سال / روز / ماه) هستند ، داری رجیستر مجزا نیست و در واقع زمان رو به صورت unix Timestamp ذخیره میکنه یعنی یه عدد 32 بیتی
      پس جدا سازی سال و روز و ماه و …. به صورت نرم افزاری باید انجام بشه که کتابخونه های عرضه شده از سوی شرکت مشکلی ندارد !
      اما دلیل این که وقتی میکرو ریست میشه زمان هم ریست میشه برمیگرده به باگ نرم افزاری که ممکنه شما با هر بار روشن شدن میکرو زمان رو ست بکنید که قائدتا این کار درستی نیست

    • سید
      ۱ فروردین ۱۳۹۹

      سلام؛
      موردی که مطرح کردید باگی هست که کتابخانه HAL برای سری F103 داره و با تغییراتی در فایل های مربوط به RTC حل میشه (ممکنه تو نسخه های جدید کتابخانه این مورد اصلاح بشه)
      من فایل های اصلاح شده رو هم فرستادم برای سیسوگ که اگه صلاح دونستن به این پست اضافه کنن

      • سعید
        ۲۵ آبان ۱۳۹۹

        سلام
        میشه توضیح بدید چیکارشون کنیم فایلارو؟

        • سید
          ۲۲ دی ۱۳۹۹

          سلام
          باید جایگزین فایل های همنام در پروژه بشن.

          • نیما
            ۱۸ آذر ۱۴۰۰

            سلام
            داخل فایل rtc.c یه include public.h هست. اما فایل public.h وجود نداره. چیکارش کنیم؟

            0

پر بحث ترین ها

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

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

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

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

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

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

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

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

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

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

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

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

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

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

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

Mahdi.h   Mahdi.h  
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

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

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

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