آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX  Keil

آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX Keil

آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX  Keil
آموزش STM32 با توابع LL قسمت سوم: STM32CubeMX  Keil

در قسمت دوم از آموزش STM32 با توابع LL، در رابطه با چند بیتی بودن پردازنده و مزایای آن صحبت کردیم. در ادامه با نحوه‌ی پیکره‌بندی و همچنین روش‌های مختلفی که برای آن وجود دارد آشنا شدیم. نهایتاً هم با چندین نوع کتاب‌خانه و تابع آشنا شدیم که گفتیم در ادامه از توابع LL استفاده خواهیم کرد. در این قسمت قصد داریم آموزش STM32CubeMX در LL و آموزش Keil در LL را بدهیم و با نرم‌افزار STM32CubeMX آشنا شویم سپس ایجاد یک پروژه با استفاده از این نرم‌افزار را شرح دهیم و درنهایت یک کد ساده را با استفاده از نرم‌افزار Keil خواهیم نوشت و به‌صورت عملی با استفاده از پروگرامر، برنامه را بر روی برد پروگرام خواهیم کرد.

 

نرم‌افزار STM32CubeMX

این نرم‌افزار از سمت شرکت ST برای پیکره‌بندی اولیه کد در نظر گرفته‌شده است. نرم‌افزار STM32CubeMX یک محیط گرافیکی بسیار زیبا و کاربرپسند دارد که فقط با استفاده از چند کلیک می‌توانید میکروکنترلر خود را پیکره‌بندی اولیه کنید. در ادامه بیشتر با امکانات این نرم‌افزار آشنا می‌شویم.

 

فریمورک یا پکیج نرم‌افزاری STM32F1

پس از نصب نرم‌افزار STM32CubeMX اولین کاری که باید بکنید این است که فریمورک یا همان پکیج نرم‌افزاری میکروکنترلری که می‌خواهید با آن کار بکنید را دانلود کنید. در اینجا چون ما از میکروکنترلر STM32F103C8T6 استفاده می‌کنیم پس فریمورک مربوط به سری STM32F1 را دانلود می‌کنیم. دقت کنید که برای هر سری از میکروکنترلرهای شرکت ST یک فریمورک وجود دارد که آن فریمورک قابل‌استفاده برای تمامی میکروکنترلرهای موجود در آن سری است.

برای دانلود فریمورک مانند تصویر زیر از منوی Help گزینه‌ی Manege embedded software packages را انتخاب کنید:

 

فریمورک STM32F1

 

پس از انتخاب گزینه‌ی Manege embedded software packages با پنجره‌ی زیر روبه‌رو می‌شوید:

 

فریمورک STM32F1

 

در این پنجره، سری STM32F1 را بازکرده و آخرین ورژن آن را دانلود می‌کنیم. برای دانلود نیاز است که مربع کوچک سمت چپ تصویر را تیک بزنید و بر روی Install NOW کلیک کنید. چون ما قبلاً این پکیج را دانلود کرده بودیم مربع کوچک به رنگ سبز درآمده. دقت کنید که شرکت ST طبق پیروی از پروتکل‌های تحریم ایالات‌متحده آمریکا ما را فیلتر کرده است و اجازه‌ی دانلود نمی‌دهد. پس بهتر است که از فیلترشکن برای دانلود این پکیج استفاده بکنید.

اگر به تصویر بالا دقت کنید دو راه دیگر نیز برای اضافه کردن فریمورک به نرم‌افزار وجود دارد. یک راه از طریق محلی، یعنی اگر پکیج را در کامپیوترتان ذخیره دارید می‌توانید آن را اضافه کنید و یک راه دیگر از طریق URL است، درراه دوم می‌توانید از آدرس URL ای استفاده کنید که فیلتر نباشد. پس از اتمام دانلود وقت آن است که یک پروژه ایجاد کنیم. برای ایجاد پروژه مانند تصویر زیر از منوی File گزینه‌ی New Project را انتخاب کنید:

 

