آموزش STM32 با توابع HAL, توصیه شده, معرفی

بررسی RCC و منابع کلاک در STM32 | قسمت سوم آموزش STM32 با توابع HAL

منابع کلاک 

در قسمت پیشین از سری آموزش STM32 با توابع HAL، و نرم‌افزارهای مورداستفاده آشنا شدیم و نحوه پیکربندی پروژه‌ها را یاد گرفتیم. در این قسمت قصد آشنایی با واحد RCC در کتابخانه HAL، تشریح ویژگی‌های آن و همچنین چگونگی تنظیم و استفاده از منابع کلاک و ریست راداریم. با سیسوگ همراه باشید.

واحد RCC در کتابخانه HAL

RCC یا Reset and Clock Control، یکی از دستگاه‌های جانبی میکروکنترلر است که وظیفه کنترل کردن و توزیع سیگنال ریست و کلاک برای سیستم و دستگاه‌های جانبی را بر عهده دارد. سیگنال‌های کلاک ورودی به واحد RCC، شامل سیگنال‌های کلاک داخلی (مثل LSI، ‌HSI و ‌CSI) و خارجی (LSE و HSE) می‌شوند. هرکدام از منابع کلاک می‌توانند به‌صورت مستقیم یا غیرمستقیم (از طریق PLL) کلاک بخش‌های مختلف سخت‌افزار را تأمین کنند. در ادامه مطلب RCC در کتابخانه HAL، به توضیح مختصر در مورد ریست میکروکنترلر و هرکدام از منابع کلاک نام‌برده شده می‌پردازیم.

ریست در میکروکنترلر

ریست در میکروکنترلر

ریست در میکروکنترلر

میکروکنترلرها مانند هر سیستم دیجیتالی دیگری، امکان ریست شدن دارند. ریست میکروکنترلر می‌تواند دلایل متفاوتی داشته باشد. عوامل ریست کننده میکرو نیز همیشه یکسان نیستند (این عامل به‌عنوان‌مثال می‌تواند تایمر نگهبان، ریست نرم‌افزاری یا سخت‌افزاری باشد) اما در اینجا می‌خواهیم به این سؤال پاسخ دهیم که ریست شدن میکرو دقیقاً به چه معناست و وقتی میکرو ریست می‌شود چه اتفاق یا اتفاقاتی خواهد افتاد؟

ریست شدن میکرو به معنای ساده، آغاز کار یا شروع دوباره میکروکنترلر برای اجرای کد نرم‌افزار، به‌صورت کنترل‌شده است. زمانی که هر یک از عوامل، میکروکنترلر را ریست کنند، ابتدا مراحل زیر به ترتیب انجام می‌شوند؛

  • مقدار رجیستر شمارنده برنامه یا PC، با آدرس 0 یعنی 0x00000000 پر می‌شود. این آدرس مربوط به بالای حافظه Stack است.
  • در این زمان میکروکنترلر مقدار ذخیره‌شده در آدرس 0x00000000 یا بالای Stack را در اشاره‌گر اصلی Stack یا همان MSP می‌نویسد.
  • سپس مقدار PC به‌اضافه 4 خواهد شد تا به آدرس بعدی در حافظه اشاره کند. آدرس بعد یعنی 0x00000004، حاوی اشاره‌گر به روال ریست (reset handler function) است که مراحل ریست را کنترل می‌کند.
  • تابع ریست ابتدا تمامی وقفه‌ها را غیرفعال می‌کند.
  • سپس نوبت به مقداردهی اولیه سگمنت‌های مختلف حافظه ازجمله data، ‌Bss و stack می‌رسد.
  • در این زمان وقفه‌ها دوباره فعال خواهند شد.
  • در آخر نیز تابع main فراخوانی می‌شود.

منابع کلاک

منابع کلاک 

منابع کلاک

سیگنال کلاک چیست؟

