مهندس موفق الکترونیک

معرفی CMSIS

CMSIS یک رابط نرم افزاری استاندارد شده برای برنامه نویسی میکروکنترلرهای ARM با هسته Cortex میباشد.این توابع (رابط نرم افزاری استاندارد برای میکروکنترلرهای  Cortex ) در سال 2008 توسط شرکت ARM معرفی شدن تا برنامه نویسی این سری از میکروکنترلرها را استاندارد کنن و قابلیت استفاده از نرم افزار را بهبود بخشن یعنی بشه براحتی روی میکروکنترلر شرکت دیگری که با این هسته ساخته شده برنامه را اجرا کرد.

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

خب CMSIS دارای یکسری فایل های هست که سازنده میکروکنترلر در اختیار برنامه نویسان قرار میده و در پروژه کافیه اونا را فراخوانی کنید. بطور خلاصه CMSIS برنامه نویسی را خیلی آسانتر و هزینه نرم افزار نویسی را پایین میاره.

معرفی لایه های مختلف CMSIS

معرفی توابع CMSIS

به عکس بالا دقت کنید به رنگ ها بیشتر دقت کنید هر رنگ نمایانگر یک لایه میباشد در لایه پایین میکروکنترلر یا سخت افزار قرار دارد و در لایه های بالایی نرم افزار باز هم در لایه نرم افزار یکسری لایه ها به سخت افزار نزدیکتر هستند و یکسری به کاربر نزدیک هستن! در زیر به برسی موارد مهم می پردازیم:

مطلب پیشنهادی:  آموزش راه اندازی ADC در STM32 (اندازه‌گیری ولتاژ آنالوگ)

لایه CMSIS-CORE

این لایه واسط بین پردازنده های سری Cortex-M و امکانات جانبی میکروکنترلر میباشد. بطور مثال Core_cm3.h و System_lpc17xx.h از این دسته بندی میباشد.

لایه CMSIS-DRIVER

در این لایه درایور و راه اندازهای امکانات جانبی میکروکنترلر وجود دارند. بطور مثال در این لایه lpc17xx_gpio.h و کتابخونه های دیگر وجود دارند که باهاشون بیشتر کار داریم. لایه های CORE-DSP ,CMSIS-RTOS,CMSIS-PACK-CMSIS-SVD,CMSIS-DAP نیز وجود دارند که میتوانید در سایت ARM در مورد اینا بخونید 🙂 در این مرحله بدردمون نمیخورن.

اضافه کردن CMSIS به پروژه ها

برای اضافه کردن توابع CMSIS  به محیط برنامه نویسی کافیه فایل های آن را از شرکت سازنده  دانلود کنید و طبق راهنمای آن استفاده کنید در این آموزش ها ما از کامپایلر Keil استفاده میکنیم و درایور را از لینک زیر دانلود کنید.

افزودن فایل های Core به پروژه

در Keil وقتی پروژه باز میکنید ( در جلسه قبل نحوه ایجاد پروژه در Keil را یاد گرفتیم ) فایل startup_LPC17xx.s و دوتا فایل Core_cm3.h و System_lpc17xx.h به پروژه خود به خود اضافه میشن و خود به خود به پوشه پروژه کپی میشن و اگر نشدن و یا خودتان میخواهید دستی این کار را انجام دهید در بین فایل های CMSIS که دانلود کردید یک پوشه به اسم Core هست که داخل آن این فایل ها هست کپی کنید و ببرید داخل پوشه پروژه و از قسمت پروژه Keil به پروژه معرفی کنید.

مطلب پیشنهادی:  اتصال ماژول 433Mhz RF به STM32

افزودن فایل های Driver به پروژه

همراه فایل های CMSIS یک پوشه هست به اسم Drivers که داخل آن کل کتابخونه های درایور برای کار با امکانات میکروکنترلر هستن مثل GPIO ,SPI,USB خب داخل این پوشه بازم دوتا پوشه هست به اسم های  که include, source داخل include فایل های h و داخل source فایل های C وجود دارند. شما میتونید. هر دو پوشه را داخل پروژه کپی کنید تا راحت بشید ولی چون حجم پروژه زیاد میشه میتونید به هر کدام از فایل ها که نیاز داشتیم از هر دو پوشه کپی کنید داخل پوشه پروژه.

مثلا : میخواهیم با پورت های ورودی و خروجی LPC1768 کار کنیم

  • روش اول از داخل هر دو پوشه فایل های زیر را کپی میکنیم به پوشه پروژه lpc17xx_gpio.c , lpc17xx_gpio.h  و  البته شاید به فایل های زیر هم نیاز داشته باشیم lpc17xx_libcfg_default.H وlpc_types.h  که این اینطوری حجم پروژه کم میشه و البته در خروجی هگز تاثیر نداره فقط حجم پوشه پروژه زیاد میشه.
  • روش دوم کل پوشه های include, source  را بصورت پوشه ای کپی میکنیم داخل فایل پروژه و هر فایلی را نیاز داشتیم فراخوانی میکنیم.

فراخوانی کتابخانه های CMSIS در پروژه

