در قسمت هفتم آموزش میکروکنترلر STM8 آموزشها را بهصورت عملی بهکار گرفت و نتیجه را بهصورت پروژه LED چشمکزن مشاهدهکردیم. در این قسمتاز آموزشهای میکروکنترلر STM8 قصد داریم، سیستم کلاک میکروکنترلر CLK را بیان کنیم. با ما همراه باشید.
سیستم کلاک داخلی STM8 به ما این اجازه را میدهد که سرعت عملکرد CPU را متناسب با نیاز خود تنظیم کنیم. تأخیر نرمافزار و توان مصرفی به تنظیمات کلاک سیستم وابسته است.
در میکروکنترلرهای STM8، سه منبع کلاک اصلی CLK وجود دارد. کلاک داخلی سرعت بالا (HSI)، کلاک خارجی سرعت بالا (HSE) و کلاک داخلی کم مصرف (LSI). کلاک داخلی سرعت بالا (HSI) دارای فرکانس نوسان ۱۶مگاهرتز است و یک نوسانگر داخلی RC بادقت خوب است – حدود ۱٪ تحمل در طیف گستردهای از دما. HSE میتواند بهعنوان یک مدار کلاک خارجی، نوسانگر کریستالی با جبران حرارت (TCXO) یا تشدیدکننده کریستال معمولی باشد. میتواند فرکانسهای از ۱ مگاهرتز تا ۲۴مگاهرتز را بپذیرد.
درنهایت، کلاک LSI مبتنیبر اسیلاتور RC داخلی است که عمدتاً برای حالتهای کممصرف و تایمر نظارت مستقل (IWDG) استفاده میشود. این کلاک دارای فرکانس ثابت ۱۲۸کیلوهرتز است و مانند HSE و HSI دقیق نیست. همچنین تقسیمکنندههای کلاک/ پیمایشگرها درنقاط مختلف بهمنظور اندازهگیری کلاکها وجود دارد. بهطورعمده به دو پیمایشگر، پیمایشگر HSI و تقسیمکننده CPU نیاز داریم. Peripherals بهطورمستقیم توسط منبع کلاک اصلی تأمین میشود. بهعلاوه یک پین خروجی برای کلاک (CCO) وجود دارد که فرکانس ساعت را به خروجی میدهد. از این میتوان برای کلاک دیگر میکروها نیز استفادهکرد، برای دیگر آیسیهای منطقی کلاک تولید میکند. همچنین میتواند بهعنوان یک نوسانساز آزاد و یا آزمایشات عملکرد کلاک مورداستفاده قرارگیرد. یک حالت کلاک امنیتی fail-safe وجوددارد که باعث میشود درزمانیکه HSE از کار افتاد بهصورت خودکار HSI شروعبه فعالیتکند. بلوک دیاگرام داخلی آن در زیر نشانداده شدهاست:
اتصالات سخت افزاری
نمونه کد کلاک سیستم CLK
کد زیر نشان میدهد چگونه CPU را بااستفادهاز HSI با کلاک ۲مگاهرتز راهاندازی کنید و کلاک ۵۰۰کیلوهرتز را روی پین CCO بهعنوان خروجی داشتهباشیم. HSE به ۸تقسیم شدهاست، یعنی ۱۶مگاهرتز تقسیمبر ۸برابر ۲مگاهرتز شدهاست. این ۲مگاهرتز منبع کلاک اصلی است و ۴مرتبه دیگر تقسیمشدهاست تا فرکانس ۵۰۰کیلوهرتز را تولید کند.
توجهداشتهباشید پین CCO تنها در برخیاز پین دردسترس است. بهعنوانمثال، در STM8S003F3 این پین تنها در PC4 است. ما باید عملکرد پیشفرض پین PC4 را به حالت خروجی CCO بدهیم.
#include "STM8S.h" #define LED_pin GPIO_PIN_4 #define LED_port GPIOC void setup(void); void clock_setup(void); void GPIO_setup(void); void main(void) { setup(); GPIO_WriteLow(LED_port, LED_pin); while(TRUE) { }; } void setup(void) { clock_setup(); GPIO_setup(); } void clock_setup(void) { CLK_DeInit(); CLK_HSECmd(DISABLE); CLK_LSICmd(DISABLE); CLK_HSICmd(ENABLE); while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == FALSE); CLK_ClockSwitchCmd(ENABLE); CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV8); CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV4); CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_I2C, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_UART1, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_AWU, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_ADC, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER1, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER2, DISABLE); CLK_PeripheralClockConfig(CLK_PERIPHERAL_TIMER4, DISABLE); CLK_CCOConfig(CLK_OUTPUT_CPU); CLK_CCOCmd(ENABLE); while(CLK_GetFlagStatus(CLK_FLAG_CCORDY) == FALSE); } void GPIO_setup(void) { GPIO_DeInit(LED_port); GPIO_Init(LED_port, LED_pin, GPIO_MODE_OUT_OD_HIZ_FAST); }
توضیحات کد
پیکربندی CCO بهصورتزیر است:
CLK_CCOConfig(CLK_OUTPUT_CPU); CLK_CCOCmd(ENABLE); while(CLK_GetFlagStatus(CLK_FLAG_CCORDY) == FALSE);
این خطوط منبع کلاک را انتخاب میکند که پین CCO بهعنوان خروجی خواهدبود. ماژول CCO را فعالکرده و صبر میکند تا آن را تثبیتکند. در اینجا من CCO را برای خروجی CPU انتخابکردم.
در این قسمت درباره کلاک سیستم CLK صحبتکردیم. در قسمت نهم آموزش میکروکنترلر STM8 قصد داریم روی وقفه خارجی تمرکز کند. در ادامه نیز ما را همراهی نمایید.
منبع: سیسوگ