همان‌طور که در هر سیستم دیجیتال ترتیبی یا دارای حافظه از یک سیگنال هماهنگ‌کننده کلاک استفاده می‌شود، در پردازنده‌ها و میکروکنترلرها نیز برای کارکرد خود به یک سیگنال کلاک وابسته هستند. در یک واحد پردازشی، بأس، رجیسترها و دستگاه‌های جانبی به‌وسیله سیگنال کلاک هماهنگ می‌شوند. همچنین سیگنال کلاک تعیین می‌کند که پردازنده با چه سرعتی دستورات خود را پردازش می‌کند. به‌علاوه، Baud rate ارتباط سریال، سرعت تبدیل سیگنال آنالوگ به دیجیتال و بسیاری پارامترهای دیگر، توسط کلاک تعیین می‌شوند.

به‌طورکلی کلاک سیستم از سه منبع مختلف می‌تواند تأمین شود که عبارت‌اند از:

  • کلاک اسیلاتور HSI (یا اسیلاتور پرسرعت داخلی)
  • کلاک اسیلاتور HSE (یا اسیلاتور پرسرعت خارجی)
  • کلاک PLL اصلی

همچنین دو منابع کلاک دیگر نیز برای دستگاه‌های جانبی موجود است که عبارت‌اند از:

  • مدار RC داخلی و کم‌سرعت (LSI RC) که فرکانس 32‌kHz را تولید می‌کند. از این کلاک معمولاً برای تایمر نگهبان مستقل (Independent Watchdog) و همچنین برای RTC هنگامی‌که بخواهیم از Auto-wakeup استفاده کنیم.
  • کلاک کریستال کم‌سرعت خارجی (LSE crystal) با فرکانس 32‌.768kHz که می‌تواند به‌عنوان منابع کلاک RTC استفاده شود.

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

در برخی میکروکنترلرها، علاوه بر منابع کلاک گفته‌شده، کلاک‌های دیگری نیز وجود دارند. مثلاً مدارات نوسان‌ساز RC مثل CSI که یک RC داخلی توان پایین است که کلاکی با فرکانس 4MHz را تولید می‌کند. نکته‌ی دیگری که در مورد انتخاب اسیلاتور منبع کلاک باید به آن توجه کرد این است که اسیلاتور توانایی پشتیبانی از کارایی و سرعت پردازش مورد انتظار از میکروکنترلر را داشته باشد. به‌بیان‌دیگر، بتواند نرخ کلاک موردنظر را تأمین کند. همچنین ازآنجایی‌که برخی از اسلاتورها پیچیدگی بیشتر و قیمت بالاتری دارند، انتخاب نوع اسیلاتور بر پیچیدگی بورد و قیمت آن نیز تأثیر گذار خواهد بود.

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

منابع داخلی

  • مدار RC (مقاومت_خازنی)
  • PLL (حلقه قفل فاز) برای چندبرابر کردن فرکانس

منابع خارجی

  • کلاک CMOS
  • کریستال
  • رزناتور سرامیکی
  • مدار RC
  • خازن به تنهایی

نوسان‌سازهای داخلی

استفاده از نوسان‌سازهای داخلی و درنتیجه ساده نگه‌داشتن سیستم، به دلایلی منطقی، طرفداران خودش را دارد. توصیه می‌شود درصورتی‌که منبع کلاک داخلی نیازهای ما را برآورده می‌کند، به‌جای به کاربردن منبع خارجی، از آن استفاده کنیم. اولین مزیت این کار، بی‌نیاز بودن از قطعات خارجی است. علاوه بر آن، ازآنجاکه سازنده میکروکنترلر این منبع کلاک را طراحی کرده‌اند، می‌توان اطمینان داشت که فرکانس آن به خوبی انتخاب‌شده است. دلیل دیگر این است که معمولاً مشخصات مربوط به کارکرد سیستم با این منبع کلاک، ازجمله دقت اولیه، Duty cycle، وابستگی دمایی در دیتاشیت، نوشته‌شده است.

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

