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

آموزش ARM

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

 

نرم‌افزار STM32CubeMX

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

در ادامه بیشتر با امکانات این نرم‌افزار آشنا می‌شویم.

 

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

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

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

دانلود فریمورک یا پکیج نرم‌افزاری در STM32CubeMX
دانلود فریمورک یا پکیج نرم‌افزاری در STM32CubeMX

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

دانلود فریمورک یا پکیج نرم‌افزاری در STM32CubeMX
دانلود فریمورک یا پکیج نرم‌افزاری در STM32CubeMX

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

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

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

پس از اتمام دانلود وقت آن است که یک پروژه ایجاد کنیم.

برای ایجاد پروژه مانند تصویر زیر از منوی File گزینه‌ی New Project را انتخاب ‌کنید:

ایجاد پروژه در STM32CubeMX
ایجاد پروژه در STM32CubeMX

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

انتخاب میکروکنترلر در STM32CubeMX
انتخاب میکروکنترلر در STM32CubeMX

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

در ابتدا باید مطابق تصویر زیر RCC یا همان Reset and Clock Control را تنظیم کنید:

RCC یا Reset and Clock Control
RCC یا Reset and Clock Control

چون می‌خواهیم از کریستال روی برد استفاده کنیم، پس 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 به تعداد سیم‌های کمتری برای عمل پروگرام نیاز دارد، توضیحات کامل‌تر را می‌توانید در مقاله‌ی معرفی شده در بالا، بخوانید.

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

پروگرام به دو روش JTAG و SWD
پروگرام به دو روش JTAG و SWD

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

برای اینکه بتوانیم یک کد ساده بنویسیم یکی از پایه‌های میکروکنترلر را در حالت خروجی قرار می‌دهیم. برای این کار مطابق با تصویر زیر پایه PA0 را در حالت GPIO_Output قرار بدهید.

تنظیمات GPIO در STM32CubeMX
تنظیمات GPIO در STM32CubeMX

تنظیماتی که تاکنون انجام دادیم همگی در سربرگ Pinout & Configuration بودند.

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

سربرگ Pinout & Configuration
سربرگ Pinout & Configuration

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

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

برای این کار باید سربرگ Project Manager را طبق توضیحاتی که در ادامه داده خواهد شد، تنظیم کنید.

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

خروجی گرفتن در نرم‌افزار STM32CubeMX برای نرم‌افزار Keil
خروجی گرفتن در نرم‌افزار STM32CubeMX برای نرم‌افزار Keil

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

تنظیمات خروجی کد در STM32CubeMX
تنظیمات خروجی کد در STM32CubeMX

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

انتخاب توابع LL در STM32CubeMX
انتخاب توابع LL در STM32CubeMX

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

رفتن از نرم‌افزار STM32CubeMX به نرم‌افزار Keil
رفتن از نرم‌افزار STM32CubeMX به نرم‌افزار Keil

 

نرم‌افزار Keil

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

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

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

تنظیمات پروگرام در Keil
تنظیمات پروگرام در Keil

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

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

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

LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0);
LL_mDelay(500);
LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0);
LL_mDelay(500);

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

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

/* USER CODE BEGIN */

/* USER CODE END */

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

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

کامپایل و دانلود کد در Keil
کامپایل و دانلود کد در Keil

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

کانال تلگرام آرملینکس

برای دسترسی به کانال تلگرام و دانلود فایل‌های پروژه و ویدئو، بر روی دکمه زیر کلیک کنید:

دیدگاه‌ خود را بنویسید

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

اسکرول به بالا