آموزش میکروکنترلر STM32 – قسمت یازدهم ;
سیسوگ در قسمت دهم از آموزش میکروکنترلر STM32 کار با DMA رابط سریال UART را آموزش داد. در این قسمت از آموزش میکروکنترلر STM32 قصد دارد به آموزش تنظیمات نرمافزار CubeMX برای رابط RTC در خانواده CORTEXM3 بپردازد. در مجموعه آموزش میکروکنترلر STM32 با سیسوگ همراه باشید.
رابط RTC در خانواده CORTEXM3 :
برای شروع راه اندازی قسمت RTC بمانند دفعات قبل ابتدا نرم افزار CUBEMX را باز میکنیم و میکروکنترلر STM32F103C8T6 را انتخاب میکنیم و فرکانس را روی همان 72 مگا هرتز میگذاریم و حال باید قسمت RTC را فعال کنیم، بدین منظور مطابق عکس زیر تنظیمات Pinout را انجام میدهیم.
همانطور که در عکس بالا میبینید ما عمداً گزینه No RTC Output را انتخاب میکنیم تا بتوانیم از وقفه آلارم نیز استفاده کنیم. در مرحله بعد باید منبع کلاک RTC را انتخاب کنیم، ما برای منبع کلاک در این قسمت چند گزینه متفاوت داریم بهترین گزینه استفاده از کریستال ساعت با فرکانس 32768 هرتز خارجی است. بدین منظور طبق عکس زیر پایههای مربوط به این کریستال را فعال میکنیم.
در این حالت همانطور که در عکس بالا مشاهده میکنید پینهای PC14 و PC15 به امر اتصال کریستال ساعت اختصاص پیدا میکند و دیگر نمیتوانید از آن پینها به عنوان پورت استفاده کنید. حال به برگه Clock Configuration میرویم و گزینه کریستال ساعت را برای RTC مطابق عکس زیر انتخاب میکنیم.
توجه داشته باشید در بعضی میکروکنترولرهای چینی اسیلاتور بخش کریستال ساعت کار نمیکند و در هنگام اجرای برنامه به قسمت پیکرهبندی آن که میرسیم برنامه متوقف میشود. برای این میکروکنترولرها میتوانید گزینه اول یعنی گزینه HSE_RTC را انتخاب کنید، که تقریبا دقت مناسبی را در RTC فراهم میکند ولی بخوبی کریستال ساعت نیست. در مرحله بعد به صفحه Configuration میرویم و دکمه RTC را میزنیم تا کادر زیر ظاهر شود.
همانطور که در عکس بالا میبینیم Data Format را باید از نوع Binary انتخاب کنیم و در قسمت General هم تنظمات حتما باید روی Automatic باشد تا بصورت خودکار بوسیله تقسیم کننده فرکانس یک هرتز از منبع کلاک RTC برای این بخش فراهم گردد، ولی مثلا برای میکروهای سری CORTEXM4 مسئله به این شکل نیست، که در بخش خودش توضیح داده خواهد شد. در مرحله بعد به NVIC Setting همین تنظیمات میرویم و هر دو وقفه نشان داده شده در شکل زیر را که اولی مربوط به وقفه عمومی RTC میشود و دومی هم به وقفه رویداد الارم RTC مربوط میشود را فعال میکنیم.
پس از این مرحله تنظیمات را OK میکنیم و از همان صفحه Configuration دکمه NVIC را میزنیم و طبق عکس زیر در قسمت مورد نظر دو تیک مربوط به وقفههای مورد استفاده RTC را فعال میکنیم.
در مرحله بعد تنظیمات را OK میکنیم و با زدن دکمه Generate از نرم افزار خروجی میگیریم توجه داشته باشید در این برنامه ما UART1 را قبلاً برای نمایش اطلاعات انتخاب کردهایم. بعد از خروجی گرفتن از نرمافزار Cubemx وارد محیط نرمافزار Keil میشویم حال باید در ابتدا توابع عمومی رابط RTC را بررسی کنیم.
1 | HAL_RTC_GetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format) |
بوسیله تابع بالا میتوانید زمان را که تشکیل شده از ساعت به همراه دقیقه و ثانیه داخل یک ساختار از نوع RTC_TimeTypeDef دریافت کنید.
سیسوگ در قسمت دوازدهم قصد دارد جزئیات ساختار RTC_TimeTypeDef را برای شما توضیح دهد. با سیسوگ همراه باشید.
سلام
تشکر بابت آموزش های رایگانتون 🙏☘️
سلام
من یه مشکله عجیبی دارم نمیدونم چیکار کنم
من از میکروکنترلر stm32f103c8t6 استفاده میکنم تقریبا از تمامی پریفرالهایی هم که داره استفاده میکنم
مشکلی که دارم اینکه باتری بکاپ ساعتش زود خالی میشه حدود 2 هفته
با چنتا برد و میکرو دیگه هم امتحان کردم بازم این مشکل هست.
بنظرتون چطور این مشکل رو حل کنم؟؟
سلام ، خوب میتونه مشکل از میکروکنترلر باشه یا حتی طراحی و مونتاژ برد
برای شروع شما میتونید جریان مصرفی باتری رو اندازه گیری کنید ببینید توی بردتون مطابق دیتاشیت هست یا نه
کاش قبل از اینکه برید سراغ کیوب یه کم در مورد خود پریفرال توضیح بدین که مثلا قراره چیکار کنه . رجیستراش چی ان ؟ کارشون چیه ؟
ببخشید انتقاد دارم . میدونم تهیه آموزش کار راحتی نیست مخصوصا اگر مجانی باشه ولی اینطوری که اموزش حساب نمیشه فقط یه مقدار دهی به یه سری توابع هست . بدون اینکه بدونیم داریم چیکار می کنیم .. از وقتی هم که گذاشتید برای تهیه آموزش ممنونم
بهزاد جان سپاس از انتقاد منصفانهتان. ما در یک مجموعه جدید به اسم “آموزش STM32 با توابع LL” سعی کردیم این مواردی که میفرمائید را به خوبی توضیح بدهیم و یک مجموعه آموزشی با کیفیت بسیار بالا را ایجاد کنیم. لینکش رو در پایین قرار میدم، امیدوارم که خوشتون بیاد.
https://sisoog.com/%d8%a2%d9%85%d9%88%d8%b2%d8%b4-stm32-%d8%a8%d8%a7-%d8%aa%d9%88%d8%a7%d8%a8%d8%b9-ll/
سلام
من می خوام مقدار یک متغیر رو در داخل واحد RTC ذخیره کنم که مقدار متغیر در موقع قطع برق تغییر نکند .
خیلی بابت این موضوع سرچ کردم اما چیزی انچنانی پیدا نکردم
میکرو من stm32f103c8t6 هست و میکرو EEPROM داخلی نداره و چون متغیر دائم در حال تغییر است نمیتوان از حافظه FLASH به عنوان EEPROM استفاده کرد
و امکان استفاده از EEPROM خارجی نیست
میشه در باره این موضوع بیشتر توضیح بدین .
اینم پروژه من در داخل برنامه KEIL
https://s16.picofile.com/file/8422670968/RTC.rar.html
سلام دوست عزیز
در این خانواده میکروکنترلر فکر میکنم ۱۶ تا رجیستر وجود داره که مقدار اونها با باتری بک آپ حفظ میشه هر رجیستر هم قادر است یک عدد ۱۶ بیتی رو در خودش نگه داره یعنی در مجموع شما ۲۵۶ بیت فضا در اختیار دارید که با باتری مقدار خودش رو حفظ میکنه.
اگر نیاز به eeprom دارید ما مقاله ای داریم که آموزش میده چطور میتونید حافظه فلش رو به عنوان eeprom هم استفاده کنید.
تبدیل حافظه FLASH میکروکنترلرهای STM32 به EEPROM
ممنون پاسخ خوبتون
من العان یک هفته هست درگیر این پروژه هستم اما هنوز راهی پیدا نکردم که بتونم با باتری بکاپ مقدار متغیر رو نگه دارم برنامه ای که نوشتم رو اپلود کردم و لینکش رو فرستادم میشه یک راهنمایی بکنین
هییچ مطلبی پیدا نکردم
و اینکه ممنون از پیشنهاد خوبتون اما من فقط در این پروژه مجورم از باتری بکاپ استفاده کنم
خوب اقا بالاخره خودم بعد از یک هفته به جواب رسیدم
اینم لینک پروژه من در داخل برنامه keil برنامه خیلی واضح هست امید وارم برای دوستان مفید باشه موفق باشیبن
https://www.eca.ir/forums/thread89315.html#post726818
سلام
بسیار هم عالی – خوشحالم که مشکل رو حل کردید و متشکرم که نتیجه رو اینجا با ما هم به اشتراک گذاشتید
سلام ببخشید سوالم یخورده بی ربط به موضوعه من از برنامه کیل استفاده میکنم چون کرک شدس یخورده حساس شدم استفاده ازین مدل برنامه ها از لحاظ شرعی مشکلی نداره؟
🙂
سلام دوست عزیز این سوال را میتونید از دفتر استفتائات مراجع بپرسید
البته لازمه یه دوره اموزشی واسشون توضیح بدید دغدغتون چی هست 🙂
استفتاء بنده را البته در زیر میتونید بخونید :-))
استفاده از کرک و شکستن ققل های نرم افزارهای موجود در حوزه الکترونیکی که در خارج منتشر میشوند و هیچ گونه پشتیبانی و خدماتی هم به ما نمیدهند و اکثرا هم ما را فیلتر کرده اند از شیر مادر بر شما حلال تر است
و صد البته چرا برادرم وقتی نرم افزارهای اپن سورس و رایگان و بهتری وجود داره به خودتون فشار میارید
کامپایلر فوق العاده ای مثل GCC و ادیتور قوی مثل اکلیپس
و تازه خودتون را در معرض خطرات کرک های ناپایدار و مشکل دار میکنید
خیلی ممنون بنده gcc کار نکردم اپشنای کیل رو داره؟ کیل خیلی کارارو اسون کرده اونم اینجوریه؟
خوب GCC به نظر من چیزی که کم نداره خیلی هم بیشتر از کیل داره
ولی خوب یه مقداری کار کردن باهش قلق میخواد 🙂
سلام وخسته نباشید. من از میکرو stm32f103c8t6 استفاده میکنم و هر کاری میکنم نمیتونم کلاک کانفیگشو نمیتونم روی 72 مگا هرتز بذارم همش میگرده و اخر سر خودش پیشنهاد کلاک دیگه ای رو میده مثلا 64. کجای کار من اشتباه هست . ممنونم از شما
کجا با این مشکل مواجه هستید ؟
توی نرم افزار کیوب ؟
ممنونم از پاسخ شما. من در کیوب با این مشکل مواجه شدم. اصلا عوض نمیشه
در نرم افزار کیوب برای تعین فرکانس
برای این که بتونید سورس rtc رو تغییر بدید اول لازمه که اسیلاتور اونو فعال کنید
برای این کار اول به قسمت system core بروید بعد گزینه rcc و انتخاب کنید و LSE رو فعال کنید.
سلام
از آموزشهای خوبتون تشکر میکنم.
ولی یک سوال داشتم! چرا قسمتهای دوازدهم به بعد این آموزش آپلود نشده است؟؟؟
یعنی دیگه نمیخواید این مجموعه آموزش مفید رو ادامه بدید؟؟!!
سلام دوست عزیز
متاسفانه فراموش شده بود آدرس پست دوازدهم در پست 11 اضافه بشه. این مجموعه در 15 قسمت ارائه شده که میتوانید در آدرس زیر کل مجموعه را ببینید:
https://sisoog.com/tag/stm32f1/
مجموعه آموزشی دیگری هم تحت عنوان “آموزش میکروکنترلر STM32F4” در حال انتشار است.
ممنون از توجه شما
با تشکر از پاسخگوییتون
با سلام بی صبرانه منتظر آموزشهای بسیار عالی شما هستم
سلام
ممنون از لطف شما دوست عزیز
سلام
ممنون از مطالب خوبتون .
منتظر قسمت های بعدی هستیم.
سلام
متشکر از لطف شما
بله حتما