اطلاعیه

Collapse
No announcement yet.

مقدمه ای بر میکروکنترلر های stm32

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

    #16
    پاسخ : مقدمه ای بر میکروکنترلر های stm32

    در عمل ،من با فرکانس 56Mhz و چند تا از پریفرال ها جریان حدود40 تا 50 میلی آمپر مصرف می شه.
    می بینیم و نادیده می گیریم!

    دیدگاه


      #17
      پاسخ : مقدمه ای بر میکروکنترلر های stm32

      ممنون از مطالب خوبتون!
      خب به نظرم اگه یه تاپیکی هم واسه آموزش یکی از اساتید بزنن خیلی خوبه!
      کم کم پروژه های مختلف انجام داده بشه و اینجا به اشتراک بذارن همگی تا همه از اطلاعات هم استفاده کنیم!

      «پشتکار» «پشتکار» «پشتکار»

      دیدگاه


        #18
        پاسخ : مقدمه ای بر میکروکنترلر های stm32

        به نظر من اگر درباره معماری این خانواده یک کمی مطالعه بشه برنامه نویسی و توسعه آن بهتر به نتیجه می رسه
        این که تراشه ما چه قابلیت هایی دارد و برنامه نویسی آن با AVR چه شباهت هایی دارد و برای کاربرد مورد نظر خودمان کدام تراشه را از این خانواده استفاده کنیم و منابع کلاکی که توسط pll ها می توانند تامین شوند همه از نکاتی است که در عمل زیاد با آن مواجه می شویم .
        من در زیر یک دیاگرام از USER MANUAL تراشه stm32f10x آورده ام :

        با توجه به شکل مشاهده می شود که هسته پردازنده که CORTEX-M3 است BUS هایی را به مدیریت BUS سیستم متصل کرده است .
        ICODE وظیفه دارد BUS دستورالعمل هسته CORTEX-M3 را به واسط دستورالعمل حافظه FLASH سیستم متصل کند .
        DCODE وظیفه دارد واحد DCODE هسته CORTEX-M3 را که انتقال داده هایی از قبیل دسترسی به DEBUG را بر عهده دارد به واسط داده ای حافظه FLASH سیستم وصل کند .
        System BUS وظیفه دارد BUS سیستم هسته CORTEX-M3 را به BUS matrix تراشه وصل کند تا از آنجا بتوان در اختیار قرار گرفتن توسط CORE تراشه یا DMA تراشه را با آن مدیریت کرد .
        DMA BUS نیز وظیفه دارد تا واسط AHB Master را به BUS Matrix وصل کند تا ارتباط بین CPU DCODE و DMA را با SRAM و FLASH و جانبی های سیستم را مدیریت کند .
        BUS Matrix نیز وظیفه دارد تا ارتباط بین MASTER ها را با SLAVE ها مدیریت کند :
        MASTER ها (CPU DCode, System bus, DMA1 و DMA2 ) هستند که ورودی های این ماتریس مدیر می باشند و SLAVE ها نیز FLITF, SRAM, FSMC و AHB2APB bridges هستند که خروجی های این ماتریس هستند .
        AHB2APB bridges وظیفه دارند تا پلی بین AHB به APB1 و APB2 برقرار کنند .
        APB1 به کلاک 36 مگا هرتز محدود می شود ولی APB2 می تواند تا حداکثر کلاک موجود در سیستم خود را برساند .قبل از استفاده از هر جانبی تراشه ، شما باید کلاک آن را توسط رجیستر هایی که با این منابع کلاک در ارتباطند تنظیم کنید . این رجیستر ها عبارتند از RCC_AHBENR و RCC_APB2ENR و RCC_APB1ENR

        دیدگاه


          #19
          پاسخ : مقدمه ای بر میکروکنترلر های stm32

          حافظه embedded flash :
          برای تراشه های stm32 اگر XL-Density باشند 1Mbyte و برای غیر آن تا حداکثر 512Kbyte می توانند حافظه embedded flash داشته باشند .
          -این حافظه به دو بلوک کلی Main block و Information block تقسیم می شوند :
          برای تراشه های Medium-Density این Main block به 16Kbyte * 64 bit می رسد که به 128 page یک Kbyte تقسیم می شود و Information block به 258*64bits می رسد .
          -واحد FLITF که واسط حافظه Flash با هسته میکروکنترلر است ویژگی های زیر را دارا می باشد :
          خواندن توسط بافر prefetch که دو تا word است که هرکدام 64 بیتی هستند .
          بارگذار option byte
          عملیات نوشتن و پاک کردن flash
          دارای محافظت Read و write

          دسترسی به داده ها و انجام دستورالعمل ها در حافظه flash در AHB BUS انجام می شود .
          بلوک prefetch که برای برای fetch کردن دستورالعمل ها به کار می رود در ICODE BUS قرار دارد .
          مدیریت انتقال داده ها و اینکه کدام دستورالعمل اجرا شود در واسط flash انجام می شود و اولویت با بخش دسترسی به داده هاست که در DCODE BUS قرار دارد.
          یک پارامتری به نام wait state تعریف می شود که نسبت پریود کلاک سیستم را به زمان دسترسی حافظه flash نشان می دهد . این پارامتر در برگه اطلاعاتی ARM ها معمولا آورده می شود :
          zero wait state, if 0 < SYSCLK ≤ 24 MHz
          one wait state, if 24 MHz < SYSCLK ≤ 48 MHz
          two wait states, if 48 MHz < SYSCLK ≤ 72 MHz
          برای نوشتن و پاک کردن در حافظه FLASH باید کلاک داخلی (HSI ) فعال باشد و این حافظه می تواند در یک زمان 16 بیت برنامه ریزی شود .
          پاک کردن در حافظه FLASH می تواند به صورت PAGE به PAGE و یا به صورت کلی انجام شود .
          برای اطمینان از اینکه در نوشتن و پاک کردن دچار over-programming نمی شویم کلاک این دو بخش با یک کلاک ثابت تامین می شود .
          در پایان پروسه نوشتن و پاک کردن حافظه FLASH یک وقفه می تواند ایجاد شود . این وقفه می تواند به منظور خروج از مود WFI که مود نوشتن و پاک کردن است به کار رود . این به شرطی است که کلاک قسمت FLITF را فعال کرده باشیم .
          رجیستر FLASH_ACR برای فعال و غیر فعال کردن Prefetch و مدیریت زمان دسترسی به حافظه FLASH بر مبنای کلاک CPU به کار می رود .


          دیدگاه


            #20
            پاسخ : مقدمه ای بر میکروکنترلر های stm32

            پیکر بندی boot
            سه روش برای boot کردن وجود دارد که کاربر با تنظیم 2 پایه boot0 و boot1 می تواند به آنها دست یابد :

            embedded boot loader در system memory قرار داده شده است و توسط کارخانه ST در درون تراشه قرار داده شده است .این امکان به کاربر این اجازه را می دهد تا حافظه flash میکروکنترلر را از طریق ارتباط سریال برنامه ریزی کند .
            در میکروکنترلر های STM32 که در رده low و medium و high-density قرار دارند از طریق USART1 این کار صورت می پذیرد .

            دیدگاه


              #21
              پاسخ : مقدمه ای بر میکروکنترلر های stm32

              مود های کم مصرف در stm32
              میکروکنترلر های stm32 زمانی که system or power reset می شوند به صورت پیش فرض به مود run وارد می شوند . مود های کم مصرف برای کاهش مصرف cpu زمانی که احتیاج به آن نیست طراحی شده اند ، برای مثال انتظار برای وقوع یک رخداد خارجی .
              این بر عهده برنامه نویس است تا بین مصرف توان پایین ، زمان start up کم و منابع wake up قابل دسترس ، تطبیق ایجاد کند .
              میکروکنترلر های stm32 دارای 3 مود کم مصرف می باشند :
              1 . مود sleep که کلاک cpu را غیر فعال می کند ولی جانبی هایی که وابسته به هسته cortex هستند مثل nvic و systick و ... را فعال نگه می دارد
              2. مود stop ، همه کلاک ها متوقف شده اند .
              3. مود standby
              علاوه بر مود های بالا ، مصرف توان در مود run نیز توسط اعمال زیر کاهش پیدا کند :
              1 .کم کردن کلاک سیستم
              2 .خاموش و روشن کردن کلاک جانبی ها زمانی که مورد احتیاج هستند یا نیستند .
              در مود RUN سرعت کلاک های سیستم مثل SYSCLK ، HCLK ، PCLK1 و PCLK2 می توانند با برنامه ریزی رجیستر های prescaler شان کاهش پیدا کنند . برای تنظیم این ویژگی ها به رجیستر RCC_CFGR مراجعه کنید .

              SLEEP MODE :
              مود sleep دارای دو حالت Sleep-now و Sleep-on-exit است

              STOP MODE :
              مود STOP بر مبنای مود deepsleep در cortex-m3 است و با راهگشایی کلاک های جانبی ها همراه است .همه کلاک های مبتنی بر ولتاژ 1.8 ولت و نیز PLL و HSI و HSE غیر فعالند و SRAM و محتویات رجیستر ها در همان حالت فعلی شان save می شوند و وضعیت همه IO ها در حالت خودشان باقی می ماند .
              اگر در حال برنامه ریزی flash باشیم ورود به stop تا زمانی که برنامه ریزی خاتمه پذیرد به تاخیر می افتد .
              اگر در حال دسترسی از طریق APB باشیم ورود به stop تا زمان خاتمه یافتن دسترسی به تاخیر می افتد .
              وقتی از مود stop توسط وقفه یا wake up خارج می شویم کلاک سیستم شروع به استفاده از HSI می کند .

              STANDBY MODE :
              این مود اجازه دستیابی به کمترین توان مصرفی را می دهد .این مود بر اساس deepsleep در هسته cortex-m3 است و رگولاتور ولتاژ را غیر فعال می کند . ادوات 1.8 ولت نیز خاموش می شوند .PLL وHSI وHSE نیز خاموش می شوند . SRAM و رجیستر های دیگر نیز داده هایشان از بین می رود به جز رجیستر Backup و تنظیم جریان برق standby .
              در مود standby ویزگی های زیر می توانند برنامه ریزی شوند .
              IWDG
              LSI RC
              LSE OSC
              RTC
              بعد از خروج از standby اجرای برنامه به همان شیوه بعد از ریست شدن به کار می پردازد .
              بیت SBF در PWR_CSR نشان می دهد که MCU در standby است یا نه.
              در standby همه IO ها در وضعیت high impedance قرار می گیرند به جز سه پایه زیر :
              NRST Tamper pin ,Wkup ,pin
              AWU :
              با RTC می توان MCU را از مود های low power خارج کرد . RTC برای خارج کردن MCU از مود های stop یا standby در فاصله های زمانی مشخص می تواند برنامه ریزی شود .

              دیدگاه


                #22
                پاسخ : مقدمه ای بر میکروکنترلر های stm32

                توضیحی درباره RTC
                در RTC هایی که استفاده می شود نکته مهم نگهداری روز و ماه و سال و ساعت و دقیقه و ثانیه است و البته محاسبه سال کبیسه . آی سی ds1307 از شرکت دالاس شاید از بهترین گزینه ها در این زمینه باشد که با 5 ولت کار می کند و لز طریق ارتباط i2c می تواند با میکرو ارتباط برقرار کند و داده های زمانی را منتقل کند .برای راه اندازی منبع کلاک میکرو برای RTC باید فرکانس 32768 را به وجود آوریم که در AVR با کریستال ساعت می توانیم آن را به وجود آوریم . در stm32 منابع کلاک مختلف باعث شده تا RTC بتواند کلاک خود را از چند منبع دریافت کند که این باید در برنامه تنظیم شود که اگر منبع کلاک اول از کار افتاد بلا فاصله به منبع دوم برو و اگر منبع دوم نیز ازکار افتاد به منبع سوم برو .
                داده ها در ds1307 به صورت سریال به رجیستر های تعریف شده اش در کتابخانه codevisionAVR منتقل می شود و قابل استفاده است .
                در stm32 یک شمارنده 32 بیتی وجود دارد که از میزانی که برای آن set می کنیم شروع به شمارش می کند و با زمانی که در رجیستر prescaler آن تعریف می کنیم میزانش اضافه می شود .
                تاریخ و ساعت با تحلیل شمارنده ایجاد می شود (با برنامه نویسی می توان به آن دست یافت)
                ضمنا وقفه RTC یک وقفه ای است که هر ثانیه اتفاق می افتد و در زمینه multiitasking سودمند است .

                دیدگاه


                  #23
                  پاسخ : مقدمه ای بر میکروکنترلر های stm32

                  سلام خدمت دوستان گرامی و ممنون از اطلاعات خوبی که قرار دادید
                  من یک سوال دارم اونم اینه که چرا میکرو های ST نسبت به میکروهای NXP,ATMEL ارزان تر هستند، دلیل خاصی داره ؟ آیا اونها قوی تر هستند یا اینکه دلیل دیگری وجود داره؟ :biggrin:
                  I'm Very Question and I have more Question,Please Answer All of my Questions


                  [img width=156 height=100]http://uploadtak.com/images/u3536_555_Timer_as_Astable.gif[/img]

                  دیدگاه


                    #24
                    پاسخ : مقدمه ای بر میکروکنترلر های stm32

                    ویژگی هایی مثل peripheral هایی که شرکت های مختلف روی IC هایشان می گذارند ، تحمل جریان های بالاتر در پایه های آنها و در نتیجه داغ نکردن IC و پوشش دادن بهتر مود های کم مصرف شاید دلیل آن باشد .
                    البته به نظر خیلی ها مهمترین دلیل آن است که ST یک شرکت اروپایی است و در ایران نماینده فروش نیز دارد و مثل ATMEL که آمریکایی است چند دست نمی گردد (چینی هستند اما تحت لیسانس کشور متبوعشان کار می کنند)

                    دیدگاه


                      #25
                      پاسخ : مقدمه ای بر میکروکنترلر های stm32

                      درباره قسمت NVIC
                      برای مدیریت بردارهای وقفه در arm یک واحدی در هسته آن تعریف شده است که سطوح اولویت وقفه ها را اعم از "اولویت" و "زیر اولویت" تعیین می کند و نوع وقفه را با توجه به شماره بردار آن و نام روتین تعریف شده در برنامه مشخص می کند . این واحد NVIC است که مخفف nested vectored interrupt controller یا کنترلر بردار های وقفه ای تودرتو می باشد . این واحد در زمانی که چندین وقفه با اولویت و زیر اولویت های مختلف تعیین می کند که کدام وقفه اجرا شود . وقفه ها در ARM به دو دسته interrupt و exception تقسیم می شوند.exception شاید کاربردش در سیستم هایی باشد که احساس خطر در زمینه از کار افتادن میکرو وا می دارد تا عملیاتی را در روتین آن انجام دهیم .intgerrupt ها نیز اعم از تایمر و watchdog و سریال و ... می توانند قدرت یک developer را در طراحی سیستمش بالا ببرند . یک ویژگی در stm32 ها وجود دارند که وقفه ها در آن به صورت low latency انجام می شوند یعنی تاخیر در اجرا بسیار کم است . در stm32 یک سری نکات برای کار در user manual اش آورده شده و نکات کاملتر در flash programming manual آمده است .

                      دیدگاه


                        #26
                        پاسخ : مقدمه ای بر میکروکنترلر های stm32

                        KEIL و error ها و warning ها
                        برای کار با KEIL که با C syntax کار می کند لیست error ها و warning ها توسط شرکت ارائه دهنده اش منتشر شده است . نکته ای که باید توجه کرد این است که خود KEIL خطا ها و هشدار هایش را سطح بندی می کند و اگر فقط هشدار داشته باشیم با make کردن دوباره ، هشدار ها نیز از میان می روند . هشدار ها و خطا ها شماره گذاری شده اند و هرکدام معنای مخصوصی دارند . البته خطای کامپایلری با خطای دیباگری متفاوت است مثلا :
                        no cortex-m device found in the toolchain
                        یک خطای دیباگری است و معنی آن این است که برد STM32 ما تغذیه اش وصل نیست و در نتیجه دیباگر ، هسته میکرو را شناسایی نمی کند .این خطا در موقع دیباگ کردن به وجود می آید و در یک DIALOG BOX نشان داده می شود
                        خطای کامپایلری در پنجره مخصوص آن نمایش می یابد :
                        could not open source file xxx.h :5
                        این خطا به معنی آن است که کامپایلر ، فایل کتابخانه معرفی شده توسط شما را پیدا نمی کند و باید به مسیر آدرس دهی آن بروید و آن را تصحیح یا ایجاد کنید
                        25: quoted string should contain at least one character
                        یعنی شما یک متغیری تعریف کرده اید ولی مقدار اولیه آن را به صورت ' ' داده اید که نیاز دارد تا حداقل یک کاراکتر داخل آن قرار دهید .
                        برای دسترسی به این فایل به آدرس زیر مراجعه کنید :
                        infocenter.arm.com/help/.../DUI0496E_arm_errors_reference.pdf

                        دیدگاه


                          #27
                          پاسخ : مقدمه ای بر میکروکنترلر های stm32

                          درباره USART میکروکنترلر stm32
                          میکروکنترلر stm32f103rbt6 دارای 3 USART و 2 UART است .در همین جا باید اشاره کرد که پایه های اختصاص داده شده به هرکدام از USART ها که در دیتاشیت آمده است قابلیت remap شدن به پایه های دیگری را دارا می باشند که در بعضی کاربرد ها ممکن است مورد نیاز واقع شود .برای راه اندازی هرکدام از USART ها باید مطالب زیر را تواما در نظر داشت :
                          1.تنظیم پایه های مورد نیاز برای USART به صورتی که بتوان از آن کاربرد متناسب با آن را استخراج کرد (چون هر پایه می تواند ویژگی های متفاوت داشته باشد باید ویژگی USART در ابتدا در GPIO configuration اش تنظیم شود)
                          2.روشن کردن کلاک پریفرال های مورد استفاده اعم از پورتی که USART در آن تعریف شده است و خود USART .
                          3.تنظیم ویژگی های USART مورد استفاده اعم از باودریت و بیت توقف و ...
                          4.تنظیم ویژگی های بردار وقفه USART اگر به کار رفته بود
                          5. فعال سازی وقفه USART اگر استفاده شده بود و خود USART
                          6.تعریف توابعی که با data register در USART مورد نظر بتوانند کار کنند و داده بفرستند و بگیرند
                          7.بدنه اصلی برنامه تان که شامل کدهای استفاده از ارتباط سریال است .
                          با USART در STM32 می توان با خیلی از DEVICE های خارجی ارتباط برقرار کرد که از جمله آن می توان به کارت هوشمند و مادون قرمز و ... اشاره کرد که برای این کار در خود میکرو تمهیداتی انجام شده است .
                          همچنین در STM32 واحد DMA وجود دارد که بار سنگین محاسبات داده های ورودی به میکرو را از CPU برداشته و بر عهده می گیرد.

                          دیدگاه


                            #28
                            پاسخ : مقدمه ای بر میکروکنترلر های stm32

                            کسی می تونه درباره مدهای gpio ان توضیح بده

                            دیدگاه


                              #29
                              پاسخ : مقدمه ای بر میکروکنترلر های stm32

                              سلام
                              آقا یکی خنگ آموز به من بگه اول کار چه بکنم؟!
                              یه بردی دارم که یکی طراحی کرده داده ما برنامشو بنویسیم!
                              stm 32 روشه!
                              می خوام با cmsis بنویسم ولی اصلاً هدرهاش کوجاس؟! :angry:

                              دیدگاه


                                #30
                                پاسخ : مقدمه ای بر میکروکنترلر های stm32

                                نوشته اصلی توسط 3659506
                                سلام
                                آقا یکی خنگ آموز به من بگه اول کار چه بکنم؟!
                                یه بردی دارم که یکی طراحی کرده داده ما برنامشو بنویسیم!
                                stm 32 روشه!
                                می خوام با cmsis بنویسم ولی اصلاً هدرهاش کوجاس؟! :angry:
                                سلام،
                                اولاً اینکه اگه بگید چه کاربردی از میکرو میخواید، اصن قراره این بورد/مدار/میکرو چیکار بکنه خیلی بهتر میشه راهنمایی کرد.
                                هم توابع و هم راهنمای مربوط به اونهارو در لینک زیر میتونید پیدا کنید:
                                http://stm32.***yak.info/doc/index.html

                                موفق باشید

                                «پشتکار» «پشتکار» «پشتکار»

                                دیدگاه

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