ARM, STM, STM8, آموزش, توصیه شده, مقاله

قسمت هشتم : کلاک سیستم (CLK)

سیسوگ در قسمت‌ هفتم  آموزش  میکروکنترلر STM8 آموزش ها را به صورت عملی به کار گرفت و نتیجه را به صورت پروژه LED چشمک‌زن مشاهده کردیم. در این قسمت از آموزش های میکروکنترلر STM8 قصد دارد، سیستم کلاک میکروکنترلر CLK را بیان کند. با سیسوگ همراه باشید.

سیستم کلاک داخلی STM8 به ما این اجازه را می‌دهد که سرعت عملکرد CPU را متناسب با نیاز خود تنظیم کنیم. تأخیر نرم‌افزار و توان مصرفی به تنظیمات کلاک سیستم وابسته است.

در میکروکنترلرهای STM8، سه منبع کلاک اصلی CLK وجود دارد. کلاک داخلی سرعت بالا (HSI)، کلاک خارجی سرعت بالا (HSE) و کلاک داخلی کم مصرف (LSI). کلاک داخلی سرعت بالا (HSI)  دارای فرکانس نوسان 16 مگاهرتز است و یک نوسانگر داخلی RC با دقت خوب است – حدود 1٪ تحمل در طیف گسترده‌ای از دما. HSE می‌تواند به عنوان یک مدار کلاک خارجی، نوسانگر کریستالی با جبران حرارت (TCXO) یا تشدید کننده کریستال معمولی باشد. می‌تواند فرکانس‌های از 1  مگاهرتز تا 24 مگاهرتز را بپذیرد. در نهایت، کلاک LSI مبتنی بر اسیلاتور RC داخلی است که عمدتاً برای حالت‌های کم مصرف و تایمر نظارت مستقل (IWDG) استفاده می‌شود. این کلاک دارای فرکانس ثابت 128 کیلوهرتز است و مانند HSE و HSI دقیق نیست. هم‌چنین تقسیم کننده‌های کلاک/ پیمایشگرها در نقاط مختلف به منظور اندازه‌گیری کلاک‌ها وجود دارد. به طور عمده به دو پیمایشگر، پیمایشگر HSI و تقسیم کننده CPU نیاز داریم. Peripherals به طور مستقیم توسط منبع کلاک اصلی تأمین می‌شود. به علاوه یک پین خروجی برای کلاک  (CCO) وجود دارد که فرکانس ساعت را به خروجی می‌دهد. از این می‌توان برای کلاک دیگر میکروها نیز استفاده کرد، برای دیگر آی سی‌های منطقی کلاک تولید می‌کند. هم‌چنین می‌تواند به عنوان یک نوسان‌ساز آزاد و یا آزمایشات عملکرد کلاک مورد استفاده قرار گیرد. یک حالت کلاک امنیتی fail-safe وجود دارد که باعث می‌شود در زمانی که HSE از کار افتاد به صورت خودکار HSI شروع به فعالیت کند. بلوک دیاگرام داخلی آن در زیر نشان داده شده است:

 

بلوک دیاگرام کلاک امنیتی

 

بلوک داخلی کلاک امنیتی

 

اتصالات سخت افزاری

اتصالات سخت افزاری

نمونه کد کلاک سیستم CLK

کد زیر نشان می‌دهد چگونه CPU را با استفاده از HSI با کلاک 2 مگاهرتز راه اندازی کنید و کلاک 500 کیلو‌هرتز را روی پین CCO به عنوان خروجی داشته باشیم. HSE به 8 تقسیم شده است، یعنی 16 مگاهرتز تقسیم بر 8 برابر 2 مگاهرتز شده است. این 2 مگاهرتز منبع کلاک اصلی است و 4 مرتبه دیگر تقسیم شده است تا فرکانس 500 کیلوهرتز را تولید کند.

توجه داشته باشید پین CCO تنها در برخی از پین در دسترس است. به عنوان مثال، در STM8S003F3 این پین تنها در PC4 است. ما باید عملکرد پیش فرض پین PC4 را به حالت خروجی CCO بدهیم.

توضیحات کد

پیکربندی CCO به صورت زیر است:

 

 

این خطوط منبع کلاک را انتخاب می کند که پین CCO به عنوان خروجی خواهد بود. ماژول CCO را فعال کرده و صبر می کند تا آن را تثبیت کند. در اینجا من CCO را برای خروجی CPU انتخاب کردم.

در این قسمت درباره کلاک سیستم CLK صحبت کردیم. در قسمت نهم آموزش میکروکنترلر STM8 سیسوگ قصد دارد روی وقفه خارجی تمرکز کند. در ادامه نیز سیسوگ را همراهی نمایید.

 

منبع

 

مطالب مرتبط

 

 

 

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

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

نوشته های مشابه

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

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

14 دیدگاه در “قسمت هشتم : کلاک سیستم (CLK)

  1. محمد گفت:

    سلام خسته نباشید
    ممنون از آموزش های خوبتون
    مفهوم دو خط زیر چیه و چه ورودی هایی میگیره؟
    CLK_ClockSwitchCmd(ENABLE);
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI,
    DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);

    1. زئوس Zeus زئوس Zeus گفت:

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

  2. حسین گفت:

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

    1. زئوس Zeus زئوس Zeus گفت:

      وارد جزییات بیش از حد شدن هم میتونه خسته کننده باشه
      البته من موافق شما هستم که باید جزییات کامل باشه ولی واقعا با محدودیت زمانی فراوانی که وجود داره کار خیلی سختی هست

  3. مهدی گفت:

    با سلام و تشکر از بابت زحماتی که در ترجمه این مطالب میکشید. در دنیای امروز و بخصوص برنامه نویسی لازم هست که زبان انگلیسی تقویت شود و برنامه نویس واقعا بدون زبان انگلیسی به مشکل خواهد خورد. ممنون میشم اگه نام سایت http://embedded-lab.com رو که مرجع بیشتر مطالب این بخش از آموزش هست رو در ابتدای آموزش ذکر بکنید تا آرام آرام برنامه نویسها ماهیگیری را یاد بگیرند .فقط ماهی ندید هر از گاهی ماهی گیری هم ببرید.

    1. Sisoog Os Sisoog Os گفت:

      سلام دوست عزیز
      منبعی که فرمودید پایین مطلب از زمان انتشار قرار گرفته , و ما در سیسوگ سعی کردیم تا بحال مطلبی بدون ارائه منبع قرار ندادیم این موضوع هم بحث فنی هست و هم اخلاقی
      و خیلی از مطالبی که شما منبعی نمیبنید توسط مولف نوشته شده
      ممنون بابت حساسیت و یاداوری شما

  4. محمد گفت:

    سلام
    من کار با میکرو رو تازه شروع کردم
    لطفا اختصار هایی که نوشته می شه رو معنیشون (کاملشون)رو هم بزارین
    مثلا cco مخفف چیه ؟
    یا داخل کدها CLK_ClockSwitchCmd
    Cmd مخفف چیه؟!
    یا اگه راهی هست که خودمون پیدا کنیم که بهتره.
    با تشکر

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز – تا جای ممکن این کار و انجام میدیم
      برای پیدا کردن عبارت کامل میتونید به یوزر منوال آیسی مراجعه کنید مثلا برای cco توضیح زیر رو نوشته
      These devices have internal and external clock source inputs and one output clock (CCO).
      Cmd مخفف کامند یا دستور است.
      خواهش میکنم

  5. hossein گفت:

    سلام
    ببخشید من یه کتابخونه برای ds18b20 پیدا کردم که داخلشاز کتابخونه delay استفاده شده ولی من کتابخونه ی delay نتونستم پیدا کنم لطفا راهنمایی کنید
    ممنون
    http://embedded-lab.com/blog/stm8-microcontrollers-final-chapters/5/

    1. زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      برای ایجاد تاخیر دو راه وجود داره راه اول که بیشتر مرسوم هست استفاد از حلقه است چیزی مثل کد زیر
      for(i=0;i<10000;i++)
      ;

      و راه دوم که برای ایجاد تاخیر دقیق بیشتر مورد استفاده قرار میگره ؛ استفاده از تایمر هست که میتونید به آموزش تایمر همین بخش مراجعه کنید.

  6. Winiston ZZZ Winiston ZZZ گفت:

    باسلام
    حتما نیاز هست که () CLK_PeripheralClockConfig مربوط به بخش های دیگر را مثل i2c غیر فعال نماییم ؟

    1. زئوس Zeus زئوس Zeus گفت:

      فکر میکنم بشکل پیش فرض غیرفعال باشن قسمت های مختلف ؛ تنها لازمه اون قسمت هایی که لازم دارید رو فعال کنید.

  7. Hossein گفت:

    توضیحات قسمت کلاک خیلی ناقص هستند.
    لطفا دو قسمت مهم کلاک داخلی و کلاک خارجی و نحوه فعال کردن هر کدام رو توضیح بدهید.
    این دو بخش مهم تر از مطالب بالا هستند

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