بااین‌حال، در خیلی از کاربردها، نوسان‌ساز داخلی جوابگو است و خطاهای آن قابل‌چشم‌پوشی هستند. به‌خصوص زمانی که فرکانس آن توسط سازنده کالیبره شده باشد. درحالی‌که نوسان‌سازهای میکروکنترلرهای قدیمی تلرانسی در حدود %20± داشتند، در میکروکنترلرهای جدیدتر، این مقدار به کمتر از %1.5± بهبودیافته است که دقت کافی برای ارتباط RS-232 و حتی USB (در صورت استفاده از مدار clock-recovery) را فراهم می‌کند.

روش دیگری که برای افزایش کارایی نوسان‌ساز داخلی وجود دارد تریم (Trimming) کردن به‌صورت دستی است. درصورتی‌که میکروکنترلر مورداستفاده دارای رجیستر Trimming/Calibration باشد، می‌توان با تغییر مقدار این رجیستر، فرکانس را تنظیم کرد. این روش به‌خصوص برای کاربردهایی که در تعداد محدود طراحی و تولید می‌شوند، می‌تواند بسیار مفید واقع شود. مراحل انجام کار نیز به این صورت است که فرکانس کلاک به‌وسیله اسیلوسکوپ یا فرکانس شمار اندازه‌گیری می‌شود و سپس نوسان‌ساز بر همین اساس و از طریق رجیستر نام‌برده شده، تریم خواهد شد.

ابزار دیگری که برای کارایی بهتر نوسان‌ساز در اختیارداریم، حلقه قفل فاز یا همان PLL است. با استفاده از PLL می‌توانیم دقت و پایداری یک اسلاتور سریع اما کم کیفیت داخلی را به یک اسیلاتور خارجی دقیق، نزدیک کنیم. بااین‌حال باید توجه کنیم که یک PLL عموماً ما را از عناصر خارجی بی‌نیاز نمی‌کند. زیرا معمولاً از یک کریستال برای تأمین کلاک رفرنس موردنیاز PLL استفاده می‌شود. اگرچه در این مورد نیز استثنایی وجود دارد. همچنان می‌توان در مواردی که روی PCB یک کلاک با دقت و کیفیت بالا داریم (که به دلیل سرعت‌پایین آن قابل‌استفاده برای میکروکنترلر نیست) از PLL برای بالا بردن فرکانس آن استفاده کنیم.

کلاک CMOS

گزینه‌ی دیگری که برای تأمین کلاک وجود دارد بانام “CMOS clock” شناخته می‌شود. درواقع “CMOS clock” را می‌توان به هر نوع سیگنال کلاکی که توسط یک عنصر خارجی روی بورد، تأمین می‌شود، اطلاق کرد. درواقع درجاهایی که بورد طراحی‌شده، شامل یک سیگنال کلاک با فرکانس مناسب و مشخصات الکتریکی سازگار برای ورودی CMOS clock میکروکنترلر می‌شود، این گزینه انتخاب بسیار خوبی به نظر می‌رسد. اما ازآنجاکه در بیشتر موارد چنین سیگنال کلاکی در دسترس نیست، می‌خواهیم دو روش برای تولید چنین سیگنال کلاکی را بررسی کنیم.

گزینه اول استفاده از کریستال نوسان‌ساز (“Crystal Oscillator”) است. جا دارد که در اینجا به این نکته اشاره‌کنیم که یک کریستال کوارتز، به‌تنهایی نمی‌تواند نوسان‌ساز باشد. بلکه به‌عنوان عنصر اصلی و مرکزی یک مدار نوسان‌ساز کریستال کوارتزی، استفاده می‌شود. چنین مداری می‌تواند در شکل و شمایلی مانند مدار زیر باشد:

کلاک CMOS

کلاک CMOS

همان‌طور که در مدار نمونه بالا نشان داده‌شده است، یک نوسان‌ساز کریستالی، دستگاهی است که از یک کریستال کوارتز به‌علاوه یک مدار تشکیل‌شده است که می‌تواند یک سیگنال کلاک دیجیتال استاندارد تولید کند. نوسان‌ساز کریستالی، از پایداری و دقت فرکانسی کریستال بهره می‌برد، بی‌آنکه دغدغه‌هایی مثل مقدار بار خازنی یا ظرافت خاص موردنیاز در طراحی PCB (برای عملکرد قابل‌اتکای کریستال تنها) را به همراه داشته باشد.
راه دوم برای تولید سیگنال کلاک CMOS، استفاده از نوسان‌ساز سیلیکونی (“silicon oscillator”) است. نوسان‌ساز سیلیکونی به دسته‌ای از IC های نوسان‌ساز گفته می‌شود که از کریستال کوراتز یا رزناتور سرامیکی استفاده نمی‌کنند. این دسته از نوسان‌سازها، دستگاه‌های قابل‌اتکا و دقیقی هستند که به‌راحتی نیز می‌توان از آن‌ها در بورد استفاده کرد. به‌عنوان یک نمونه از نوسان‌سازهای سیلیکونی، می‌توان سری LTC6930، تولید شرکت Linear Tech را نام برد. تنها عنصر اضافه‌ای که برای استفاده از این IC ها نیاز داریم، یک خازن bypass است. قابل‌ذکر است که اکثر IC های سری نام‌برده شده، با دقت بسیار خوبی (%99.95) در فرکانس نامی خودکار می‌کنند.
کلاک CMOS

نوسان‌ساز سیلیکونی

منابع کلاک 

میزان فرکانس خطا

به‌عنوان نکته آخر در مورد این نوسان‌سازها باید گفت که نوسان‌سازهای سیلیکونی نسبت به کریستال و رزناتور سرامیکی، قابل اتکاتر هستند و به‌خصوص در محیط‌هایی که به دستگاه لرزش و یا شوک وارد می‌شود، عملکرد بهتری از خود نشان می‌دهند. اگرچه قیمت بالاتری هم دارند.

کوارتز و سرامیک

در کاربردهایی که نیاز به‌دقت و پایداری بالا وجود دارد، اما قصد نداریم که برای IC نوسان‌ساز کریستالی هزینه کنیم، می‌توانیم از خود کریستال به‌تنهایی استفاده کنیم. در میکروکنترلرهایی که از چنین روشی پشتیبانی می‌کنند، بخشی از مدار نوسان‌ساز کریستالی که در بالا در مورد آن صحبت کردیم، گنجانده‌شده است. تنها قطعه موردنیاز که باید در کنار کریستال استفاده شود، خازن‌های لود مناسب هستند. خازن لود معادلی (CLTOTAL) که باید با کریستال استفاده شود، در دیتا شیت آن نوشته‌شده است. بر همین اساس، خازن‌های لود به‌وسیله رابطه زیر انتخاب می‌شوند:

رابطه انتخاب خازن های لود

رابطه انتخاب خازن های لود

در این رابطه، CP نشان‌دهنده خازن‌های پارازیتی است. استفاده از این رابطه نیز بسیار ساده است؛ ابتدا باید یک مقدار منطقی برای CP در نظر بگیریم (به‌عنوان‌مثال pF ‌5). سپس مقدار CP را از CLTOTAL کم کرده و حاصل را ضرب‌در 2 می‌کنیم. برای مثال اگر خازن لود معادل در دیتاشیت برابر با pF ‌ 18 تعیین‌شده باشد، خواهیم داشت:

 انتخاب خازن های لود

انتخاب خازن های لود

رزناتورهای سرامیکی نسبت به کریستال‌ها دقت کمتری دارند؛ به‌طورمعمول، تلرانس آن‌ها حدود 1000 تا 5000 ppm است. بااین‌حال اگر به‌دقت کریستال کوراتز نیاز نداشته باشیم، استفاده از رزناتورهای سرامیکی باعث کاهش هزینه خواهد شد. علاوه بر این، مزیت اصلی رزناتورهای سرامیکی این است که به‌صورت مجتمع در آن‌ها خازن‌های لود نیز به‌کاررفته و دیگر نیازی به خازن خارجی ندارند.

خازن و مقاومت