ایجاد پروژه در نرم‌افزار STM32CubeMX

پس از انتخاب گزینه‌ی New Project با پنجره‌ی زیر روبه‌رو می‌شوید:

ایجاد پروژه در نرم‌افزار STM32CubeMX

در این پنجره، در محل مشخص‌شده اسم میکروکنترلر را جستجو کرده و سپس بر روی اسم آن دابل کلیک کرده تا به صفحه‌ی مربوط به تنظیمات اولیه این میکروکنترلر هدایت شوید. در ابتدا باید مطابق تصویر زیر RCC یا همان Reset and Clock Control را تنظیم کنید:

تنظیمات پروژه در نرم‌افزار STM32CubeMX

 

چون می‌خواهیم از کریستال روی برد استفاده کنیم، پس RCC را بر روی Crystal/Ceramic Resonator تنظیم می‌کنیم. با فعال کردن RCC مشاهده می‌کنید که وضعیت پین‌های میکروکنترلر نیز تغییر کرده است. در نرم‌افزار STM32CubeMX با تنظیم هر واحد، وضعیت پین‌های متناظر با آن واحد نیز به‌صورت گرافیکی تغییر خواهند کرد. چون در این قسمت هدف ما آشنایی با نرم‌افزارها و روش‌های پروگرام کردن است، از توضیحات مربوط به بخش RCC و تنظیمات کلاک میکروکنترلر صرف‌نظر می‌کنیم، اما در قسمت بعد بخش RCC و تنظیمات مربوط به کلاک را مفصلاً توضیح خواهیم داد، پس شما در این قسمت تنظیمات مربوط به بخش RCC را طبق تصاویر تنظیم کنید.

پس از تنظیم RCC باید مشخص کنیم که میکروکنترلر قرار است به چه نحوی پروگرام شود. تنظیمات مروبط به پروگرام باید در بخش SYS انجام بگیرد. معمولا میکروکنترلرهای ST را به دو روش JTAG و SWD پروگرام می‌کنند. پیشنهاد می‌شود اطلاعات بیشتر در رابطه با JTAG و SWD را در اینترنت پیدا کنید. در این مقاله ما با هر دو روش پروگرام را انجام خواهیم داد. درروش SWD نیاز به پروگرامر ST-Link و درروش JTAG نیاز به پروگرامر J-Link داریم. البته با پروگرامر J-Link به روش SWD هم می‌توانیم عمل پروگرام را انجام بدهیم.

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

 

تنظیمات پروژه در نرم‌افزار STM32CubeMX

ابتدا روش 1 را انتخاب کنید تا با ST-Link برنامه را پروگرام کنیم. البته با انتخاب هر روش نیاز است که متناظر با آن روش تنظیماتی هم در نرم‌افزار Keil انجام شود. برای اینکه بتوانیم یک کد ساده بنویسیم یکی از پایه‌های میکروکنترلر را در حالت خروجی قرار می‌دهیم. برای این کار مطابق با تصویر زیر پایه PA0 را در حالت GPIO_Output قرار بدهید.

تنظیمات پروژه در نرم‌افزار STM32CubeMX

تنظیماتی که تاکنون انجام دادیم همگی در سربرگ Pinout & Configuration بودند. اجالتا بدون اینکه دلیلش را بدانید در سربرگ Clock Configuration نیز تنظیمات را مانند تصویر زیر انجام بدهید:

تنظیمات پروژه در نرم‌افزار STM32CubeMX

 

خب هر آن چیزی که نیاز یک پروژه ساده بود را تنظیم کردیم، اکنون وقت آن است که این پیکره‌بندی و تنظیمات که به‌صورت گرافیکی انجام شد را به یک محیط برای کد نویسی انتقال بدهیم. در نرم‌افزار STM32CubeMX می‌توانیم از پروژه‌ی که به‌صورت گرافیکی پیکره‌بندی شد، برای نرم‌افزارهای ویرایش و کامپایل کد، خروجی بگیریم. سه نرم‌افزار شناخته‌شده و قدرتمندی که می‌توان برای آن‌ها خروجی گرفت عبارت‌اند از Keil، IAR و STM32CubeIDE. البته ما در اینجا قصد داریم که برای نرم‌افزار Keil ورژن 5 خروجی بگیریم و برنامه را در این نرم‌افزار ویرایش، کامپایل و نهایتاً پروگرام بکنیم.

