آموزش میکروکنترلر STM32
در قسمت یازدهم از آموزش میکروکنترلر STM32 تنظیمات نرمافزار CubeMX برای رابط RTC در خانواده CORTEXM3 را آموزشداد و تنظیمات را به نرمافزار Keil منتقلکرد. در این قسمت از آموزش میکروکنترلر STM32 قصد داریم در ابتدا توابععمومی رابط RTC را بررسیکنیم و جزئیات ساختار RTC_TimeTypeDef و RTC_DateTypeDef را بیان نماییم. در مجموعه آموزش میکروکنترلر STM32 با ما همراه باشید.
در قسمتقبل، از نرمافزار Cubemx خروجی گرفتیم و وارد نرمافزار Keil شدیم. حال باید در ابتدا توابععمومی رابط RTC را بررسیکنیم.
HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
بهوسیله تابع بالا میتوانید زمان را که تشکیلشده از ساعت به همراه دقیقه و ثانیه داخل یک ساختار از نوع RTC_TimeTypeDef را دریافتکنید. برای اینکه متوجه اعضای این ساختار شوید به محل تعریف آن میرویم. در عکسزیر میتوانید اعضای این ساختار را مشاهدهکنید.
بعنوانمثال؛ ما سه خط برنامه زیر ابتدا یک ساختار از نوع زمان تعریف میکنیم و در خط دوم زمان را از رابط RTC میخوانیم و داخل ساختار موردنظر میریزیم و در خط سوم زمان دریافتی را روی رابط سریال نمایش میدهیم.
RTC_TimeTypeDef time; HAL_RTC_GetTime(&hrtc, &time, RTC_FORMAT_BIN); printf("TIME=%02d:%02d:%02d\r\n", time.Hours, time.Minutes, time.Seconds);
توجهداشتهباشید در خط دوم برنامه بالا آرگومان اول همان اسم واحد RTC مورد استفاده شماست و آرگومان دوم همان ساختار متغیر زمان است که در خط بالاتر تعریف کردید و آرگومان سوم همان نوع فرمت اطلاعات دریافتی است که در نرمافزار Cubemx هم آن را بهصورت Binary تعیین کردیم.
HAL_RTC_GetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
بهوسیله تابعبالا میتوانید تاریخ را که تشکیلشده از سال بههمراه ماه و روز و نام روز هفته داخل یک ساختار از نوع RTC_DateTypeDef دریافتکنید برای اینکه متوجه اعضای این ساختار شوید به محل تعریف آن میرویم. در عکسزیر میتوانید اعضای این ساختار را مشاهدهکنید.
بهعنوانمثال، در سه خط برنامهی زیر ابتدا یک ساختار از نوع تاریخ تعریف میکنیم و در خط دوم تاریخ را از رابط RTC میخوانیم و داخل ساختار موردنظر میریزیم و در خط سوم تاریخ دریافتی را روی رابط سریال نمایش میدهیم.
RTC_DateTypeDef date; HAL_RTC_GetTime(&hrtc, &date, RTC_FORMAT_BIN); printf("DATE=%02d/%02d/%02d\r\n", date.Year, date.Month, date.Date);
حال به قسمت توضیح توابع تنظیم زمان و تاریخ میرسیم.
HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format)
بوسیله تابعبالا میتوانید زمان را که قبلا در یک ساختار از نوع RTC_TimeTypeDef ذخیرهشده، به واحد RTC اعمال کنیم. بهعنواننمونه ما در مثالزیر ابتدا یک ساختار از نوع RTC_TimeTypeDef تعریف میکنیم و سپس در سه خط بعد زمان خودمان را داخل آن قرار میدهیم و سپس در خط پنجم آن را به واحد RTC اعمال میکنیم تا با این زمان تنظیم شود.
RTC_TimeTypeDef time; time.Hours = 1; time.Minutes = 0; time.Seconds = 0 HAL_RTC_SetTime(&hrtc, &time, RTC_FORMAT_BIN);
خوب حالا باید تابع تنظیم تاریخ را توضیحدهیم.
HAL_StatusTypeDef HAL_RTC_SetDate(RTC_HandleTypeDef *hrtc, RTC_DateTypeDef *sDate, uint32_t Format)
بهوسیله تابعبالا میتوانید تاریخ را که قبلا در یک ساختار از نوع RTC_DateTypeDef ذخیره شده، به واحد RTC اعمال کنیم. بهعنوان نمونه، در مثالزیر ابتدا یک ساختار از نوع RTC_DateTypeDef تعریف میکنیم و سپس در چهار خط بعد تاریخ خودمان را داخل آن قرار میدهیم و سپس در خط ششم آنرا به واحد RTC اعمال میکنیم تا با این زمان تنظیم شود.
RTC_DateTypeDef date; date.WeekDay = RTC_WEEKDAY_MONDAY; date.Month = 1; date.Date = 12; date.Year = 18; HAL_RTC_SetDate(&hrtc, &date, RTC_FORMAT_BIN);
در خط دوم از کدهای بالا، میتوانیم روز هفته را تنظیم نمائیم که محدوده آن بین صفر تا ۶ میباشد که میتوانیم از ماکروهای ازپیش تعریفشده نیز استفاده کنیم که میتوانید در عکسزیر مشاهدهنمائید.
برای تنظیم ماه هم میتوانیم از ماکروهای عکسزیر استفادهکنیم ولیکن تنها در فرمت BCD و چون ما در اینجا از فرمت باینری استفاده میکنیم باید از محدوده اعداد ۱ تا ۱۲ برای تنظیم ماه استفادهکنیم.
در قسمت تنظیم سال هم ما باید عدد سال میلادی را منحی ۲۰۰۰ وارد کنیم یعنی اگر سال ۲۰۱۸ است ما باید عدد ۱۸ را به عنوان سال وارد نمائیم.
بروز رسانی 1399/01/19
یکیاز دوستان در قسمت نظرها نوشته بودند که تاریخ در سری F103 بعداز خاموش/روشن شدن میکرو ریست میشود. برای ایشان توضیحدادم که این مشکل باگی هست که کتابخانه HAL برای سری F103 دارد و با تغییراتی در فایلهای مربوطبه RTC مشکل برطرف میگردد. (امکاندارد این مورد در نسخههای جدید کتابخانه برطرف گردد.)
با اینحال فایلهای اصلاحشده که در آن تاریخ مشکلی ندارد را می توانید از اینجا دانلود کنید.
در قسمت سیزدهم مجموعه آموزش میکروکنترلر STM32 قصد داریم وقفه های رابط RTC را آموزش دهیم. با ما همراه باشید.
منبع: سیسوگ