۱۴۰۳ مهر ۵, پنجشنبه

برنامه نویسی میکروکنترلر STM32 از ابتدا (From scratch) - تنظیمات کلاک قسمت اول

 

در پست قبل تنظیمات IDE و آرایش دایرکتوری ها و فایلها را دیدیم. در این آموزش با سیستم کلاک میکروکنترلر STM32 و نحوه تنظیم کلاک آشنا میشیم.

سیستم کلاک میکروکنترلر STM32F1xx که در این آموزش به عنوان نمونه ازش استفاده میکنیم بصورت زیر است:


مقدار کریستال متصل به برد ۸ مگاهرتز است. با استفاده از تنظیمات HSE (High-Speed External oscillator) میتوانیم ضرایب مختلف PLL، ضرب کننده های فرکانسی و تقسیم کننده های فرکانسی را برای رسیدن به مقدار فرکانس بهینه هر قسمت از میکروکنترلر تعیین کنیم. در صورتیکه از نوسان ساز داخلی میکرو استفاده کنیم (HSI) امکان استفاده از PLL میسر است ولی دقت آن بسیار کمتر از کریستال یا تشدیدگر سرامیکی است. 
همچنین پایداری حرارتی نوسان ساز RC داخلی بسیار از کریستال خارجی یا رزوناتور سرامیکی کمتر است. با گذر از PLL مقدار خطای فرکانسی احتمالی به نسبت ضریب PLL افزایش می‌یابد و در کاربردهای دقیق مانند پورت USB باعث بروز مشکلات خواهد شد.
در صورت استفاده از نوسانگر داخلی و عدم استفاده از PLL حداکثر فرکانس میکرو به ۸ مگاهرتز (برابر با فرکانس نوسانساز داخلی) محدود خواهد شد. 

تنظیمات واحد RCC میکروکنترلر STM32

RCC چیست؟

پریفرال RCC برای مدیریت کلاک و تنظیم مدار کلاک سیستم استفاده می شود. RCC چندین نوسانگر داخلی و خارجی دارد. آنها به عنوان منابع ساعت برای بلوک های سخت افزاری، به طور مستقیم یا غیرمستقیم، از طریق PLL هایی که امکان دستیابی به فرکانس های بالا را فراهم می کنند، استفاده می شوند.
در حالت استاندارد با تنظیم رجیسترهای واحد RCC میتوان تنظیمات را تغییر داده و به میکروکنترلر اعمال کرد. در این آموزش از توابع HAL برای تنظیم پریفرال RCC استفاده خواهیم کرد.

تنظیم RCC در STM32

با توجه به تصویر فوق برای تنظیم سیستم  کلاک میکروکنترلر STM32 باید تعدادی رجیستر مربوط به ضرایب ضرب‌کننده، PLL و مقسم فرکانس تنظیم بشوند.
ضرایب مورد استفاده به شرح زیر است:

/*

* Clock Configuration parameters

*

* HSE = 8MHz

* PLL_M = 9

* USB prescaler = 1.5

* AHB prescaler = 1

* Cortex prescaler =1 -->72MHz System Clock

*

* APB1 prescaler = 2 --> 36MHz for APB1 peripherals, 72MHz for Timer Clock

* APB2 prescaler = 1 --> 72MHz for APB1 peripherals, 72MHz for Timer Clock

* ADC prescaler = 6 --> 12MHz for ADC Clock

*

*/

  1. فرکانس کلاک برابر 8MHz در نظر گرفته شده است.
  2. با کریستال ۸ مگاهرتزی برای رسیدن به حداکثر فرکانس پشتیبانی شده یعنی ۷۲ مگاهرتز، ضریب PLL باید ۹ تنظیم بشود.
  3. در این صورت با مقسم فرکانس ۱.۵ میتوانیم فرکانس ۴۸ مگاهرتزی مورد نیاز پورت USB را بسازیم. پس مقسم فرکانسی مربوط به USB Prescaler را برابر با 1.5 قرار می‌دهیم.
  4. مقسم فرکانسی مربوط به گذرگاه (BUS) AHB را میتوانیم ۱ قرار بدهیم، در این صورت فرکانس گذرگاه با فرکانس کلاک سیستم (SYSCLK) یکسان می‌شود.
  5. میتوانیم مقسم فرکانسی مربوط به تایمر Cortex را ۱ درنظر بگیریم. در این حالت فرکانس کاری همانند فرکانس سیستم ۷۲مگاهرتز خواهد بود.
  6. گذرگاه APB1 میتواند با حداکثر فرکانس ۳۶مگاهرتز کار کند، در صورتیکه از PLL برای افزایش فرکانس سیستم استفاده کنیم و با فرکانس ۷۲مگاهرتز سیستم را راه اندازی کنیم، باید با استفاده از یک مقسم فرکانسی، فرکانس کاری باس APB1 را به ۳۶ مگاهرتز یا کمتر برسانیم؛ تایمر APB1 میتواند با فرکانس ۷۲ مگاهرتز کار کند، بنابر این یک ضرب کننده به صورت اتوماتیک فرکانس تایمر را به ۲ برابر فرکانس APB1 میرساند. در صورتیکه فرکانس کلاک سیستم کمتر از ۷۲مگاهرتز باشد، میتوان مقسم فرکانسی APB1 Prescaler را برابر با ۱ تنظیم کرد. در این حالت ضرب کننده بصورت اتوماتیک فرکانس تایمر را برابر با فرکانس APB1 قرار میدهد. ( برای تنظیم ضرب کننده رجیستر اختصاصی وجود ندارد و با تنظیم APB1 Prescaler مقسم فرکانسی و ضرب کننده همزمان بارگذاری میشوند.)
  7. گذرگاه و تایمر APB2 میتوانند با حداکثر فرکانس سیستم یعنی ۷۲مگاهرتز کار کنند، برای این منظور نیاز به بار گذاری رجیستر مربوطه با ضریب ۱ داریم داریم. در صورتیکه مقسم فرکانسی APB2 را با ضریبی بجز ۱ بار کنیم، یک ضرب کننده فرکانس تایمر را به ۲ برابر فرکانس باس میرساند. تنظیم ضرب کننده و مقسم فرکانسی بصورت همزمان و توسط یک رجیستر واحد صورت میپذیرد.
  8. در نهایت محدودیت فرکانس نمونه برداری توسط ADC به حداکثر فرکانس نمونه برداری ۱۲ مگاهرتز، باعث تحمیل بارگذاری ضریب ۶ یا بیشتر (۸) در مقسم فرکانسی ADC prescaler به ازای فرکانس سیستم ۷۲مگاهرتز خواهد شد.

هیچ نظری موجود نیست:

ارسال یک نظر