برای این کار باید سربرگ Project Manager را طبق توضیحاتی که در ادامه داده خواهد شد، تنظیم کنید. در بخش Project مانند تصویر زیر ابتدا یک نام و محل دلخواه برای پروژه انتخاب کنید و همچنین در بخش Toolchain / IDE گزینه‌ی MDK-ARM V5 که معادل نرم‌افزار Keil ورژن 5 است را انتخاب کنید:

 

تنظیمات پروژه در نرم‌افزار STM32CubeMX

در بخش Code Generator مانند تصویر زیر تنظیمات را انجام بدهید، فقط توجه کنید که حتماً گزینه‌ی Keep User Code when re-generating انتخاب‌شده باشد، چون در غیر این صورت با هر بار تنظیم و پیکره‌بندی دوباره، کدهایی که در نرم‌افزار Keil توسط کاربر نوشته می‌شوند حذف خواهند شد.

تنظیمات پروژه در نرم‌افزار STM32CubeMX

و درنهایت در بخش Advanced Setting مانند تصویر زیر توابع را از نوع LL انتخاب کنید (به‌صورت پیش‌فرض بر روی توابع HAL قرار دارد) و سپس بر روی گزینه‌ی GENERATE CODE کلیک کنید.

تنظیمات پروژه در نرم‌افزار STM32CubeMX

پس‌ازاینکه خروجی برای نرم‌افزار Keil گرفته شد با پیام زیر روبه‌رو می‌شویم که باید گزینه‌ی Open Project را انتخاب بکنیم تا پروژه باز شود.

تنظیمات پروژه در نرم‌افزار STM32CubeMX

نرم‌افزار Keil

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

همان‌طور که گفتیم به دو روش می‌توان میکروکنترلرهای ST را پروگرام کرد (البته ما در اینجا دو روش را بررسی می‌کنیم وگرنه روش‌های دیگری مثل پروگرام از طریق boot و با استفاده از UART نیز ممکن است)، در تصویر زیر اگر شماره 1 را انتخاب کنید باید با استفاده از پروگرامر ST-Link و پروتکل SWD پروگرام انجام شود و اگر شماره 2 انتخاب شود باید با استفاده از J-Link و پروتکل JTAG پروگرام انجام شود.

 

نرم‌افزار Keil

 

هدف ما در این مقاله آشنایی با نرم‌افزار STM32CubeMX و همین‌طور نرم‌افزار Keil بود اما برای اینکه تنظیمات اعمال‌شده را تست بکنیم، در ادامه یک کد ساده را می‌نویسیم و بر روی برد پروگرام می‌کنیم.

همان‌طور که مستحضر هستید یا شاید هم نیستید، ساده‌ترین کد در دنیای الکترونیک یک چراغ چشمک‌زن است که معادل همان برنامه Hello world در دنیای کامپیوتر است.

برای برنامه چشمک‌زن باید کد زیر را در حلقه while بنویسیم.

این کد را در قسمت مربوط به GPIO بررسی و تحلیل خواهیم کرد.

همچنین در نظر داشته باشید برای اینکه هم کد تمیزی نوشته باشید و هم اگر خواستید پروژه را در نرم‌افزار STM32CubeMX تغییر بدهید و دوباره خروجی بگیرید، و کدهایی که توسط شما نوشته شد حذف نشود، باید کدتان را در هر بخش شبیه الگوی زیر بین دو عبارت بنویسید.

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

برای این دو عمل باید مانند تصویر زیر به ترتیب نشان داده‌شده بر روی آیکون‌های مربوطه کلیک کنید:

 

نرم‌افزار Keil

 

در قسمت چهارم واحد RCC، تنظیمات مربوط به کلاک، PLL و Reset را با جزئیات به‌طور کامل بررسی و همچنین یک برد ساده‌ی آموزشی را برای اینکه بتوانید همراه با ما برنامه‌هایتان را تست عملی کنید، معرفی خواهیم کرد.

لینک پروژه در گیت هاب

2 نفر

پــــســنــدیـده انـد

توجه

دیدگاه ها

16 دیدگاه

  • محمد رضا
    ۶ اردیبهشت ۱۴۰۰

    سلام آقای جلیلی عزیز .ممنون از کمکی که به رشد علمی دوستان دارید.سوالی داشتم:
    -در قسمت project manager گزینه toolchain/ide فعال نیست و لذا گزینه mdk -arm را نمیتوان انتخاب کرد.
    ممنون از لطف شما.

    • کامین جلیلی
      ۱۰ خرداد ۱۴۰۰

      سلام محمدرضا جان. خواهش می‌کنم نظر لطف‌تون. این گزینه را کلا مشاهده نمی‌کنید، یا مشاهده می‌کنید ولی فعال نیست؟

  • ALI
    ۱۵ اسفند ۱۳۹۹

    سلام اموزش عالی فقط چرا تو پروتوس شبیه سازی ک میشه هیچ اتفاقی نمی افته؟؟

    • کامین جلیلی
      ۱۶ اسفند ۱۳۹۹

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

      ببینید کجا را اشتباه رفتید. ولی به نظرم از محیط شبیه‌ساز و دیباگ خود کیل استفاده کنید، بهتر از پروتئوس.

  • محمدرضا
    ۲۷ بهمن ۱۳۹۹

    سلام
    قسمت 1 و 2 رو به صورت فیلم دیدم و متن مقاله رو هم خوندم. خیلی خیلی خوب بود. به نظرم مشکل ترین بخش اینه که یه دید کلی در ابتدای کار داشته باشیم و بفهمیم چی به چی هست که شما به خوبی این دید رو به حداقل خود من دادین و یه جورایی ذهنم رو دسته بندی کردین!

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

    • کامین جلیلی
      ۲۸ بهمن ۱۳۹۹

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

      • محمدرضا
        ۲۸ بهمن ۱۳۹۹

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

  • مهدی
    ۲۳ مرداد ۱۳۹۹

    سپاس از آموزش خوب ، خلاصه و بدون حاشیه

    • Kamin Jalili
      ۲۳ مرداد ۱۳۹۹

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

  • شهناز
    ۲۳ مرداد ۱۳۹۹

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

    • Kamin Jalili
      ۲۳ مرداد ۱۳۹۹

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

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

  • َAmir
    ۲۳ مرداد ۱۳۹۹

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

    • Kamin Jalili
      ۲۳ مرداد ۱۳۹۹

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

  • علی
    ۲۲ مرداد ۱۳۹۹

    قسمت جذابش اونجاییه که کتابخونه رو از HAL به LL تغییر میدین .
    عالیه .
    منتظر قسمت بعدی هستم

    • Kamin Jalili
      ۲۳ مرداد ۱۳۹۹

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه دوم : چالش برنامه نویسی به زبان C

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
راه اندازی LCD گرافیکی Nokia 1661

راه اندازی LCD گرافیکی Nokia 1661

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش
ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش
همه چیز درباره ریموت کنترل‌های هاپینگ

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش
مسابقه سوم: استخراج داده از رشته ها در زبان C

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش
مسابقه ششم: بزن میکروکنترلر را بسوزون!

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 12 ماه پیش
آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش
کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

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

Mahdi.h   Mahdi.h  
  • 3 سال پیش
ساخت ماینر با FPGA و ARM

ساخت ماینر با FPGA و ARM

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

Zeus ‌ Zeus ‌
  • 3 سال پیش
مسابقه چهارم: کدام حلقه سریع‌تر است؟

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 2 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک