اطلاعیه

Collapse
No announcement yet.

تنظیم کلاک STM32F103RET6 روی کریستال خارجی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    تنظیم کلاک STM32F103RET6 روی کریستال خارجی

    سلام، عیدتون مبارک
    من یک برنامه ساده چشمک زن با ال ای دی و STM32F103RET6 نوشتم و از کریستال خارجی 16 مگاهرتزی استفاده میکنم ولی در عمل نمیدونم چرا تاخیر یک ثانیه ای رو کمتر حساب میکنه، یعنی به جای اینکه هر یک ثانیه چشمک بزنه زودتر چشمک میزنه. تنظیمات خاصی نیاز داره؟
    البته در قسمت OPTION FOR TARGET و در قسمت TARGET فرکانس رو روی 16 مگاهرتز قرار دادم. یعنی مشکل از کجاست؟
    البته اینو بگم که نمیخواام با CUBEMX ;کار کنم چون هر چی مثال بود با این نرم افزار بود
    کد:
    
    
    #include "stm32f10x.h"
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    
    
    void _delay_ms(uint16_t ms);
    
    
    int main(){
        
        GPIO_InitTypeDef GPIO_InitStructure;    
        [FONT=Yekan]    [/FONT]
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    
    
    
        GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        
        while(1){
          GPIO_SetBits(GPIOA, GPIO_Pin_0);
            _delay_ms(1000);
          GPIO_ResetBits(GPIOA, GPIO_Pin_0);
            _delay_ms(1000);
        }
    }
    
    
    void _delay_ms(uint16_t ms){
        uint32_t j=0;
        j = ms * 14400;
        while(j--);
    }
    جدیدترین ویرایش توسط mehran032; ۱۸:۳۰ ۱۳۹۷/۰۱/۰۶.

    #2
    پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

    با عوض کردن کریستال از 16 مگاهرتز به 8 مگاهرتز الان ال ای دی یکمی دیرتر چشمک میزنه!!! یعنی در حدود یک ثانیه و 100 میلی ثانیه!
    چرا دقیق نیست تاخیرها؟

    دیدگاه


      #3
      پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

      نوشته اصلی توسط mehran032 نمایش پست ها
      با عوض کردن کریستال از 16 مگاهرتز به 8 مگاهرتز الان ال ای دی یکمی دیرتر چشمک میزنه!!! یعنی در حدود یک ثانیه و 100 میلی ثانیه!
      چرا دقیق نیست تاخیرها؟
      سلام،
      به احتمال خیلی زیاد، کلاک میکروت درست تنظیم نشده، و اون مقداری که انتظار داری، نیست!
      مثلا اگه دیباگ داری مقادیر مربوط به PLL و سورس کلاک رو چک کن!
      اگه همه درست بودند یه نگاهی هم به این بحث بنداز در همین رابطه است:
      من فکر میکنم بیشتر اونهایی که برای کد نویسی ARM سعی در کار کردن مستقیم با رجیسترها دارند، به دو گروه تقسیم میشوند: یا خیلی مبتدیند (مثل من) و یا خیلی حرفه ایند (مثل شما که میخواهید بنده و بقیه مبتدیهای این زمینه رو راهنمایی کنید، خدا خیرتون بده). ... . اساتید محترم، اگه کسی بخواد برای STM32 توی محیط Keil 5 یه پایه از یه پورت رو
      ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙

      دیدگاه


        #4
        پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

        نوشته اصلی توسط ubub نمایش پست ها
        سلام،
        به احتمال خیلی زیاد، کلاک میکروت درست تنظیم نشده، و اون مقداری که انتظار داری، نیست!
        مثلا اگه دیباگ داری مقادیر مربوط به PLL و سورس کلاک رو چک کن!
        اگه همه درست بودند یه نگاهی هم به این بحث بنداز در همین رابطه است:
        https://www.eca.ir/forums/thread79018.html#post667142
        سلام، ممنون. بله دیباگر دارم، ببخشید من اولین بار هستش که دارم با stm کار میکنم، از کجا باید این چک رو انجام بدم؟ مقادیر pll در کدوم فایل و هدر قرار دارند؟

        دیدگاه


          #5
          پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

          یک سوال دیگه که به نظرتون اصلا اون تابع DELAY درسته و مقدار 14400 از کجا اومده؟

          دیدگاه


            #6
            پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

            نوشته اصلی توسط mehran032 نمایش پست ها
            یک سوال دیگه که به نظرتون اصلا اون تابع DELAY درسته و مقدار 14400 از کجا اومده؟
            کسی که تابع رو نوشته، اومده با توجه به کلاک پردازنده، از مدت زمان لازم برای اجرای خطِ
            while(j--);////////////////////////delay
            یه برآوردی کرده و دیده که اگه مثلا 14400 بار این خط تکرار بشه، زمان 1 میلی ثانیه رو ایجاد میکنه!
            بعد اون آرگومانی رو که به عنوان تعداد میلی ثانیه ها دریافت کرده در این مقدار ضرب میکنه و تأخیر نهایی رو ایجاد میکنه!
            که البته فقط با همون کلاکی که نویسنده تابع تنظیم کرده بوده، دقیق جواب میده!
            ... .
            راجع به دیباگر، هم باید بگی که با کدوم IDE کار میکنی، من فقط با Keil کار کردم!

            ◙◙◙◙◙ میخوام به دوستان یه کتاب معرفی کنم! وقت کردید، بخونید - اسمش هست قرآن، سال نشر 10، نویسنده: خدا . ◙◙◙◙◙

            دیدگاه


              #7
              پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

              نوشته اصلی توسط ubub نمایش پست ها
              کسی که تابع رو نوشته، اومده با توجه به کلاک پردازنده، از مدت زمان لازم برای اجرای خطِ
              while(j--);////////////////////////delay
              یه برآوردی کرده و دیده که اگه مثلا 14400 بار این خط تکرار بشه، زمان 1 میلی ثانیه رو ایجاد میکنه!
              بعد اون آرگومانی رو که به عنوان تعداد میلی ثانیه ها دریافت کرده در این مقدار ضرب میکنه و تأخیر نهایی رو ایجاد میکنه!
              که البته فقط با همون کلاکی که نویسنده تابع تنظیم کرده بوده، دقیق جواب میده!
              ... .
              راجع به دیباگر، هم باید بگی که با کدوم IDE کار میکنی، من فقط با Keil کار کردم!

              ممنونم، بله منم با keil کار میکنم، ممنون میشم بهم کمک کنید که چطور اون تنظیماتی که گفتین رو انجام بدم

              دیدگاه


                #8
                پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

                سلام
                شما نه تنظیمات کلاک Core رو ست کردین نه فرکانس باس ها و همچنین نه PLL ها رو
                پیشنهاد من استفاده از CUBEMX برای دیدن چگونگی پخش سیگنال کلاک در کل تراشه هست و سپس با دستورات CMSIS مربوط به کتابخانه RCC کلاک ها رو ست کنین.
                هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

                دیدگاه


                  #9
                  پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

                  سلام اون 14400 برای اینکه فرکانس شما 72 مگا هرتز هست یعنی 72میلیون کلاک برابر میشود با یک ثانیه پس برای یک میلی ثانیه (یک هزارم ثانیه) میشود 72 هزار کلاک. در نتیجه درون تابع دیلی که تعریف میکنیم باید برای هر میلی ثانیه 72 هزار کلاک بگذرد و از آنجا که هر بار اجرای حلقه while 5 کلاک زمان میبرد پس از تقسیم عدد 72000/5داریم = 14400
                  و در مورد تنظیمات کلاک اینکه شما باید کریستا خارجی رو فعال کنید و در صورت استفاده از pll آن را فعال کنید که تابعش رو براتون اینجا میذارم این رو به برنامتون اضافه کنید. http://s8.picofile.com/file/8322578384/RCC.rar.html

                  دیدگاه


                    #10
                    پاسخ : تنظیم کلاک STM32F103RET6 روی کریستال خارجی

                    نوشته اصلی توسط baby_1 نمایش پست ها
                    سلام
                    شما نه تنظیمات کلاک Core رو ست کردین نه فرکانس باس ها و همچنین نه PLL ها رو
                    پیشنهاد من استفاده از CUBEMX برای دیدن چگونگی پخش سیگنال کلاک در کل تراشه هست و سپس با دستورات CMSIS مربوط به کتابخانه RCC کلاک ها رو ست کنین.
                    سلام، بله نمیدوم باید در کدوم قسمت این تنظیمات رو انجام بدم، با CUBEMX به راحتی میتونم تنظیم کنم و همه چی درسته ولی نمیخوام به دلایلی از CUBEMX استفاده کنم چون بعدا برام محدودیت ایجاد میشه

                    دلیل: ادغام دو پست برای جلوگیری از اسپم

                    نوشته اصلی توسط mousa1994 نمایش پست ها
                    سلام اون 14400 برای اینکه فرکانس شما 72 مگا هرتز هست یعنی 72میلیون کلاک برابر میشود با یک ثانیه پس برای یک میلی ثانیه (یک هزارم ثانیه) میشود 72 هزار کلاک. در نتیجه درون تابع دیلی که تعریف میکنیم باید برای هر میلی ثانیه 72 هزار کلاک بگذرد و از آنجا که هر بار اجرای حلقه while 5 کلاک زمان میبرد پس از تقسیم عدد 72000/5داریم = 14400
                    و در مورد تنظیمات کلاک اینکه شما باید کریستا خارجی رو فعال کنید و در صورت استفاده از pll آن را فعال کنید که تابعش رو براتون اینجا میذارم این رو به برنامتون اضافه کنید. http://s8.picofile.com/file/8322578384/RCC.rar.html
                    سلام، ممنون. البته این تابع رو اضافه کردم ولی تغییری ایجاد نمیشه، البته با تغییر مقدار RCC_PLLMul_9 به مقدار 8 یا 7 یا 10 سرعت چشمک زدن تغییر میکنه ولی هیچ کدوم یک ثانیه فیکس نمیشه

                    دیدگاه

                    لطفا صبر کنید...
                    X