اطلاعیه

Collapse
No announcement yet.

استفاده از اسیلاتور خارجی

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

    استفاده از اسیلاتور خارجی

    سلام.
    من از میکروکنترلر STM32F103RET6 استفاده می کنم. برای برنامه نویسی از کامپایلر keil و کتابخانه CMSIS استفاده کردم. کلاک میکرو را در فایل system_stm32f10x.c بر روی 72MHz تنظیم کردم و برنامه بر روی هدر برد eca که یک کریستال 8MHz دارد در فرکانس 72MHz به خوبی کار می کند (البته ADC دارای نویز زیاد بود). در مدار اصلی یک اسیلاتور 8MHz را جایگزین کریستال 8MHz کردم. وقتی همان برنامه قبلی مربوط به هدر برد را بر روی میکروی مدار جدید (با اسیلاتور خارجی) پروگرام کردم، مدار بدون مشکل کار کرد. با توجه به دیتاشیت میکرو، برای استفاده از اسیلاتور خارجی، بیت های HSEON و HSEBYP در رجیستر RCC.CR باید ست شود در صورتی که در تابع systemInit این دو بیت ریست می شوند و با این حال مدار با اسیلاتور خارجی کار می کند. در ضمن برای آزمایش، این دو بیت را در تابع مذکور ست کردم و برنامه را بر روی هدربرد eca (با کریستال 8MHz) پروگرام کردم که باز هم میکرو به درستی کار کرد. سوال من این است : روش صحیح تنظیم کتابخانه CMSIS برای استفاده از اسیلاتور خارجی به جای کریستال خارجی، چیست؟ همچنین تا آنجایی که من اطلاع دارم تنظیمات پیش فرض کتابخانه بر روی کریستال 8MHz است که ما می توانیم فرکانس کاری را یکی از مقادیر 24، 36، 48، 56 و 72 مگاهرتز انتخاب کنیم.

    #2
    پاسخ : استفاده از اسیلاتور خارجی

    سلام برای تنظیم کریستال خارجی یا اوسیلاتور خارجی میتونی تابع زیر رو در ابتدای برنامه اجرا کنی و دستور بایپس کردن منبع کلاک رو بهش اضاف کن، کد زیر کلاک سیستم رو روی 48 میذاره میتونی به 72 تغییرش بدی، برای مطالب بیشتر میتونی از این پاورپوینت استفاده کنی:
    http://course.sdu.edu.cn/G2S/eWebEditor/uploadfile/20131221125813423.ppt

    کد:
    ErrorStatus  HSEStartUpStatus;
    
    
    void RCC_Configuration(void)
    {
     /*set RCC registers to default values RCC system reset*/
     RCC_DeInit();
    
     /*Enable HSE */
     RCC_HSEConfig(RCC_HSE_ON);
    
     /*Wait till HSE is ready */
     HSEStartUpStatus = RCC_WaitForHSEStartUp();
    
     if(HSEStartUpStatus == SUCCESS)   // SUCCESS
     {
     /*AHB= SYSCLK= 48 MHz, HCLK(AHB clock) = SYSCLK */
      RCC_HCLKConfig(RCC_SYSCLK_Div1); 
     
     /*PCLK2(APB2 clock)= AHB clock/2 = 24 MHz,PCLK2 = HCLK/2 */
      RCC_PCLK2Config(RCC_HCLK_Div2);   
    
    /*PCLK1(APB1 clock)= AHB clock/4=12 MHz, PCLK1 = HCLK/4 */
      RCC_PCLK1Config(RCC_HCLK_Div4); //RCC_HCLK_Div4: APB1 clock = HCLK/4=12MHz
      /* set Flash delay clocks to 2 */
      FLASH_SetLatency(FLASH_Latency_2);
    
      /* Enable Flash Prefetch Buffer*/
      FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    
     /* PLLCLK = 8MHz * 6 = 48 MHz */
      RCC_PLLConfig ( RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); 
    
      /* Enable PLL */ 
      RCC_PLLCmd(ENABLE);
    
      /* Wait till PLL is ready*/
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
      {
      }
    
      /* Select PLL as system clock source */  //Select PLLCLK as SYSCLK
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 
      /*Wait till PLL is used as system clock source */
      while(RCC_GetSYSCLKSource() != 0x08)
      {
      }
     }
      
    /* Enable peripheral clocks --------------------------------------------------*/
     /* GPIOA, GPIOB and SPI1 clock enable */
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |    RCC_APB2Periph_GPIOB |   RCC_APB2Periph_SPI1, ENABLE);
    
     /* Enable GPIOC, GPIOD clock */
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD, ENABLE);
    }

    دیدگاه


      #3
      پاسخ : استفاده از اسیلاتور خارجی

      سلام و تشکر. یک سوال! برای بای پس کردن منبع کلاک (مطابق با چیزی که در manual خواندم)، بیت HSEON و HSEBYP باید set شود. در کدی که شما زحمت کشیدید، من set شدن HSEBYP را ندیدم. لطفا راهنمایی بفرمایید در کدام قسمت عمل بای پس شدن انجام می شود.

      دیدگاه


        #4
        پاسخ : استفاده از اسیلاتور خارجی

        برای بای پس کردن منبع کلاک بجای این کد :
        کد:
        RCC_HSEConfig(RCC_HSE_ON);
        کد زیر رو قرار بدین:
        کد:
        RCC_HSEConfig(RCC_HSE_Bypass);

        دیدگاه

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