خب تا این مرحله یا توابع CMSIS آشنا شدیم و متوجه شدیم چطوری این فایل ها را به پروژه اضافه کنیم حالا باید این فایل ها را در پروژه فراخوانی کنیم.

مطلب پیشنهادی:  واحد کنترل اینتراپت بخش دوم(NVIC)

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

اضافه کردن فایل سی به فایل های پروژه keil : ایجاد پروژه در keil

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

 #include "lpc17xx_gpio.h"

روش دوم وقتی که فایل های هدر داخل پوشه هستن مثلا پوشه inc داخل پوشه پروژه باشن:

#include "inc/lpc17xx_gpio.h"

 

در جلسه بعدی کار با پورت های ورودی و خروجی (lpc17xx_gpio.h) های میکروکنترلر را شروع میکنیم.

اگر این نوشته‌ برایتان مفید بود لطفا کامنت بنویسید.

مطالعه دیگر جلسات این آموزش<< جلسه قبلی                    جلسه بعدی >>

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

11 دیدگاه

  1. saeidt1370

    با سلام
    برای رفع این error چکاری لازمه انجام بدم؟
    lpc17xx_gpio.h(38): error: #5: cannot open source input file “lpc_types.h”: No such file or directory
    lpc17xx_gpio.h: #include “lpc_types.h”

  2. خیلی خیلی خیلی ممنون بابت مطالب فوق العادتون

  3. سلام
    فایل درایور cmsis lpc17xx دانلود کردم و به پوشه پروژه کپی کردم وداخل نرم افزار از مسیر add groop … هدر فایل gpio را به پروژه اضافه کردم ولی موقع کامپایل خطای no directory میدهد لطفا راهنمایی بفرمایید

    • میلاد جهاندیده

      سلام،
      مرحله اول: دانلود کل فایل cmsis lpc17xx که بصورت فایل زیپ هست
      مرحله دوم اکسترکت کردن این فایل
      مرحله سوم طبق آموزش بالا :کل پوشه های include, source را بصورت پوشه ای کپی میکنیم داخل پوشه پروژه
      مرحله چهارم در داخل مثل عکس بالا add files to group را میزنیم و از داخل پوشه source فایل هایی با پسوند c مورد نیاز را به پروژه اضافه میکنیم.
      مرحله چهارم : حال لازم است فایل هایی با پسوند h را در برنامه نویسی فراخوانی کنیم بازم دو روش هست ولی روش فعلی اینه که وقتی فراخوانی میکنی آدرس پوشه را هم بنویسی مثلا #include “include/lpc17xx_gpio.h” مینویسیم که در آن فایل های h در داخل پوشه include داخل پوشه پروژه هست.
      البته روش دیگری هم برای فراخوانی فایل های هدر هست و اون اینه که در نرم افزار keil برید تنظیمات پروژه، با راست کلیک روی اولین پوشه پروژه و در تنظیمات فک کنم نوشته include directories و اونجا مسیر پوشه ای که فایل های h هست را وارد کنید.

  4. سلام
    هدرفایل lpc_types.h چرا باید به پوشه پروژه اضافه بشه؟
    همینطور هدر فایل lpc17xx_libcfg_default.h ؟؟
    بدون اضافه کردن اینا Error : cannot open source input file “lpc_types.h”: No such file or directory و cannot open source input file “lpc17xx_libcfg_default.h ”: No such file or directory میده.
    وقتی path هدر فایل ها رو بهش دادم چرا باید این ارور ها رو بده؟
    توی خود سایت keil هم خیلی گشتم. ولی نتیجه بدردبخوری نداشت. نوشتن mbed lib هاتون رو update کنین.
    اگر ممکنه توضیح بدین. ممنون

    • میلاد جهاندیده

      علت نیاز به هدر های کانفیگ و تایپ متغیر، بخاطر استفاده نویسنده کتاخانه ها، از این موارد در داخل کتابخانه است.(حتی اگر استفاده هم نکرده باشه فراخوانی کرده.) حالا کاربرد هر کدم چی هست داستان خودش را داره مثلا type برای متغیر ها هست تا اگر کامپایلری با متغیر های مورد استفاده اینا سازگار نبود کل برنامه تغییر نکنه…و باید شما هم برای رعایت استاندارد برنامتون بذارید بنظرم…. ولی مثل توضیحات بالا این فایل ها را هم اضافه کنید نباید هیچ خطایی را بگیره.

  5. سلام، بسیار ممنون از آموزش خوبتون .
    آیا انی آموزش ها برای lpc1788 نیز قابل استفاده هستند؟

  6. سلام روز بخیر
    میدونم شاید ربطی به این آموزش نداره ولی من stm32f103c8 دارم کار میکنم ولی وقتی میخوام بصورت رجیستری برنانه نویسی اینتراپت کنم زیر تابع اینتراپت خط قرمز میادو میگه باید پروتوتایپ بشه وقتیم پروتوتایپشم میکنم بازم جواب نمیره و زیر تابع اینتراپت متلاEXTI0_IRQHandler میاد وارنینگ میزاره.
    و همچنین زیر (~)هم وارنینگ int باید به unsigned بشه رو نمایش میده.

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