NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 3385 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 5 از 5

موضوع: کتابخانه delay برای stm32f103rbt6

  1. #1
    کاربر فعال saeidhp آواتار ها
    تاریخ عضویت
    Apr 2011
    نام
    سعید
    نوشته ها
    155
    تشکر
    665
    تشکر شده 76 بار در 44 پست

    پیش فرض کتابخانه delay برای stm32f103rbt6

    سلام

    برای انجام کاری به تاخیر در حد میکروثانیه احتیاج داشتم و با کمی جستجو در اینترنت قطعه کدی پیدا کردم که با توجه به دیتاشیت stm32f103rbt6 تغییرات کوچکی دادم که قابل استفاده برای این میکرو شد
    برای خاموش و روشن کردن LED تست کردم و به درستی کار میکنه
    کد:
    #define SYS_CLK 48000000    /* in this example we use SPEED_HIGH = 48 MHz */
    #define DELAY_TIM_FREQUENCY 1000000 /* = 1MHZ -> timer runs in microseconds */
    
    
    /* set TIM4 to run at DELAY_TIM_FREQUENCY */ 
    void delay_init( void ) 
    {
    
      /* Time base configuration */
      TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
      TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); 
      TIM_TimeBaseStructure.TIM_Prescaler = (SYS_CLK / DELAY_TIM_FREQUENCY) - 1;
      TIM_TimeBaseStructure.TIM_Period = UINT16_MAX; 
      TIM_TimeBaseStructure.TIM_ClockDivision = 0;
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
      TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
     
     /* Enable counter */
      TIM_Cmd(TIM4, ENABLE);
    }
    
    /* wait busy loop, microseconds */
    void delay_us( uint16_t uSecs ) 
    {
      uint16_t start = TIM4->CNT;
      /* use 16 bit count wrap around */
      while((uint16_t)(TIM4->CNT - start) <= uSecs);
    }
    این هم برای فعالسازی کلاک تایمر
    کد:
     /* Enable timer clock  - use TIMER4 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    ویرایش توسط saeidhp : 06-09-2012 در ساعت 19:58

  2. کاربران : 5 تشکر کرده اند از شما saeidhp برای ارسال این پست سودمند:


  3. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  4. #2
    کاربر علاقه مند ali_rostami_7 آواتار ها
    تاریخ عضویت
    Oct 2011
    نوشته ها
    91
    تشکر
    295
    تشکر شده 54 بار در 36 پست

    پیش فرض

    با سلام من
    /* Enable timer clock - use TIMER4 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    رو در تابع اینیت گذاشتم .بعد از خط
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    اشکال داره؟اگه بله .کجا باید قرارش بدم؟

  5. #3
    مدير بخش STM32 sadmonew آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    صادق محمدي
    نوشته ها
    2,002
    تشکر
    6,283
    تشکر شده 3,115 بار در 1,408 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ali_rostami_7 نمایش پست ها
    با سلام من
    /* Enable timer clock - use TIMER4 */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    رو در تابع اینیت گذاشتم .بعد از خط
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    اشکال داره؟اگه بله .کجا باید قرارش بدم؟
    سلام مهندس
    درست گذاشتی.
    کد:
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    دستور بالا برای تعریف متغیر TIM_TimeBaseStructure هست.
    _____________________________________
    _____________________________________

  6. تشکرها از این نوشته :


  7. #4
    کاربر علاقه مند ali_rostami_7 آواتار ها
    تاریخ عضویت
    Oct 2011
    نوشته ها
    91
    تشکر
    295
    تشکر شده 54 بار در 36 پست

    پیش فرض

    ممنون مهندس که جواب دادید.نمیدونم چرا کار نمیکنه.اصلا تایمر انگار روشن نمیشه
    من یه فایل delay.c رو به برنامه اضافه کردم که کداش اینه:
    کد:
    #include "stm32f10x.h"
    #include "delay.h"
     
    #define SYS_CLK 36000000    /* in this example we use SPEED_HIGH = 36 MHz */
    #define DELAY_TIM_FREQUENCY 1000000 /* = 1MHZ -> timer runs in microseconds */
    
    /* set TIM4 to run at DELAY_TIM_FREQUENCY */ 
    void delay_init( void ) 
    {
        //    TIM_TimeBaseInitTypeDef TIM_BaseInitStructure; 
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
        
         /* Enable timer clock  - use TIMER4 */
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
    
      /* Time base configuration */
    
      TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); 
      TIM_TimeBaseStructure.TIM_Prescaler = (SYS_CLK / DELAY_TIM_FREQUENCY) - 1;
      TIM_TimeBaseStructure.TIM_Period = UINT16_MAX; 
      TIM_TimeBaseStructure.TIM_ClockDivision = 0;
      TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
      TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
        
     /* Enable counter */
      TIM_Cmd(TIM3, ENABLE);
    }
    
    /* wait busy loop, microseconds */
    void delay_us( uint16_t uSecs ) 
    {
      uint16_t start = TIM3->CNT;
      /* use 16 bit count wrap around */
      while((uint16_t)(TIM3->CNT - start) <= uSecs);
    }
    کداش موردی دارن؟تو یه stm32f10x_conf.h هم تایمر رو از حالت کامنت در آوردم.وارد تابع تاخیر بالا هم میشه ولی تایمر اصلا تکون نمیخوره

  8. #5
    کاربر علاقه مند ali_rostami_7 آواتار ها
    تاریخ عضویت
    Oct 2011
    نوشته ها
    91
    تشکر
    295
    تشکر شده 54 بار در 36 پست

    پیش فرض

    oopsیادم رفته بود که delay_init رو فراخوانی کنم.

موضوعات مشابه

  1. Usb و چگونگي راه اندازي با stm32f103rbt6
    توسط sadmonew در انجمن stm32
    پاسخ: 7
    آخرين نوشته: 23-10-2014, 21:52
  2. مشکل در محاسبه delay درLPC2132
    توسط ah rad در انجمن LPC series (NXP)
    پاسخ: 10
    آخرين نوشته: 28-09-2013, 14:03
  3. مشکل در هدر delay
    توسط wantedboy در انجمن مباحث کلی ARM
    پاسخ: 3
    آخرين نوشته: 02-10-2012, 23:16

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •