اطلاعیه

Collapse
No announcement yet.

لزوم استفاده از تابع SystemInit()

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

    لزوم استفاده از تابع SystemInit()

    سلام دوستان خسته نباشید
    من تو پروژم از تابع SystemInit() استفاده نکردم و به درستی کار میکنه . اما الان که میخوام از مثال eeprom مربوط به کتابخانه استاندارد خود st استفاده بکنم توی اون از این تابع استفاده کرده میخواستم ببینم آیا دلیل خاصی داره که استفاده کرده (مثلا تنظیماتی چیزی رو تغییر میده؟) یا نه میشه باز استفاده نکرد و بدون مشکل از این مثال eeprom استفاده کرد؟

    #2
    پاسخ : لزوم استفاده از تابع SystemInit()

    این تابع رو کاربر مینویسه و ممکنه محتویاتش هر کدی باش، اما معمولا در مثالها از این تابع برای کانفیگ کلاک میکرو استفاده میکنن. اگر قسمت کلاک میکرو رو اینیشیال نکنی سیستم کلاک میکرو با منبع کلاک RC داخلی تغذیه میشه و PLL ها طوری تنظیم میشن که سرعت فرکانس کلاک سیستم 8 مگ باش پس میکرو هم به درستی برای برنامه های ساده مثل GPIO , EEPROM , SPI, I2C کار میکنه. اما برای استفاده از پریفرالهایی مثل USB حتما باید سیستم کلاک بیش از 48 مگ باش.
    با اجرای این تابع کلاک میکرو با کریستال خارجی تامین میشه و میکرو با فرکانس 72 مگ کار میکنه.

    دیدگاه


      #3
      پاسخ : لزوم استفاده از تابع SystemInit()

      بیشتز مواقع در فایل استارت پ این تابع خودش استفاده شده و نیازی به استفاده نیست. اگه نبود باعث تنظیمات پیش فرض میشه
      فيلم آموزشي ميکروکنترلر LPC1768
      فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
      فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
      فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

      دیدگاه


        #4
        پاسخ : لزوم استفاده از تابع SystemInit()

        نوشته اصلی توسط mohammad poorkhalili
        این تابع رو کاربر مینویسه و ممکنه محتویاتش هر کدی باش، اما معمولا در مثالها از این تابع برای کانفیگ کلاک میکرو استفاده میکنن. اگر قسمت کلاک میکرو رو اینیشیال نکنی سیستم کلاک میکرو با منبع کلاک RC داخلی تغذیه میشه و PLL ها طوری تنظیم میشن که سرعت فرکانس کلاک سیستم 8 مگ باش پس میکرو هم به درستی برای برنامه های ساده مثل GPIO , EEPROM , SPI, I2C کار میکنه. اما برای استفاده از پریفرالهایی مثل USB حتما باید سیستم کلاک بیش از 48 مگ باش.
        با اجرای این تابع کلاک میکرو با کریستال خارجی تامین میشه و میکرو با فرکانس 72 مگ کار میکنه.
        خیلی ممنون
        یعنی اگر اجرا نشه حتما فرکانس 8 مگ داخلی استفاده میکنه؟ آخه بعضی از پریفرال ها رو الان ( بدون تابع systeminit) با فرکانس بالاتر از 8 کانفیگ کردم و دارن کار میکنن
        از کجا میشه کلا فرکانس کاری فعلی میکرو رو بدونم؟ یعنی تو کجا الان کانفیگ میشه بدون اون تابع؟
        من از glcd هم استفاده کردم که رفرش شدنش خیلی کنده احتمالا اون هم به این دلیل باشه! خیلی خوب میشه اگه موضوع حل بشه

        اضافه شده در تاریخ :
        نوشته اصلی توسط mzarkoob
        بیشتز مواقع در فایل استارت پ این تابع خودش استفاده شده و نیازی به استفاده نیست. اگه نبود باعث تنظیمات پیش فرض میشه
        ببخشید فایل استارت پ که می فرمایید
        system_stm32f10x.c هست یا startup_stm32f10x_hd.s ؟
        چون تابع systeminit داخل c. هست و کدومشون تو شروع اجرا میشه؟

        دیدگاه


          #5
          پاسخ : لزوم استفاده از تابع SystemInit()

          بیشتز مواقع در فایل استارت پ این تابع خودش استفاده شده و نیازی به استفاده نیست. اگه نبود باعث تنظیمات پیش فرض میشه
          در فایل استارت اپ فکر نکنم کلاک میکرو کانفیگ بشه، میکرو بعد از ریست این رجیستر ها رو به حالت پیش فرض قرار میده.


          از کجا میشه کلا فرکانس کاری فعلی میکرو رو بدونم؟ یعنی تو کجا الان کانفیگ میشه بدون اون تابع؟
          برای اینکه بفهمی میکرو الان با چه کلاکی کار میکنه برنامه رو دیباگ کن و رجیسترهای قسمت RCC رو بخون یا اینکه یکی از تایمر ها رو کانفیگ کن که از لحاظ تئوری با منبع کلاک 72 مگ هر ثانیه یه LED رو روشن خاموش کنه بعد در عمل ببین چه اتفاقی میوفته.

          دیدگاه


            #6
            پاسخ : لزوم استفاده از تابع SystemInit()

            :sad:متاسفانه دیباگر ندارم

            دیدگاه


              #7
              پاسخ : لزوم استفاده از تابع SystemInit()

              پس با چی پروگرام میکنی ؟ با usart ؟
              خب روش دوم رو تست کن.

              دیدگاه


                #8
                پاسخ : لزوم استفاده از تابع SystemInit()

                تابعsysteminit در استارت پ فراخوانی میشه ولی در system_stm32f10x قرار دارد.
                فيلم آموزشي ميکروکنترلر LPC1768
                فيلم آموزشي تکميلي و پيشرفته ميکروکنترلر LPC1768
                فيلم آموزش کاربردی زبان سی در میکروکنترلر ARM
                فیلم آموزش مقدماتی میکروکنترلر LPC1788 به زودی ...

                دیدگاه


                  #9
                  پاسخ : لزوم استفاده از تابع SystemInit()

                  نوشته اصلی توسط na333r
                  سلام دوستان خسته نباشید
                  من تو پروژم از تابع SystemInit() استفاده نکردم و به درستی کار میکنه . اما الان که میخوام از مثال eeprom مربوط به کتابخانه استاندارد خود st استفاده بکنم توی اون از این تابع استفاده کرده میخواستم ببینم آیا دلیل خاصی داره که استفاده کرده (مثلا تنظیماتی چیزی رو تغییر میده؟) یا نه میشه باز استفاده نکرد و بدون مشکل از این مثال eeprom استفاده کرد؟
                  این تابع کلاک و PLL رو تنظیم میکنه و معمولا از طریق فایل startup و در بردار Reset با دستورات اسمبلی زیر فراخونی میشه:

                  کد:
                      LDR   R0, =SystemInit
                      BLX   R0
                  There is nothing so practical as a good theory. — Kurt Lewin, 1951

                  دیدگاه

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