ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 3 از 3
  1. #1
    2012/12/23
    تهران
    544
    187

    Post نکاتی پیرامون STM32 قسمت 1-آموزش پیرامون واچ داگ تایمر و Option Byte در STM32

    سلام دوستان
    دو سه روزی بود که به یک مشکلی برخورده بودم. BLINK را نوشته بودم که نمی توانستم زمان آن را از 200 میلی ثانیه بالاتر ببرم.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    امروز راه حلش رو با دیباگ کردن پیدا کردم که مربوط به WDG در میکروکنترلر های ARM میشه که تقریبا منبع فارسی ندیدم در موردش صحبت کرده باشه، بنابراین قصد دارم کمی اینجا در این مورد صحبت کنم ، تا اگر دوستان به همچین مشکلی برخوردند، بدونند راه حلش چی هست .( مدیران محترم هم اگر خواستند تاپیک رو تگ کنید)
    میکروی که به عنوان مثال در مورد اون صحبت میکنیم STM32F103 هست.
    ***
    با توجه به دیتاشیت میکرو STM32F103 ما دو عدد واچ داگ تایمر داریم
    1- واچ داگ تایمر مستقل(
    Independent watchdog)
    این سگ نگهبان یک شمارنده 12 بیتی پایین شمار(DOWN COUNTER) هست که بصورت مستقل با کلاک 32 کیلوهرتزی که توسط RC داخلی خود میکرو کنترلر تولید شده کار میکنه و البته از کلاک اصلی خود تراشه یا به اصطلاح از Main'Clock تراشه مستقل هست یعنی شما چه فرکانس رو 1 مگاهرتز در نظر بگیرید چه 72 مگاهرتز این تایمر سگ نگهبان بدون توچه به کلاک میکرو دقیقا سر 128 میلی ثانیه میکرو رو ریست میکنه.
    2-واچ داگ تایمر تحت برنامه (Window watchdog)
    تایمر
    window watchdog یک شمارنده 7 بیتی پایین شمار(DOWN COUNTER) هست که از کلاک اصلی تراشه یا همون Main Clock استفاده میکنه، و میتونه توی مد Free Running فعالیت کنه و البته از طریق برنامه هم میتونید ریجسترش هاش رو دستکاری کنید.
    دیتا شیت:

    Independent watchdog
    The independent watchdog is based on a 12-bit downcounter and 8-bit prescaler. It is
    clocked from an independent 32 kHz internal RC and as it operates independently from the
    main clock, it can operate in Stop and Standby modes. It can be used either as a watchdog
    to reset the device when a problem occurs, or as a free running timer for application time out
    management. It is hardware or software configurable through the option bytes. The counter
    can be frozen in debug mode.
    Window watchdog
    The window watchdog is based on a 7-bit downcounter that can be set as free running. It
    can be used as a watchdog to reset the device when a problem occurs. It is clocked from the
    main clock. It has an early warning interrupt capability and the counter can be frozen in
    debug mode

    خوب همون طوری که میدونید Window watchdog به علت نرم افزاری بودن از طریق STM32CubeMX قابل دسترسی و کنترل هست بنابراین صحبتی فعلا در این مورد نمی کنیم.

    اما واچ داگ تایمر مستقل(Independent watchdog) علاوه بر شیوه نرم افزاری معمولا بصورت سخت افزاری و از طریق Option Byteمورد تغییر قرار میگرد، وقتی شما از طریق یک نرم افزار مثل STM32 ST-LINK Utility وارد Option Byteمیکروی خودتون میشید با چند گزینه روبه رو میشد که توضیحاتی رو اینجا در موردش میدم:

    Option bytes یک سری تنظیمات شخصی سازی شده مورد نیاز برای برنامه نویسان رو دسترس قرار میده، در این قسمت تعداد کمی بایت قرار داده شده است که یک سری تنظیماتی از قبیل محافظت از حافظه از خواندن و نوشتن protect Flash رو میتونید انجام بدید.
    جهت مطالعه در مورد کانفیگ OPTION BYTE میتونید

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    کنید.

    RDP: توسط این گزینه شما میتوانید از حافظه در مقابل خواندنوشتن محافظت کنید و برای میکرو کنترلر های STM32F0, STM32F2, STM32F3, STM32F4, STM32L4, STM32L1 دارای سه LEVEL محافظت هست و برای STM32F103 تنها یک LEVEL خفن هست که میتونید Enabled / Disabled کنیدش
    WDG_SW : اگر تیک گزنیه رو نزنیم و خاموش باشه، از زمانی که تغذیه میکرو رو وصل کنیم
    Independent watchdog ما بصورت اتوماتیک و خودکار روشن میشه، و در اصل علت اینکه برنامه Blink من بصورت درست کار نمیکرد هم همین بود، میکرو قبل از اینکه 1 ثانیه بشماره هعی ریست میکرد.
    nRST_STOP: اگر این گزینه رو خاموش کنیم، زمانی که میکرو وارد STOP MODE میشه بصورت اتوماتیک و خودکار ریست میکنه.
    nRST_STDBY: اگر تیک این گزینه رو خاموش کنیم، زمانی که میکرو وارد مود استندبای میشه، خود به خود ریست میشه.
    User Storage option bytes (Data 0, Data 1): دو بایت هست که میتونه برای نیازهای شخصی خودتون استفاده بشه.


    البته حتما نیازی نیست که از طریق نرم افزار ST-LINK Utility قسمت OPTION BYTE رو تغییر بدید توی خود میکرو هم این قسمت ها توسط آدرس های زیر در دسترس هستند:

    امیدوارم توضیحات مفید بوده باشه، اگر وقتی بشه در مورد تایمر های Stm32 هم توضیحی میدم
    این منابع:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط pencil : 2018/11/09 در ساعت 10:09
    أُذِنَ لِلَّذِينَ يُقَاتَلُونَ بِأَنَّهُمْ ظُلِمُوا وَإِنَّ اللَّهَ عَلَى نَصْرِهِمْ لَقَدِيرٌ ﴿۳۹حج﴾
    به كسانى كه جنگ بر آنان تحميل شده رخصت [جهاد] داده شده است چرا كه مورد ظلم قرار گرفته ‏اند و البته خدا بر پيروزى آنان سخت تواناست

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


  2. #2
    2012/12/23
    تهران
    544
    187

    پاسخ : نکاتی پیرامون STM32 قسمت 2-تنظیمات و ریجسترها در GPIO در STM32

    متاسفانه منابع فارسی در مورد میکروهای آرم معمولا خیلی کم و یا اکثرا کپی از روی هم هست و چه کاری از این بهتر که بیاییم منابعی رو تولید کنیم، تا چراغ راهی بشه برای کسانی که قصد شروع دارند و چه بسا روزی برسه که از همه ما هم پیشی بگیرن
    اگر این مطلب براتون مفید بود، هزینه داره، هزینه اش هم یک روز خوش رو بودن باهمه و یک فاتحه برای مادرم هست.
    ***
    شاید یکی از اولین بخش هایی که برای آموزش میکرو کنترلر های آرم نیاز هست کار با GPIO ها هست، نباید این موضوع رو فراموش کنید، ما در اینجا قصد داریم کار با ریجستری رو یاد بدیم، شاید برای شما سوال باشه که خوب تا وقتی توابع Hal و CMSIS وجود داره چه نیازی به کار با رجیستر ها وجود داره، بزارید براتو یه مثال بزنم، دو تا کد زیر رو در نظر بگیرید:
    کد1 (بااستفاده از ریجستری)
    کد:
    while (1)
      {
      GPIOC->ODR =    0x1000;
        GPIOC->ODR =    0x0000;
    {
    کد2(با استفاده از CMSIS)
    کد:
    while (1)
      {
    HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13)
    {
    خوب دوتا کد بالا دقیقا یک کار را انجام میدهند و اون هم اینکه بدونه وقفه پین 13 پورت C رو 0 و 1 میکنند، اما زمانی که اسیلوسکوپ رو روی پایه شماره 13 میزاریم(MAINCLOCK=30MHZ) متوجه میشیم که فرکانس کاری در کد 1 برابر 7.5 MHZ و در کد دوم برابر 250 KHZ هست، علت تفاوت اینها در سیکل اجرای برنامه است بطوریکه برای کد1 تنها به 4 کلا نیاز هست اما برای کد 2 نیاز هست چندین توابع و IF و فراخوانی بشه که خوب این باعث کاهش سرعت شدید پین های مکیرو میشه.
    خوب این از بحث اصلی ما که تقریبا بدونیم CMSIS اگرچه کار مارو خیلی خیلی راحت کرده اما گاهی اجازه حرکت روی مرز های میکرو کنترلر رو نمیده.
    خوب بریم سراغ آموزش خودمون
    ریجسترهایی که ما باید برای کار با STM32 بدونیم عبارته از :

    • ریجتستر تعیین مود برای پورت مورد نظر (GPIOx_MODER)
    • ریجستر تعیین نوع OUTPUT برای پورت (GPIOx_OTYPER)
    • رجیستر تعیین سرعت پورت (GPIOx_OSPEEDR)
    • رجیستر تعیین پول دان و پوآپ پورت (GPIOx_PUPDR)
    • GPIO port input data register (GPIOx _IDR)
    • GPIO port output data register (GPIOx_ODR)
    • ریجستر SET یا RESET پورت مورد نظر(GPIOx _BSRR)
    • GPIO port configuration lock register (GPIOx_LCKR)
    • ریجستر ثابت نگه داشتن کانفیگوریشن وضعیت میکرو بعد از ریست
    • GPIO alternate function low register (GPI Ox_AFRL)
    • GPIO alternate function high register (GPIOx_AFRH)
    • GPIO Port bit reset register (GPIOx_BRR)

    که در هرجا که X اومده شما میتونید از پورت مورد نظر خودتون استفاده کنید با توجه به پورت های موجود روی میکرو کنترلر ها
    ریجتستر تعیین MODE برای پورت مورد نظر (GPIOx_MODER)

    این ریجستر یک ریجستر 32 بیتیه که در آن هر مجموعه از دو قطعه متوالی نشان*دهنده حالت واحد I / O است. به عنوان مثال بیت های 0 و 1 در MODER ریجیستر برای GPIOC تعیین وضعیت PIN C0 هست و بیت*های ۲۶ و ۲۷ یک رجیستر ، حالتی از PC26هست. حالا این دو بیت از GPIOX_MODER رو میشه بصورت های زیر کانفیگ کرد.



    • 00'-> پین مورد نظر را بصورت INPUT در میاورد و اجازه میدهد پین بصورت INPUT استفاده بشه.
    • '01'-> پین مورد نظر را در وضعیت OUTPUT قرار می دهد,
    • '11'->پین مورد نظر را بصورت آنالوگ در می آورد و میتوانید با توجه به پتانسیل های میکروتون ازش استفاده کنید بطور مثال برای ADC,
    • '10'-> قرار دادن پین در وضعیت های خاص برای استفاده از peripherals های داخلی مثلا زمانی که نیاز باشه از SPI ویا USART و... استفاده کنید



    ریجستر تعیین نوع OUTPUT برای پورت (GPIOx_OTYPER)
    این یک رجیستر 16 بیتی هست که توسط اون میتونید خروجی خودتون رو با پوش پول و یاOPEN DRAIN قرار بدید.

    که البته با قرار دادن 0 خروجی بصورت پوش پول قرارمیگیرد
    و با 1 قرار دادن آن بصورت اوپن درین قرار میگیرد


    رجیستر تعیین سرعت پورت (GPIOx_OSPEEDR)
    این یک ریجستر 32 بیتی هست که توسط اون شما میتونید سرعت پورتتون رو انتخاب کنید.مثلا وقتی با بیت های 0 و1 این پورت کار میکنید عملا با پین 0 کار میکنید و وقتی با بیت های 26 و 27 رو مقدار دهی میکنید دارید روی پین
    13 کار میکنید
    سرعت رو میتونیدتوی سه وضعیت

    • 'x0': سرعت 2مگاهرتز -LOW
    • '01':10 مگاهرتز-MEDUME
    • '11': 50 مگاهرتز-High

    قرار بدید فقط یک نکته خیلی مهمی که هست این سرعت ها عملا هیچ دخالتی توی Rase Time و Fall Time پایه های خروجی شما نداه و صرفا با کاهش فرکانس در حال کاهش توان پورت مربوطه هستید چون اکثر از ARM برای کارهای پرتابل استفاده میشه بنابراین مدیریت توان توی این میکرو ها یکی از مهمترین موضوعاتی هست که باید در نظر گرفت.

    خوب این پست خیلی طولانی شد اگه حوصله و انرژی باقی باشه بقیه توضیحات هم در پست بعدی مینویسم
    أُذِنَ لِلَّذِينَ يُقَاتَلُونَ بِأَنَّهُمْ ظُلِمُوا وَإِنَّ اللَّهَ عَلَى نَصْرِهِمْ لَقَدِيرٌ ﴿۳۹حج﴾
    به كسانى كه جنگ بر آنان تحميل شده رخصت [جهاد] داده شده است چرا كه مورد ظلم قرار گرفته ‏اند و البته خدا بر پيروزى آنان سخت تواناست

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


  3. #3
    2012/12/23
    تهران
    544
    187

    پاسخ : نکاتی پیرامون STM32 قسمت 3-تنظیمات و ریجسترها در GPIO در STM32

    رجیستر تعیین پول دان و پوآپ پورت (GPIOx_PUPDR)
    توسط GPIOx_PUPDR میتونین برای هر پین از I/O مشخص کنید که بصورت داخلی پول آپ یا پول دان بشه، این پول آپ یا پول دان شدن هم میتونه برای زمانی باشه که شما پین رو ورودی (Input) تعریف کردید و هم برای زمانی که پین رو به عنوان خروجی Output تعریف کردید، شاید تصور میکردید که تنها پول و پول دان تنها برای حالت ورودی باشه! مقدار مقاومت یا همون امپدانس پول آپ و پول دان در این وضعیت حدود 40 کیلو اهم هست که البته بین مقادیر 30 تا 50 کیلو اهم متفاوته و بستگی به نوع آی سی و تکنولوژی ساخت و هزار کوفت و زهرمار دیگه داره
    خوب در ریجستر PUPDRy ( که y شماره پین شما از 0 تا16 یا... هست) با مقدار دهی بصورت زیر میتونید وضعیت پول آپ یا پول دان کردن اون رو مشخص کنید.
    00-> پول دان و پول آپ غیر فعال
    01-> پول آپ
    10-> پول دان
    11-> بیت رزرو شده

    GPIO port input data register (GPIOx _IDR)
    این ریجیستر 16 بیتی هست که تنها میتونید از اون بخونید. شما توسط این دستور میتونید به بیت به بیت پورت های خودتون دسترسی داشته باشید.



    GPIO port output data register (GPIOx_ODR)
    یکی از پر کاربرد ترین دستورات ریجستری در مورد STM32 در قسمت GPIO ها هست
    توسط این ریجستر شما هم میتونید بخونید و هم میتونید بنویسید R/W
    با نوشتن GPIOC _ODR میتونید وضعیت پین های مورد نظر از پورت خودتون رو تغییر بدید بزارید یه مثالی بزنم که البته میتونید تعمیمش بدید به هرچیزی که تا الان گفتم
    میکروی STM32F103C8T6 رو دنظر بگیرید پورت A اون 16 بیت داره یعنی 0000 0000 0000 0000 که معادل این در مبنای هگز میشه OX000
    بنابراین اگر شما بخواید پین شماره 13 از پورت C رو روشن کنید باید مقدار زیر رو بریزد تو ریجستر
    کد:
    GPIOC->ODR = 0x1000
    که مقدار 1000 در مبنای باینری میشه 0000 0000 0000 0001
    که همون پین شماره 13 میشه
    GPIO port bit set/reset register (GPIOx _BSRR)
    این ریجستر دقیقا همون کار 0DR رو انجام میده با این تفاوت که توسط BSRR میتونید گروهی از پین ها رو تغییر بدید. بدون اینکه آهسته از (RMW) accesses باشه.
    خوب حالا میخوایم یه مثال ساده بزنیم تا بحث درمورد GPIO ها تموم بشه،
    قصد داریم یک Bliker ساده بنویسم که تا حد امکان دقیق باشه برای همین میایم ترکیبی از توابع hal و دستورات ریجستری استفاده میکنیم.
    کد:
    While(1)
    HAL_Delay(1000)
    GPIOC->0DR=0xFFFF
    HAL_Delay(1000)
    GPIOC->0DR=0x0000
    یه منبع خوب برای مطالعه بیشتر در مورد GPIO ها:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ویرایش توسط pencil : 2018/11/09 در ساعت 13:22
    أُذِنَ لِلَّذِينَ يُقَاتَلُونَ بِأَنَّهُمْ ظُلِمُوا وَإِنَّ اللَّهَ عَلَى نَصْرِهِمْ لَقَدِيرٌ ﴿۳۹حج﴾
    به كسانى كه جنگ بر آنان تحميل شده رخصت [جهاد] داده شده است چرا كه مورد ظلم قرار گرفته ‏اند و البته خدا بر پيروزى آنان سخت تواناست

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


نمایش نتایج: از 1 به 3 از 3

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

  1. آموزش برنامه نویسی STM32 تحت Keil
    توسط hosein ghaforian در انجمن STM
    پاسخ: 1
    آخرين نوشته: 2018/05/14, 14:03
  2. مرجع آموزش stm32
    توسط سید رضا باباتبار در انجمن STM
    پاسخ: 8
    آخرين نوشته: 2015/06/04, 09:43
  3. آموزش stm32
    توسط baha_manesh در انجمن STM
    پاسخ: 5
    آخرين نوشته: 2015/02/05, 15:06
  4. پاسخ: 2
    آخرين نوشته: 2014/04/21, 19:06
  5. تایمر در stm32
    توسط maryam_r در انجمن STM
    پاسخ: 1
    آخرين نوشته: 2013/08/12, 12:27

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

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

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