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

موضوع: آموزش CooCox CoIDE جهت برنامه نویسی میکروکنترلر های Cortex-M4

  1. #1
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض آموزش CooCox CoIDE جهت برنامه نویسی میکروکنترلر های Cortex-M4

    آموزش CooCox CoIDE جهت برنامه نویسی میکروکنترلر های Cortex-M4



    این تاپیک برای مبتدی ها می باشد. در صورتی که چیزی می دانید لطفا ادامه ندهید چون فقط وقت شمار را تلف می کند



    میکروکنترلر های سری Cortex-M4

    همان طور که می دانید میکروکنترلر های 8051 - AVR - PIC - ... دیگر منسوخ شده اند و امروزه از Cortex-M4 استفاده می شود.

    Cortex-M4 توسط شرکت های مختلفی تولید می شود از جمله شرکت های زیر

    Atmel - Energy Micro - Freescale - Holtek - NXP - Nuvoton - ST - TI - Toshiba

    تو ایران شرکت Atmel پر فروش ترین شرکت سازنده میکرو هست که تمام چیز هایی که تو انبار دارد و مشتری ندارد را به ایران می فرستد

    تو جهان Freescale پرفروش ترین شرکت میکرو ساز است

    NXP بعد از تحریم ها تو ایران جا باز کرد و بعد از Atmel پرفروش ترین شرکت در بازار ایران است

    شرکت ST هم چون اروپایی است تحت تاثیر تحریم کمتر واقع شده است

    چون تمام این شرکت ها میکروکنترلر Cortex-M4 می سازند برنامه نویسی مشابه داند. اما برنامه نویسی آن ها یکیان نیست. تقریبا 90 کد ها یکسان است. آن اختلاف کم هم می شود با جند روز کار کردن جبران نمود.

    با توجه به امکانات در این تاپیک میکروکنترلر های شرکت ST خانواده ی STM32F4 برنامه نوشته می شود و قابل تعمیم به سایر شرکت ها است.

    چون این تاپیک برای مبتدی ها می باشد لازم است سخت افزاری معرفی کنیم تا ابتدا با خیال راحت کدنویسی آن را یاد بگیرند و سپس وارد مدارات جانبی آن شوند. سخت افزار های زیاد در بازار وجود دارد اما ما در این جا سخت افزاری معرفی می کنیم که در بازار ایران در دسترس باشد. اگر شما تا به حال با میکرو های دیگر کار کردید و می دانید سخت افزار را چگونه ببنید لازم نیست این برد را تهیه نماید. بنابراین به عنوان یک مبتدی و برای شروع برد زیر را تهیه نمایید:

    Discovery kit for STM32 F4 series

    کافی است به بازار مراجعه کنید یا در گوگل متن فوق را جست و جو کنید و آن را به صورت اینترنتی خریداری نمایید. چندین شرکت در ایران این برد را می فروشند و چون قصد تبلیغت نداریم از آن ها اسمی به میان نمی آوریم.

    IDE & compiler & debugger

    IDE مخفف Integrated Development Environment به معنی «محیط یکپارچه توسعه نرم‌افزار» است. در واقع محیطی است که کاربر در آن برنامه می نوسید. در بین مبتدی ها اشتباها به کامپایلر معرف است !

    چهار IDE معروف به شرح زیرند:

    Keil
    IAR
    MikroC
    CooCox CoIDE

    البته نرم افزار های دیگری نیز وجود دارد که کمتر مورد استفاده قرار می گیرند. در بین چهار نمر افزار فوق، سه تای اول پولی هستند و برای آن یا باید پول زیادی بدهید و یا آن ها را کرک نمایید. نرم افزار Keil در بین ایرانی ها محبوبیت بیشتری دارد. نرم افزار IAR در بین ایرانی هایی که با میکروکنترلر های 8051 برنامه می نوشتند محبوبیت دارد. نرم افزار MikroC بین ایرانی هایی که با میکروکنترلر های PIC کار می کردند طرفدار دارد. اما در این تاپیک ما راه دیگر، یعنی نرم افزار رایگان را انتخاب می کنیم.

    کامپایلر نمر افزار است که کد شما را از یک زبان به زبان دیگری تبدیل می کند. در این جا کد شما از زبان سی یا سی پلاس پلاس یا هر زبان دیگری به زبان ماشین (هگز) تبدیل می شود. محیط یکپارچه توسعه نرم‌افزار CooCox CoIDE به شما این اجازه را می دهد که از کامپایلر های متفاوتی استفاده نمیاید. ما در این جا از کامپایلر رایگان GCC استفاده می کنیم.

    ادامه در پست های آتی
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

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


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

  4. #2
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    زبان برنامه نویسی این کامپایلر، سی پلاس پلاس است

    کد:
    C++
    آموزش سریع از سی پلاس پلاس برای برنامه نویسی کامپیوتر در فایل زیر موجود است. می توانید آن را دانلود نمایید و مرور نمایید.

    کد:
    http://www.cplusplus.com/files/tutorial.pdf
    سی پلاس پلاس در واقع تعمیم یافته زبان سی هست.

    ابتدا در سی پلاس پلاس باید با موارد زیر آشنا باشید

    کد:
    Variables and types
    strings
    Constants
    Preprocessor (#include, #pragma, #define, #undef, #ifdef, #ifndef, #if, #endif, #else, #elif, #line, #error)
    Operators
    Basic Input/Output (cout, cin)
    if and else
    switch
    goto
    while loop
    do-while loop
    for loop
    Jump statements (break, continue)
    Functions
    Overloaded functions
    Arrays
    Pointers
    Dynamic memory (new, delete, malloc, calloc, realloc, free)
    structures
    typedef 
    Unions
    enum
    پس از موارد فوق به مبحث کلاس می رسیم که تفاوت اساسی زبان سی پلاس پلاس با زبان سی است. در مورد کلاس ها باید با موارد زیر آشنا باشید.

    کد:
    Structure of a Class
    Constructors
    Overloading constructors
    Uniform initialization
    Member initialization in constructors
    Pointers to classes
    Overloading operators
    The keyword this
    Static members
    Const member functions
    Class templates
    Template specialization
    Special members
    Default constructor
    Destructor
    Copy constructor
    Copy assignment
    Move constructor and assignment
    Implicit members
    Friend functions
    Friend classes
    Inheritance between classes
    Multiple inheritance
    Base class
    Polymorphism
    Pointers to base class
    Virtual members
    Abstract base classes
    در انتها می توانید مباحث زیر را یاد بگیرید. اما ضروری نیست. معمولا کسانی که رشته ی شان نرم افزار است از دستورات زیر را به کار می برند. اگر خودتان از صفر برنامه می نویسید لازم نیست یاد بگیرید اما اگر در قسمتی از برنامه هایتان می خواهید از کد های دیگران استفاده نمایید ممکن است با موارد زیر برخورد نمایید.

    کد:
    Exceptions (throw, try, catch)
    Implicit conversion
    explicit
    Type casting (dynamic_cast, static_cast, reinterpret_cast, const_cast)
    typeid
    پیشفرض را این می گذاریم که شما سی پلاس پلاس بلدید ( یا اگر بلد نیستید از فایل بالا استفاده می کنید و یا هر منبع دیگر) و مستقیم می رویم سراغ میکروکنترلر.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

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


  6. #3
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    اولین تجربه کار با میکروکنترلر!

    ممکن است شما تا پیش از این میکروکنترلر ندیده باشید و نمی دانید چه شکلی است. در این صورت نگران نباشید و به این پست را بخوانید

    بردی که تهیه کردید یعنی را Discovery kit for STM32 F4 series در جهتی که در تصویر زیر می بینید قرار دهید





    مربعی سیاه رنگ در وسط برد هست. در شکل فوق دور آن با دایره زرد رنگ مشخص شده است. این همان میکروکنترلر است! اگر رویش را بخوانید (بر عکس کنید) موارد زیر را نوشته است

    کد:
    STM32F407
    VGT6     Z
    ...
    یعنی مدل میکروکنترلر STM32F407 است

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

    اگر سمت چپ پروگرامر (بالا سمت چپ تصویر) را نگاه کنید یک پین هدر 6 تایی می بینید. این خروجی پروگرامر برای میکروکنترلر های دیگر است. یعنی اگر شما خودتان بعدا مداری طراحی کردید با این پین هدر می توانید میکروی آن را پروگرام کنید.

    دکمه سیاه همان دکمه ریست است است که با نحوه عملکرد آن در کامپیوتر کاملا آشنا هستید

    بقیه موارد روی شکل کاملا واضح اند و نیاز به توضیح ندارند. نارنجی شتاب سنج ؛ سبز مبدل دیجیتال به آنالوگ ؛ فیروزه ای میکروفون ؛ آبی خروجی صدا (نیازمند اتصال به هدفون یا اسپیکر) ؛ بنفش پورت usb میکروکنترلر هست

    هنگامی که برد را می خرید برنامه ای پیشفرض روی آن نصب است. جهت دیدن آن شما از طرق پورت بالا (پورت پروگرامر) بورد را به کامپیوتر متصل کنید. می بینید چراغ های روشن شدند یعنی برد شما سالم است. سپس دکمه آبی رنگ را فشار داده و رها نمایید. اکنون سنسور شتاب سنج فعال شده و برنامه بر اساس شتاب led ها را روشن و خاموش می کند. برد را در دست گرفته و تکان دهید. می بینید که LED ها تغییر وضعیت می دهند. اگر هم اکنون بورد را از USB پاین نیز به کامپیوتر وصل کنید کار موس را انجام می دهد.

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

  7. کاربران : 8 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  8. #4
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    نصب نرم افزار های مورد نیاز

    موارد زیر را به ترتیب نصب کنید.

    ۱- کامپایلر

    سایت زیر بروید

    کد:
    https://launchpad.net/gcc-arm-embedded
    اگر از ویندوز استفاده می کنید فایل زیر را دانلود و نصب نمایید. چون نصبش راحت است توضیح نمی دهم

    کد:
    gcc-arm-none-eabi-...-win32.exe
    توجه کنید که حتما فایل exe رادانلود نمایید. فایل zip نصب دستی است که کار راحتی نیست.

    بعد از نصب فایل زیر را اجرا نمایید

    کد:
    INSTALL_DIR\bin\gccvar.bat
    اگر از لینوکس استفاده می کنید فایل زیر را دانلود نمایید

    کد:
    gcc-arm-none-eabi-...-linux.tar.bz2
    جهت راهنمای نصب (لینوکس) فایل readme.txt را مطالعه نمایید

    ۲- محیط یکپارچه توسعه نرم‌افزار

    به سایت زیر بروید

    کد:
    http://www.coocox.org/CooCox_CoIDE.htm
    در پایین صفحه روی

    کد:
    Download the latest CoIDE directly
    کلیک کنید و دانلود نمایید. در صورت نیاز حساب کاربری بسازید. سپس آن را نصب کنید.

    ۳- نصب درایور STM32 ST-LINK

    به سایت 302 Found بروید و مسیر زیر را دنبال نمایید

    کد:
    Home > Tools and Software > Development Tool Hardware > Development Tool Hardware for MCUs > Development Tool Hardware for STM8 MCUs > Debug Hardware for STM8 MCUs > ST-LINK/V2
    فعلا معادل آدرس زیر است. با توجه به بروزرسانی های زیاد ممکن است لینک زیر از کار بیافتد. در صورتی که لینک زیر کار نکرد از همان روش بالا استفاده کنید

    ST-LINK/V2 ST-LINK/V2 in-circuit debugger/programmer for STM8 and STM32 - STMicroelectronics

    در این سایت فایل زیر را دانلود نمایید و آن را از حالت فشرده خارج نمایید

    كد:

    کد:
    ST-LINK/V2 USB driver for Windows ...
    در صورتی که برد به رایانه وصل است آن را قطع نمایید و تا آخر این قسمت و قسمت آتی به رایانه متصل نکنید.

    فایل زیر را با حالت administrator اجرا کنید.

    کد:
    stlink_winusb_install.bat
    سپس یکی از دو فایل زیر را بر اساس ۲۳ یا ۶۴ بیتی یودن ویندوزتان اجرا نمایید و مراحل آن را بروید (این قسمت ساده است و توضیح نمی خواهد)

    کد:
    dpinst_amd64.exe    // windows 64 bit
    dpinst_x86.exe      // windows 32 bit
    ۴- نصب واسط کاربری STM32 ST-LINK

    از همان صفحه ای که در بخش قبل گفته شد فایل زیر را دانلود نمایید

    کد:
    STM32 ST-LINK utility
    این فایل را اجرا کرده و آن را نصب کنید. (این قسمت ساده است و توضیح نمی خواهد)

    سپس کامپیوترتان را ریستارت نمایید. از این به بعد می توانید بردتان را به کامپیوتر متصل نمایید.


    چند فایل ضروری

    با توجه به این که سرعت بروزرسانی سایت ST بالا است لینک مستقیم نمی دهم. فقط صفحه را معرفی میکنم و می گویم چه فایلی را دانلود کنید

    نام صفجه : Discovery kit for STM32F407/417 lines - with STM32F407VG MCU
    آدرس صفحه: STM32F4DISCOVERY Discovery kit for STM32F407/417 lines - with STM32F407VG MCU - STMicroelectronics
    نام فایل اول: Programming Manual
    نام فایل دوم: User Manual Discovery kit for STM32F407/417 lines


    نام صفجه : STM32F407VG
    آدرس صفحه: STM32F407VG High-performance and DSP with FPU, ARM Cortex-M4 MCU with 1 Mbyte Flash, 168 MHz CPU, Art Accelerator, Ethernet - STMicroelectronics
    نام فایل اول: Datasheet
    نام فایل دوم: Reference Manual


    مرجع اصلی Reference Manual است.
    فایل Programming Manual مرجع اصلی و کامل زبان اسمبلی است. این جا چون ما با سی پلاس پلاس برنامه می نویسیم لازم به دانستن آن نداریم.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  9. کاربران : 10 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  10. #5
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    اولین برنامه

    برنامه CoIDE را اجرا نمایید.

    اگر اولین بار است که نرم افزار را اجرا کی کنید ، ابتدا از منوی Project گزینه ی "Select Toolchain path" را انتخاب نمایید. سپس آدرس محلی را که کامپیلر را در آن نصب کردید وارید نمایید. مثلا من از آدرس زیر استفاده کردم.

    کد:
    C:\Program Files (x86)\GNU Tools ARM Embedded\4.8 2013q4\bin

    اکنون از منوی Project گزینه ی "New Project" را انتخاب نمایید. در پنجره باز شده نام برنامه خود را وارد کنید. به عنوان مثال first را وارد می کنیم. در صورت تمایل محل پوشه برنامه را تغییر می دهید. سپس Next می زنید. در صفحه بعدی روی Chip کلیک کنید تا سبز شود. سپس Next می زنید. در سمت چپ پنجره جدید شرکت سازنده میکروکنترلر را انتخاب می کنید. برد خریداری شده محصول ST است پس روی آن کلیک کنید تا باز شود. حال باید سری میکروکنترلر را باید انتخاب کنید که در این جا STM32F4x را انتخاب می کنیم. در نهایت مدل میکروکنترلر (در اینجا STM32F407VG) انتخاب کرده و روی Finish کلیک کنید.

    اکنون پروژه ساخته شده است. برای راحتی کار می توانید از مخزن (Repository) کتابخانه ها (امکانات داخلی میکرو و درایور وسایل خارجی) را تیک بزنید تا به پروژه تان اضافه شود.

    چون برنامه اول است و نمی خواهیم پیچیده باشد فقط GPIO را تیک بزنید. چون این کتابخانه وابسته به کتابخانه های دیگر نیز هست با تیک زدن آن به طور خودکار بعضی از کتابخانه های دیگر نیز تیک می خورد. تیک هایی که به طور خودکار اضافه می شوند را تغییر ندهید.

    در گوشه سمت چپ روی main.c کلیک کنید تا باز شود. برنامه به صورت زیر مشاهده می کنید.

    کد:
    int main(void)
    {
    
        while(1)
        {
        }
    }
    برنامه نوشته شده را به صورت زیر تغییر دهید و ذخیره کنید

    کد:
    #include "stm32f4xx.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_gpio.h"
    
    
    int main(void)
    {
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
    
    
        while(1)
        {
    
        }
    
        return 0;
    }
    دکمه F7 را بزنید تا برنامه یتان کامپایل شود.

    اگر در پایین عبارت "BUILD SUCCESSFUL" را مشاهد کرده اید یعنی برنامه شما به صورت صحیح کامپایل شده است.

    اکنون برد را به رایانه متصل کنید (ارتباط USB از سمت پروگرامر). توجه کنید که دو جامپر ST-LINK وصل باشد. این جامپر زمانی متصل کنید که می خواهید برنامه را روی میکرو بریزید. وقتی که برنامه را ریختید این جامپر را قطع کنید تا برنامه بدون اتصال به پروگرامر اجرا شود (مانند این که برد درگر پروگرامر ندارد)

    سپس در نوار ابزار (پایین منو) روی "Download Code to Flash" کلیک کنید و منتظر بمانید تا پیام زیر را مشاهده نمایید.

    کد:
    Erase:     Done
    Program:     Done
    Verify:     Done
    اکنون می توانید جامپر پروگرامر را در بیارید و از برنامه یتان لذت ببرید!

    تبریک می گویم شما یک برنامه خالی نوشتید که هیچ کار نمی کند و فقط میکروکنترلر را روشن نگه می دارد. سپس آن را کامپایل کردید و در نهایت آن را روی میکرو پروگرام کردید و اجرا کردید.

    از این به بعد هر بار که خواستیم برنامه ای بنویسیم این مراحل را تکرار می کنید ( قسمت Select Toolchain path لازم نیست). تنها تفاوت این است که برنامه main.c دارای خطوط و دستورات بیشتری خواهد بود.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  11. کاربران : 10 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  12. #6
    کاربر فعال
    تاریخ عضویت
    May 2010
    نوشته ها
    119
    تشکر
    361
    تشکر شده 85 بار در 46 پست

    پیش فرض

    سلام
    کاش میگفتید الان که من میخوام میکرو های cortex_m4 رو مثل stm32f407 یا stm32f439 که 180 مگاهرتز سرعت داره رو یا همون freescale رو که به شماره MK60N512VMD100 هست رو از کجا تهیه کنم؟ منم میخوام تو پروژه ای که طراحی کنم ازشون استفاده کنم نه برد اموزشی

  13. #7
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    کار با پورت های ورودی و خروجی عمومی

    میکروکنترلر های Cortex-M4 دارای تعدادی پورت ورودی و خروجی عمومی هستند که هر پایه آن (پین) را می توانید ورودی و یا خروجی تعریف کنید.

    میکروکنترلر STM32F407 دارای پورت های ورودی و خروجی عمومی 16 پایه ای است. پورت های ورودی و خروجی عمومی به صورت GPIOx نام گذاری می شوند. که x نام اختصاصی هر پورت است. یعنی GPIOA و GPIOB و ...

    برای فعال سازی هر پورت در تابع اصلی (main) لازم است که کد زیر وارد شود.

    کد:
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);
    به جای x در کد بالا نام پورت را وارد کنید. مثلا در پست قبلی ما پورت D را فعال کرده بودیم.



    هر پورت دارای 10 رجیستر برای کار با آن است که آشنایی با آن ضروری است

    به علت 32 بیتی بودن میکروکنترلر (در نتیجه 32 بیتی بودن رجیستر ها) بهتر است از عدد دهی هگزا دسیمال استفاده شود


    کد:
    0000 ==> 0
    0001 ==> 1
    0010 ==> 2
    0011 ==> 3
    0100 ==> 4
    0101 ==> 5
    0110 ==> 6
    0111 ==> 7
    1000 ==> 8
    1001 ==> 9
    1010 ==> A
    1011 ==> B
    1100 ==> C
    1101 ==> D
    1110 ==> E
    1111 ==> F
    بیت: کوچکتربن واحد حافظه که می تواند یک یا صفر باشد
    نیمبل (نیم بایت): معادل چهار بیت
    بایت: معادل هشت بیت
    نیم کلمه: معادل 16 بیت
    کلمه: معادل 32 بیت
    جمله ، پارگراف ، صفحه معادل ...

    یک رجیستر از 32 بیت (صفر یا یک) تشکیل شده است. بنابراین از 8 تا نیمبل تشکیل شده است. هر نیمبل را با یک عدد هگزا دسمیال تشکیل شده است.
    بنابراین یک کلمه را با 8 رقم هگزا دسیمال نشان می دهند. برای این که کامپایلر بفهمد که عدد وارد شده هگزادسیمال است ابتدای آن صفر ایکس (کوچک) می گذاریم یعنی

    کد:
    0x00000000
    0x00000001
    .
    .
    .
    0xFFFFFFF
    رجیستر پورت های میکروکنترلر های Cortex-M4 به صورت زیر نام گذاری شده است


    کد:
    MODER  ==> mode register
    OTYPER  ==> output type register
    OSPEEDR  ==> output speed register
    ODR  ==> output data register
    PUPDR  ==> pull-up/pull-down register
    IDR  ==> input data register
    BSRR  ==> bit set/reset register
    LCKR  ==> configuration lock register
    AFRL  ==> alternate function low register
    AFRH  ==> alternate function high register
    در این پست شش تای اول را توضیح می دهیم و چهار تای دیگر را در پست های بعد شرح می دهیم.

    MODER

    این رجیستر از از شانزده قسمت دو بیتی تشکیل شده است. هر قسمت مشخص می کند که پایه متناظر آن ورودی، خروجی، جانشین یا آنالوگ باشد

    کد:
    00: Input (reset state)
    01: General purpose output mode
    10: Alternate function mode
    11: Analog mode





    OTYPER

    این رجیستر مشخص می کند که نوع خروجی چه باشد.

    هر بیت یه یک پایه اختصاص دارد. بنابراین 16 بیت پر ارزش به صورت رزرو هستند.


    کد:
    0: Output push-pull (reset state)
    1: Output open-drain




    OSPEEDR

    این رجیستر از از شانزده قسمت دو بیتی تشکیل شده است. هر قسمت مشخص می کند که پایه متناظر آن اگر خروجی باشد دارای چه سرعتی باشد.

    کد:
    00: Low speed
    01: Medium speed
    10: Fast speed
    11: High speed





    ODR

    این رجیستر مشخص می کند که هر پایه پورت در صورتی که خروجی باشد یک باشد یا صفر.

    هر بیت یه یک پایه اختصاص دارد. بنابراین 16 بیت پر ارزش به صورت رزرو هستند.





    PUPDR

    این رجیستر از از شانزده قسمت دو بیتی تشکیل شده است. هر قسمت مشخص می کند که پایه متناظر آن اگر ورودی باشد دارای چه عملکردی باشد. یعنی پایین کش باشد یا بالا کش باشد و یا هیچ کدام.

    کد:
    00: No pull-up, pull-down
    01: Pull-up
    10: Pull-down
    11: Reserved



    IDR

    این رجیستر مشخص می کند که هر پایه پورت در صورتی که ورودی باشد درای چه سطح منطقی است یعنی می خواند که یک یا صفر است.

    هر بیت یه یک پایه اختصاص دارد. بنابراین 16 بیت پر ارزش به صورت رزرو هستند.





    تذکر: مقادیر رزرو باید مقادیر پیش فرض باقی بمانند. بنابراین آن ها را تغییر ندهید. در ادامه مقادیر پیش فرض آمده است.

    کد:
    MODER
    • 0xA8000000 for port A
    • 0x00000280 for port B
    • 0x00000000 for other ports
    
    
    OTYPER
    • 0x00000000
    
    
    OSPEEDR
    • 0x000000C0 for port B
    • 0x00000000 for other ports
    
    
    ODR
    • 0x00000000
    
    
    PUPDR
    • 0x6400 0000 for port A
    • 0x0000 0100 for port B
    • 0x0000 0000 for other ports
    
    
    IDR
    0x0000XXXX (where X means undefined)
    مثال یک

    با توجه به این که LED های برد به پایه های D12 تا D15 وصل هستند و با یک شدن آن (در این برد 3 ولت در حالت استاندارد 3/3 ولت) Led روشن و با صفر شدن آن خاموش می شود. در مثال ها از این پایه ها به عنوان خروجی استفاده می کنیم. شما می توانید با سیم پایه های دیگر را به بردبرد ببرید و با آن کار کنید.

    برنامه ای بنویسید که ورودی های C12 تا C15 را بخواند و مقدار آن را در خروجی D12 تا D15 بنویسد.

    [PHP]
    #include "stm32f4xx.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_gpio.h"

    int main()
    {
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIOC->MODER=0x00000000;
    GPIOD->MODER=0x55000000;
    GPIOC->PUPDR=0x55000000;

    while(1)
    {
    GPIOD->ODR=GPIOC->IDR;
    }

    return 0;
    } [/PHP]


    یک روش ایجاد تاخیر

    در مواقعی ای که زمان دقیق تاخیر برایتان اهمیت ندارد می توانید از روش زیر استفاده کنید.


    [PHP]void delay()
    {
    long double i,j,m,n;
    m=1;
    n=1;
    for(i=0;i<500000;i++)
    {
    for(j=0;i<50000;i++)
    {
    m=m/n;
    }
    }
    } [/PHP]


    مثال دو

    برنامه ای بنویسید که LED های روی برد با همدیگر چشمک بزنند

    [PHP]
    #include "stm32f4xx.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_gpio.h"

    void delay()
    {
    long double i,j,m,n;
    m=1;
    n=1;
    for(i=0;i<500000;i++)
    {
    for(j=0;i<50000;i++)
    {
    m=m/n;
    }
    }
    }



    int main()
    {
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIOD->MODER=0x55000000;


    while(1)
    {

    GPIOD->ODR=0x0000F000;
    delay();
    GPIOD->ODR=0x00000000;
    delay();
    }

    return 0;
    } [/PHP]


    تمرین

    1- در مثال یک ، ورودی ها را به صورت پایین کش، بالاکش و معمولی راه اندازی کنید و عملکرد برنامه ها را مقایسه کنید
    2- در مثال دو ، سرعت خروجی و نوع خروجی را تغییر دهید و عملکرد برنامه ها را مقایسه کنید
    3- برنامه چراغ راهنمایی بنویسید که به صورت خود کار ابتدا سبز 4 ثانیه سپس زرد 1 ثانیه و سپس قرمز شود 6 ثانیه. چون از روش غیر دقیق برای تاخیر استفاده می کنید لازم میست حتما دقیق باشد
    4- برنامه ربات تعقیب خط دو سنسوره بنویسید با فرض این که مسیر درست آن است که خط بین دو سنسور باشد. (رویکرد سنسور بزرگ)
    5- برنامه ربات تعقیب خط دو سنسوره بنویسید با فرض این که مسیر درست آن است دو سنسور درون خط باشند. (رویکرد سنسور کوچک)

    در پست بعدی، دستورات بیشتری در مورد کار با این 6 رجیستر معرفی می کنیم و سپس تمرین های سخت تری هم مطرح می کنیم.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  14. کاربران : 12 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  15. #8
    Banned
    تاریخ عضویت
    Apr 2013
    نام
    صادق علی بخشی
    نوشته ها
    1,148
    تشکر
    1,183
    تشکر شده 1,276 بار در 702 پست

    پیش فرض

    ممنون از اینکه اطلاعاتتون رو با دیگران تقسیم میکنید
    ولی امیدوارم مثل بقیه ی تاپیک ها جسته گریخته نباشه و نیمه کاره به حال خودش رها نشه
    و یک چیز دیگه شما که دارید رجیستری کار میکنید فقط دستورات rcc از cmsis هست
    ویرایش توسط sadeghbakhshi : 31-12-2013 در ساعت 21:16

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


  17. #9
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    کار با پورت های ورودی و خروجی عمومی - قسمت دوم

    دستور زیر یک پایه از پورت را صفر می کند.

    کد:
    GPIO_ResetBits(GPIOx,GPIO_Pin_y);
    دستور زیر یک پایه از پورت را یک می کند.

    کد:
    GPIO_SetBits(GPIOx,GPIO_Pin_y);
    دستور زیر یک پایه از پورت را معکوس می کند. یعنی اگر صفر باشد آن را یک می کند و اگر یک باشد آن را صفر می کند.

    کد:
    GPIO_ToggleBits(GPIOx,GPIO_Pin_y);
    دستور زیر یک پایه از پورت را می خواند.

    کد:
    GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_y);
    دستور زیر پورت را می خواند.

    کد:
    GPIO_ReadInputData(GPIOx);
    دستور زیر مقدار BitVal را در یک پایه ی پورت می نویسد.

    کد:
    GPIO_WriteBit(GPIOx,GPIO_Pin_y,BitVal);
    دستور زیر مقدار PortVal را در پورت می نویسد.

    کد:
    GPIO_Write(GPIOx,PortVal);
    دستور زیر پورت را غیر فعال می کند.

    کد:
    GPIO_DeInit(GPIOx);

    تمرین

    1- برنامه چشمک زن و برنامه چراغ راهنما را با دستورات GPIO_ResetBits و GPIO_SetBits بنویسید
    2- برنامه چشمک زن را با دستور GPIO_ToggleBits بنویسید
    3- برنامه ربات تعقیب خط با سه سنسور بنویسید. فرض شود مسیر درست وقتی است که سنسور وسط روی خط و دو سنسور دیگر خارج خط باشند. در این تمرین چینش سنسوز ها خطی یا مثلثی فرض شود.
    4- برنامه ربات تعقیب خط با چهار سنسور (روی یک خط) بنویسید. فرض شود مسیر درست وقتی است که دو سنسور میانی روی خط و دو سنسور دیگر خارج خط باشند.
    5- برنامه ربات تعقیب خط با چهار سنسور (چینش لوزی) بنویسید. فرض شود مسیر درست وقتی است که دو سنسور عقب و جلو روی خط و دو سنسور راست و چپ خارج خط باشند.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  18. کاربران : 6 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  19. #10
    همکار افتخاری dariush_ab آواتار ها
    تاریخ عضویت
    Apr 2012
    نام
    داریوش عباسی نژاد
    نوشته ها
    2,112
    تشکر
    1,404
    تشکر شده 1,810 بار در 1,064 پست

    پیش فرض

    سلام.
    مهندس چه کار جالبی رو شروع کرده اید.
    ببخشید وسط آموزشها پست میزنم.
    به خصوص قسمت تمرینها خیلی برام جالب هستش و نمونه این حرکت رو جایی تو فرومها ندیدم.
    برای کسی که میخواد شروع کنه عالی است.
    تقدیر و تشکر بسیار فراوان از زحمات شما.

  20. #11
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    کار با پورت USB در دسته Device در خوشه ی CDC با درایو VCP

    پورت USB خود دارای چند خوشه است. موس، کیبرد، مودم، پرینتر، گیم پد و ... از خوشه های یکسانی استفاده نمی کنند. 256 خوشه وجود دارد! در ادامه چند تاش ذکر شده است

    کد:
    ADC  ==>  Audio Device Class
    CDC  ==>  Communications Device Class  
    HID  ==>  Human Interface Device
    MSC  ==>  Mass storage Class
    PDC  ==>  Printer Device Class
    PHD  ==>  Personal Healthcare device
    PID  ==>  Physical Interface Device
    SID  ==>  Still Imaging Device
    VDC  ==>  Video Device Class
    هر دستگاه USB جز یکی از 3 دسته زیر است

    1- ابزار Device
    2- مهمان Host
    3- همزمان ابزار و مهمان Dual

    دو راه برای ارتباطی برای USB وجود دارد
    1- ارتباط مستقیم یک به یک (یکی مهمان و دیگری ابزار)
    2- ارتباط چند به یک ( یک مهمان و بقیه با هاب به مهمان وصل می شوند)


    همان طور که دیده می شود به علت تنوع خوشه ها ، دسته ها و راه ارتباطی نوشتن برنامه کار USB کار هر کس نیست. همچنین علاوه بر نوشتن برنامه میکرو ، لازم است برای کامپیوتر نیز درایور نوشت!!!

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

    به علت تنوع روش ها و ... کتابخانه استانداردی وجود ندارد.

    هر چند نرم افزار CooCox CoIDE کتابخانه های برای کار با USB قرار داده، اما کار نمی کند و مشکلات کد نویسی دارد!

    چهار ماه پیش کاربر xenovacivus در یکی از سایت ها ! کد اصلاح شده کتابخانه کار با پورت USB در دسته Device در خوشه ی CDC با درایو VCP را منتشر کرد! کتابخانه را می توانید از لینک زیر دانلود کنید.

    302 Found

    درایور آن را هم می توانید از سایت ST دانلود کنید:


    کد:
    STSW-STM32102
    STM32 Virtual COM Port Driver
    
    http://www.st.com/web/en/catalog/tools/PF257938
    ابتدا درایور را نصب کنید و سپس رایانه یتان را ریستارت نماید

    برنامه نویسی میکروکنترلر جهت کار پورت USB در دسته Device در خوشه ی CDC با درایو VCP

    اکنون یک پروژه جدید بسازید ، در مخزن تیک های CooCox CoIDE تیک های GPIO - EXTI - USART - MISC را فعال کنید.

    کتابخانه را در پوشه ی پروژه کپی نمایید. سپس آن را به پروژه خود بیافزایید.

    قبل تابع اصلی (main) دستورات زیر را وارد کنید.

    کد:
    #define HSE_VALUE ((uint32_t)8000000) // STM32 discovery uses a 8Mhz external crystal
    
    #include "stm32f4xx.h"
    #include "stm32f4xx_conf.h"
    #include "stm32f4xx_gpio.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_exti.h"
    #include "usbd_cdc_core.h"
    #include "usbd_usr.h"
    #include "usbd_desc.h"
    #include "usbd_cdc_vcp.h"
    #include "usb_dcd_int.h"
    
    //The USB data must be 4 byte aligned if DMA is enabled. This macro handles the alignment, if necessary.
    __ALIGN_BEGIN USB_OTG_CORE_HANDLE  USB_OTG_dev __ALIGN_END;
    
    // The conditional "extern" ensures the weak declarations from startup_stm32f4xx.c are overridden.
    #ifdef __cplusplus
     extern "C" {
    #endif
    
    void OTG_FS_IRQHandler(void)
    {
      USBD_OTG_ISR_Handler (&USB_OTG_dev);
    }
    
    void OTG_FS_WKUP_IRQHandler(void)
    {
      if(USB_OTG_dev.cfg.low_power)
      {
        *(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
        SystemInit();
        USB_OTG_UngateClock(&USB_OTG_dev);
      }
      EXTI_ClearITPendingBit(EXTI_Line18);
    }
    
    #ifdef __cplusplus
    }
    #endif
    دستور زیر به میکروکنترلر می گوید که کریستال خارجی ات 8 مگا هرتز است. این دستور برای افزایش دقت (زمانی) برنامه اضافه کردیم. از این به بعد در تمامی برنامه های که می نویسید از این دستور استفاده کنید.

    کد:
    #define HSE_VALUE ((uint32_t)8000000)
    کتاب خانه های زیر به ترتیب شناسایی میکرو، پروت های ورودی خروجی، کلاک و وقفه (اینتراپت) است.

    کد:
    #include "stm32f4xx.h"
    #include "stm32f4xx_conf.h"
    #include "stm32f4xx_gpio.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_exti.h"
    کتابخانه های زیر همان کتاب خانه های پورت USB هستند.

    کد:
    #include "usbd_cdc_core.h"
    #include "usbd_usr.h"
    #include "usbd_desc.h"
    #include "usbd_cdc_vcp.h"
    #include "usb_dcd_int.h"
    چون شما مبتدی هستید بهتر است چند خطی که بعد از سرامد ها آمده است را بدون این که بدانید چه کار می کنند کپی کنید. وقتی که کاملا حرفه ای شدید بعدا به سراغشان بیاید.

    SystemInit

    تابع زیر جهت فعال سازی کلاک سیستم است و کاربرد آن منحصر به USB نمی شود

    کد:
    SystemInit();
    از این به بعد این تایع را در تمامی برنامه های که می نویسید اضافه کنید. (در ایتدای تابع اصلی)

    USBD_Init
    تابع زیر برنامه می فهماند که شما می خواهد از بین کلیه روش های موجود در USB فقط و فقط از دسته Device در خوشه ی CDC با درایو VCP استفاده کنید

    کد:
    USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb);
    put_char

    تابع زیر یک کاراکتر را ارسال می کند.

    کد:
    VCP_put_char(chr);
    به عنوان مثال:

    کد:
    uint8_t chr = 'R';
    VCP_put_char(chr);
    
    ------------------
    
    VCP_put_char('G');
    
    ------------------
    
    uint8_t *chr = 'B';
    VCP_put_char(*chr);
    put_char

    تابع زیر یک کاراکتر را می گیرد می کند.

    کد:
    VCP_get_char(chr);
    به عنوان مثال:

    کد:
    uint8_t chr;
    VCP_get_char(&chr);
    
    ------------------
    
    uint8_t *chr;
    VCP_get_char(chr);
    send_str

    تابع زیر رشته را می فرستد

    کد:
    VCP_send_str(str);
    به عنوان مثال:

    کد:
    uint8_t str[]="Robotics Engineering";
    VCP_send_str(str);
    
    ------------------
    
    VCP_send_str("CooCox CoIDE");
    get_string

    تابع زیر یک رشته را می خواند.

    کد:
    VCP_get_string(str);
    به عنوان مثال:

    کد:
    uint8_t Name[20];
    VCP_get_string(Name);
    برنامه نویسی کامپیوتر جهت کار پورت USB در دسته Device در خوشه ی CDC با درایو VCP

    VCP برگرفته از عبارت Virtual COM Port است. یعنی ویندوز فکر می کند که پورت USB اش حذف شده است و پورت COM به سیستم اضافه شده است.

    شما می توانید برنامه های بنویسید (با استفاده از کتاب خانه های دیگر یا با استفاده از اسمبلی) که کامپیوتر فکر کند پورت موازی دارد یا فکر کند USB به موس وصل شده است و ...

    چون این جا به برنامه نویسی کامپیوتر و زبان های گوناگون آن بستگی دارد نمی توانم تمام روش هایش را بگویم. معمولا این جور کار ها (برنامه با سرعت اجرای پایین) را با زبان پایتون می نویسند. در ادامه فقط به برنامه نویسی متلب اشاره می کنم

    کد:
    s6 = serial('COM6','BaudRate',9600,'DataBits',8,'Timeout',5,'Terminator' ,' ');
    fopen(s6);
    fprintf(s6,'Robotics');
    fscanf(s6)
    fclose(s6);
    خط اول تعریف می کند که سخت افزار چیست. تنظیماتش در کنترل پنل قسمت دیوایس منیجر موجود است.
    خط دوم پورت را باز می کند.
    حط سوم کلمه ی Robotics می کند
    خط چهارم پورت را می خواند.
    خط آخر پورت را می بندد.

    در برنامه نویسی متلب بستن پورت ضروری است. اگر برنامه یتان وسطش خطا داد به تنهایی این دستور را اجرا کنید تا بتوانید مجددا از این دستورات فوق استفاده کنید.
    در کامپیوتر من پورت COM6 نامیده شد. شما باید شماره پورت را در کنترل پنل قسمت دیوایس منیجر ببینید و از آن استفاده کنید.


    مثال
    برنامه ای بنویسید که با ارسال اول حرف هر رنگ (به در حرف درشت) از طریق کامپیوتر، مقدار LED متناظر آن روی برد تغییر وضعیت دهد.

    [PHP]
    #define HSE_VALUE ((uint32_t)8000000) // STM32 discovery uses a 8Mhz external crystal

    #include "stm32f4xx.h"
    #include "stm32f4xx_conf.h"
    #include "stm32f4xx_gpio.h"
    #include "stm32f4xx_rcc.h"
    #include "stm32f4xx_exti.h"
    #include "usbd_cdc_core.h"
    #include "usbd_usr.h"
    #include "usbd_desc.h"
    #include "usbd_cdc_vcp.h"
    #include "usb_dcd_int.h"




    //The USB data must be 4 byte aligned if DMA is enabled. This macro handles the alignment, if necessary.
    __ALIGN_BEGIN USB_OTG_CORE_HANDLE USB_OTG_dev __ALIGN_END;


    // The conditional "extern" ensures the weak declarations from startup_stm32f4xx.c are overridden.
    #ifdef __cplusplus
    extern "C" {
    #endif

    void OTG_FS_IRQHandler(void)
    {
    USBD_OTG_ISR_Handler (&USB_OTG_dev);
    }

    void OTG_FS_WKUP_IRQHandler(void)
    {
    if(USB_OTG_dev.cfg.low_power)
    {
    *(uint32_t *)(0xE000ED10) &= 0xFFFFFFF9 ;
    SystemInit();
    USB_OTG_UngateClock(&USB_OTG_dev);
    }
    EXTI_ClearITPendingBit(EXTI_Line18);
    }

    #ifdef __cplusplus
    }
    #endif



    int main(void)
    {
    uint8_t charac;

    SystemInit(); // Set up the system clocks
    //SysTick_Config(SystemCoreClock / 1000); // Setup SysTick
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);

    GPIOD->MODER=0x55000000;

    USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb, &USR_cb); // Setup USB

    while (1)
    {
    VCP_get_char(&charac);
    VCP_put_char(charac);

    switch(charac)
    {
    case 'G':
    GPIO_ToggleBits(GPIOD, GPIO_Pin_12);
    break;
    case 'O':
    GPIO_ToggleBits(GPIOD, GPIO_Pin_13);
    break;
    case 'R':
    GPIO_ToggleBits(GPIOD, GPIO_Pin_14);
    break;
    case 'B':
    GPIO_ToggleBits(GPIOD, GPIO_Pin_15);
    }
    }

    return 0;
    }
    [/PHP]

    تمرین
    در تمرینات زیر علاوه بر برنامه میکرو ، برنامه کامپیوتر را نیز بنویسید:
    1- برنامه ای بنویید که رشته "Robotics Engineering" را به کامپیوتر ارسال کند. سپس کامپیوتر آن را مجدد به میکرو ارسال کند، در صورتی که عبارت درست ارسال شده بود چراغ سبز روشن شود و در صورتی که اشتباه شده بود چراغ قرمز روشن شود و دوباره رشته ارسال شود و این کار ادامه پیدا کند تا رشته درست ارسال شود.
    2- برنامه شماره 1 را طوری بنویسید که حرف به حرف ارسال و تایید شود. برای تایید حرف به حرف می توانید از کارکتر های - و = برای اطمینان از صحت ارسال استفاده کنید.
    3- برنامه ای بنویسید که با ارسال رشته "Traffic Lights" برد عمل چراغ راهنمایی اجرا دهد. در صورت ارسال رشته "Flashing Red" چراغ قرمز چشمک زن، در صورت ارسال رشته "Flashing Yellow" چراغ قرمز چشمک زن و در صورت ارسال "Off" همه ی LED ها خاموش شوند.
    4- برنامه بات را بنویسید. در این برنامه برد به رشته ها جواب می دهد. مثلا اگر "Salam" در یافت کرد رشته ی "Salam Alaykom" را ارسال کند و یا مثلا وقتی "smkdgjnspkrjg" در یافت کند عبارت "I do not know" را ارسال کند و ...
    5- برنامه شبیه ساز ربات تعقیب خط با پنج سنسور را بنویسید. در این شبیه ساز داده ها (اطلاعات سنسور) ار کامپیوتر ارسال می شوند و ربات پس از تحیلی سرعت هر موتور را به کامپیوتر ارسال می کند.
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  21. کاربران : 8 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  22. #12
    Banned
    تاریخ عضویت
    Feb 2014
    نوشته ها
    4
    تشکر
    8
    تشکر شده 2 بار در 2 پست

    پیش فرض

    سلام
    با تشکر و خسته نباشید از آموزش های شما.
    برای اینکه بخوایم با OTG یو اس بی و سرعت بالا اطلاعات را به کامپیوتر و واسط نرم افزاری بفرستیم چه راهی هست از کدام class استفاده کنیم بهتره؟
    منظورم غیر از Virtual COM هست.

  23. #13
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Melt In Time نمایش پست ها
    سلام
    با تشکر و خسته نباشید از آموزش های شما.
    برای اینکه بخوایم با OTG یو اس بی و سرعت بالا اطلاعات را به کامپیوتر و واسط نرم افزاری بفرستیم چه راهی هست از کدام class استفاده کنیم بهتره؟
    منظورم غیر از Virtual COM هست.
    منظورتان را وضح تر بگویید

    1- دسته بازی، یگم پد، جوی استیک
    2- هپتیک
    3- و ...

    هر کلاس برای کاری طراحی شده است کلاس ارسال ویدئو با کلاس ارسال عکس با کلاس پرینتر و ... فرق دارد
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

  24. کاربران : 3 تشکر کرده اند از شما ROBOTICS برای ارسال این پست سودمند:


  25. #14
    Banned
    تاریخ عضویت
    Feb 2014
    نوشته ها
    4
    تشکر
    8
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ROBOTICS نمایش پست ها
    منظورتان را وضح تر بگویید

    1- دسته بازی، یگم پد، جوی استیک
    2- هپتیک
    3- و ...

    هر کلاس برای کاری طراحی شده است کلاس ارسال ویدئو با کلاس ارسال عکس با کلاس پرینتر و ... فرق دارد
    اگر بخوایم از adc برد مثلا دیسکاوری اطلاعات خوانده شده را از usb با full speed به کامپیوتر بفرستیم که روی نمودار رسم کند.

  26. #15
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Melt In Time نمایش پست ها
    اگر بخوایم از adc برد مثلا دیسکاوری اطلاعات خوانده شده را از usb با full speed به کامپیوتر بفرستیم که روی نمودار رسم کند.
    کلاس زیر پیشنهاد می شود

    Physical Interface Device - PID

    همچنین می توانی از کلاس CDC با زیر کلاس Data استفاده کنی
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

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


  28. #16
    Banned
    تاریخ عضویت
    Feb 2014
    نوشته ها
    4
    تشکر
    8
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ROBOTICS نمایش پست ها
    کلاس زیر پیشنهاد می شود

    Physical Interface Device - PID

    همچنین می توانی از کلاس CDC با زیر کلاس Data استفاده کنی
    تشکر
    من با لایبرری هایی که شما برای یو اس بی گذاشتید نتونستم کامپایل کنم. در انجمن خود سایت coocox اینو پیدا کردم:
    http://www.4shared.com/rar/mVi5hwNX/CoIDE_USB_CDC_Example.html

    ولی اینم CDC رو از راه VCP راه انداخته که full speed نمیده. چطور بدون درایور vcp با کلاس cdc کار کنم که سرعت کامل بده؟
    ممنون میشم.
    ویرایش توسط Melt In Time : 27-02-2014 در ساعت 23:29

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


  30. #17
    کاربر فعال ROBOTICS آواتار ها
    تاریخ عضویت
    Jan 2008
    نام
    ایران
    نوشته ها
    228
    تشکر
    26
    تشکر شده 488 بار در 158 پست

    پیش فرض

    نقل قول نوشته اصلی توسط Melt In Time نمایش پست ها
    تشکر
    من با لایبرری هایی که شما برای یو اس بی گذاشتید نتونستم کامپایل کنم. در انجمن خود سایت coocox اینو پیدا کردم:
    http://www.4shared.com/rar/mVi5hwNX/CoIDE_USB_CDC_Example.html

    ولی اینم CDC رو از راه VCP راه انداخته که full speed نمیده. چطور بدون درایور vcp با کلاس cdc کار کنم که سرعت کامل بده؟
    ممنون میشم.
    گفتم CDC را با روش Data استفاده کنید
    VCP سرعتش کم است

    CDC خوش چندین روش دارد که VCP یک روش، Data یک روش دیگر، و روش های دیگری نیز وجود دارد

    من کتابخانه ی Data را برای STM32F4 پیدا نکردم. خودتان باید کتابخانه اش را بنویسید.

    همچنین به جای CDC می توانید از PID استفاده کنید که باز هم کتابخانه اش را باید خودتان بنویسید.


    این روش VCP هم کتابخانه اش را یک نفر نوشته و در اینترنت به اشتراک گذاشته
    شما می توانید روش Data را بنویسد و در اینترنت به اشتراک بگذارید
    هرکه را اسرار حق آموختند
    مهر کردند و دهانش دوختند

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


  32. #18
    Banned
    تاریخ عضویت
    Feb 2014
    نوشته ها
    4
    تشکر
    8
    تشکر شده 2 بار در 2 پست

    پیش فرض

    نقل قول نوشته اصلی توسط ROBOTICS نمایش پست ها
    گفتم CDC را با روش Data استفاده کنید
    VCP سرعتش کم است

    CDC خوش چندین روش دارد که VCP یک روش، Data یک روش دیگر، و روش های دیگری نیز وجود دارد

    من کتابخانه ی Data را برای STM32F4 پیدا نکردم. خودتان باید کتابخانه اش را بنویسید.

    همچنین به جای CDC می توانید از PID استفاده کنید که باز هم کتابخانه اش را باید خودتان بنویسید.


    این روش VCP هم کتابخانه اش را یک نفر نوشته و در اینترنت به اشتراک گذاشته
    شما می توانید روش Data را بنویسد و در اینترنت به اشتراک بگذارید
    لایبرری بلد نیستم بنویسم،
    کار زمان بری باید باشه و در تخصص من هم نیست
    از این برنامه ها و شرکت هایی که برای USB معرفی کرده تا حالا چک نکردید؟
    http://www.st.com/web/en/resource/sa..._solutions.pdf

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


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

  1. برنامه نویسی اندروید برای cortex-a8
    توسط Doloop در انجمن Cortex-a8-a9 arm9-11
    پاسخ: 43
    آخرين نوشته: 21-03-2014, 18:50
  2. برنامه نویسی لینوکس برای cortex-a8
    توسط Doloop در انجمن Cortex-a8-a9 arm9-11
    پاسخ: 109
    آخرين نوشته: 18-03-2014, 12:22
  3. دانلود کتاب آموزشی درباره ARM Cortex M3
    توسط mansoory در انجمن میکرو کنترلر های 32 بیتی(arm)
    پاسخ: 4
    آخرين نوشته: 07-08-2013, 08:15
  4. CoIDE: بهترین IDE برای میکروهای Cortex-M
    توسط mhnasseri1 در انجمن Cortex-a8-a9 arm9-11
    پاسخ: 13
    آخرين نوشته: 27-02-2013, 00:00
  5. کتاب برای آموزش برنامه نویسی میک
    توسط capastar در انجمن AVR
    پاسخ: 2
    آخرين نوشته: 15-08-2008, 02:40

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

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