در اکثر کاربردها، اسیلاتور خازن-مقاومتی و یا خازنی، به‌عنوان یک منبع کلاک استفاده نمی‌شود. بااین‌حال ممکن است بسته به کاربرد و بنا به دلایلی، این نوع اسیلاتور خارجی به گزینه‌های قبلی ترجیح داده شود (و استفاده از اسیلاتور داخلی میکروکنترلر نیز مطلوب یا امکان‌پذیر نباشد). در این صورت برای جزییات طراحی و نحوه اتصال مدار نوسان‌ساز، باید به دیتاشیت میکروکنترلر مورداستفاده، مراجعه کرد. برای نمونه برای میکروکنترلرهای C8051F12x–13x، با توجه به دیتاشیت آن‌ها، اتصال‌های گفته‌شده، به این صورت هستند:

منابع کلاک 

خازن و مقاومت

برای جمع‌بندی و خلاصه کردن نحوه انتخاب منبع کلاک، با توجه به نکات گفته‌شده راجع به انواع منابع تولید سیگنال کلاک، می‌توان دو مورد زیر را در نظر داشت:

  • درزمانی که اسیلاتور داخلی جوابگوی کاربرد موردنظر ماست، به همان اکتفا کنیم.
  • درصورتی‌که دقت بالا موردنیاز است و مشکل هزینه وجود ندارد، به سراغ نوسان‌ساز سیلیکونی می‌رویم. در غیر این صورت نیز کریستال کوارتزی را انتخاب می‌کنیم.

نحوه تنظیم کلاک در محیط STM32Cube IDE

در بخش قبلی سری آموزش HAL، نحوه پیکربندی پروژه‌ها بررسی شد و گفتیم که تنظیمات مربوط به کلاک را در این قسمت توضیح می‌دهیم. پس دوباره به صفحه تنظیم کلاک در بخش پیکربندی پروژه با STM32CubeIDE (یا STM32CubeMX) برمی‌گردیم؛

در تب Pinout & Configuration و در بخش System Core -> RCC، می‌توانیم نوع منبع کلاک را مشخص کنیم. قسمت LSE مربوط به کلاک کم‌سرعت خارجی و قسمت HSE مربوط به کلاک پرسرعت خارجی است که در پروژه‌های اول تنها نیاز به تنظیم همین قسمت خواهیم داشت. ازآنجاکه ما می‌خواهیم از کریستال روی بورد Blue Pill، به‌عنوان منبع کلاک استفاده کنیم، مانند شکل گزینه Crystal/Ceramic Resonator را انتخاب می‌کنیم. بقیه پارامترها ازجمله HSI Calibration (که مربوط به رجیستر Trim/Calibration است که در ابتدای متن اشاره کردیم) را بدون تغییر رها می‌کنیم.

در تب بعد یعنی Clock Configuration، مانند شکل زیر می‌توانیم به‌صورت گرافیکی کلاک هر بخش را تنظیم کنیم. از طریق مالتی‌پلکسر مشخص‌شده در شکل می‌توانیم از میان گزینه‌های HSI، ‌HSE و PLLCLK منبع تأمین‌کننده کلاک سیستم را انتخاب کنیم؛

منابع کلاک 

Clock Configuration

گزینه Enable CSS که در پایین مالتی‌پلکسر مشخص‌شده در شکل بالا، وجود دارد، مربوط به فعال کردن سیستم حفاظت کلاک (Clock Security Systerm) است. این سیستم که تنها در صورت استفاده از HSE به شکل مستقیم یا غیرمستقیم (از طریق PLL)، قابل فعال‌سازی است، باعث می‌شود که اگر به هر دلیلی HSE دچار اشکال شود، سیستم (از طریق break event تولیدشده توسط CSS) به حالت امن (Safe State) برود. به‌عنوان‌مثال این قابلیت می‌تواند در کاربردهای حساسی مثل کنترل موتور استفاده شود.

سیگنال کلاک ورودی PLL نیز با استفاده از مالتی‌پلکسر پایین شکل قابل تنظیم است. برای ورودی PLL می‌توانیم یکی از دو منبع کلاک HSI یا HSE را انتخاب کنیم؛

Clock Configuration

Clock Configuration

همان‌طور که می‌دانیم PLL امکان افزایش نرخ کلاک را به ما می‌دهد. با انتخاب مقدار PLLMul می‌توانیم کلاک ورودی سیستم را براساس مضربی از سیگنال ورودی PLL تنظیم کنیم؛

Clock Configuration

Clock Configuration

برای تنظیم کلاک بخش‌های مختلف سیستم، ازجمله باس‌ها و پریفرال‌ها، می‌توانیم از تقسیم‌کننده‌ها و ضرب کننده های موجود در مسیر کلاک آن‌ها، استفاده کنیم؛

Clock Configuration

Clock Configuration

همچنین یک روش دیگر برای تنظیم کلاک بخش‌های مختلف، نوشتن مقدار کلاک موردنظر در باکس موجود در مسیر کلاک آن قسمت است. به این طریق، خود نرم‌افزار ضرب و تقسیم‌های مناسب برای دست‌یابی به کلاک مشخص‌شده را محاسبه می‌کند. البته درصورتی‌که کلاک مشخص‌شده قابل دست‌یابی و در محدوده نرخ کلاک ممکن برای میکروکنترلر باشد.

Clock Configuration

Clock Configuration

اکنون می‌خواهیم در مورد دو مالتی‌پلکسر دیگر که در این شکل وجود دارند صحبت کنیم. مالتی‌پلکسر اول در بالا سمت چپ و مربوط به کلاک RTC است. درصورتی‌که در تب Pinouts & Configuration، واحد RTC را فعال کرده باشیم، کلاک آن از میان سه گزینه LSI (با فرکانس KHz ‌40)، LSE و HSE تقسیم‌بر 128، قابل انتخاب است؛

RTC clock mux

RTC clock mux

مالتی‌پلکسر دوم نیز در قسمت پایین شکل و مربوط به خروجی کلاک میکروکنترلر است. درصورتی‌که مال در تب Pinouts & Configuration، پایه مربوط به خروجی کلاک میکروکنترلر را فعال کرده باشیم، می‌توانیم از طریق این مالتی‌پلکسر انتخاب کنیم که چه کلاکی را روی این پایه بفرستیم؛

در این قسمت از سری آموزش STM32 با توابع HAL، در مورد RCC در کتابخانه HAL (ریست و کلاک میکروکنترلر) نکات مفیدی را یاد گرفتیم. در قسمت بعدی می‌خواهیم در مورد نحوه دیباگ کد پروژه در نرم‌افزار STM32CubeIDE صحبت کنیم. با ما همراه باشید.

   منبع توضیحات منابع کلاک

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

8 دیدگاه در “بررسی RCC و منابع کلاک در STM32 | قسمت سوم آموزش STM32 با توابع HAL

  1. Avatar for دانیال دانیال گفت:

    سلام
    یک سوال داشتم BYPASS clock source چیه فرقش ؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام
      ببخشید سوالتون رو درست متوجه نشدم

  2. Avatar for حدیث حدیث گفت:

    امیداورم بابت آموزش های بی نظیری که به ـآسانی در اختیار افراد گذاشتین خدا به تنتون قوت و به کارتون برکت بده.

  3. Avatar for داستایوفسکی داستایوفسکی گفت:

    سلام، میشه بگید چطوری باید قابلیت Break رو فعال کنیم تا PWM ها خاموش شوند؟
    تا جایی که میدونم پایه PB12 هست، اما تنظیمات CubeMX رو نتونستم انجام بدم.

  4. Avatar for محمدرضا محمدرضا گفت:

    آموزش یه طرف
    تجربه ای که میذارید وسط یه طرف
    اینارو چندین روز باید خوند که فهمید اصلا وجود خارجی دارن اما اینجا توی یه صفحه با بیان خوبی ارائه شده. مرسی.

    1. Avatar for elahe elahe گفت:

      ممنون از حمایت و دنبالتون
      لطفا سیسوگ رو به دوستانتون معرفی کنید.

  5. Avatar for رامین رامین گفت:

    خدا قوت مهندس جان .
    کارتون حرف نداره ?‌.
    همچنان منتظر ادامه ی راه هستیم …
    تشکر .

    1. Avatar for Sisoog Os Sisoog Os گفت:

      ممنون از شما

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *