در قسمت دوم از آموزش STM32 با توابع LL، در رابطه با چند بیتی بودن پردازنده و مزایای آن صحبت کردیم. در ادامه با نحوهی پیکرهبندی و همچنین روشهای مختلفی که برای آن وجود دارد آشنا شدیم. نهایتا هم با چندین نوع کتابخانه و تابع آشنا شدیم که گفتیم در ادامه از توابع LL استفاده خواهیم کرد. در این قسمت ابتدا با نرمافزار STM32CubeMX آشنا میشویم سپس ایجاد یک پروژه با استفاده از این نرمافزار را شرح میدهیم و در نهایت یک کد ساده را با استفاده از نرمافزار Keil خواهیم نوشت و به صورت عملی با استفاده از پروگرامر، برنامه را بر روی برد پروگرام خواهیم کرد.
نرمافزار STM32CubeMX
این نرمافزار از سمت شرکت ST برای پیکرهبندی اولیه کد در نظر گرفته شده است. نرمافزار STM32CubeMX یک محیط گرافیکی بسیار زیبا و کاربر پسند دارد که فقط با استفاده از چند کلیک میتوانید میکروکنترلر خود را پیکرهبندی اولیه کنید.
در ادامه بیشتر با امکانات این نرمافزار آشنا میشوبم.
فریمورک یا پکیج نرمافزاری STM32F1
پس از نصب نرمافزار STM32CubeMX اولین کاری که باید بکنید این است که فریمورک یا همان پکیج نرمافزاری میکروکنترلری که میخواهید با آن کار بکنید را دانلود کنید. در اینجا چون ما از میکروکنترلر STM32F103C8T6 استفاده میکنیم پس فریمورک مربوط به سری STM32F1 را دانلود میکنیم. دقت کنید که برای هر سری از میکروکنترلرهای شرکت ST یک فریمورک وجود دارد که آن فریمورک قابل استفاده برای تمامی میکروکنترلرهای موجود در آن سری است.
برای دانلود فریمورک مانند تصویر زیر از منوی Help گزینهی Manege embedded software packages را انتخاب کنید:
پس از انتخاب گزینهی Manege embedded software packages با پنجرهی زیر روبهرو میشوید:
در این پنجره، سری STM32F1 را باز کرده و آخرین ورژن آن را دانلود میکنیم. برای دانلود نیاز است که مربع کوچک سمت چپ تصویر را تیک بزنید و بر روی Install NOW کلیک کنید. چون ما قبلا این پکیج را دانلود کرده بودیم مربع کوچک به رنگ سبز در آمده است.
دقت کنید که شرکت ST طبق پیروی از پروتکلهای تحریم ایالات متحده آمریکا ما را فیلتر کرده است و اجازهی دانلود نمیدهد. پس بهتر است که از فیلترشکن برای دانلود این پکیج استفاده بکنید.
اگر به تصویر بالا دقت کنید دو راه دیگر نیز برای اضافه کردن فریمورک به نرمافزار وجود دارد. یک راه از طریق محلی، یعنی اگر پکیج را در کامپیوترتان ذخیره دارید میتوانید آن را اضافه کنید و یک راه دیگر از طریق URL. در راه دوم میتوانید از آدرس URLای استفاده کنید که فیلتر نباشد.
پس از اتمام دانلود وقت آن است که یک پروژه ایجاد کنیم.
برای ایجاد پروژه مانند تصویر زیر از منوی File گزینهی New Project را انتخاب کنید:
پس از انتخاب گزینهی New Project با پنجرهی زیر روبهرو میشوید:
در این پنجره، در محل مشخص شده اسم میکروکنترلر را جستجو کرده و سپس بر روی اسم آن دابل کلیک کرده تا به صفحهی مربوط به تنظیمات اولیه این میکروکنترلر هدایت شوید.
در ابتدا باید مطابق تصویر زیر 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 به تعداد سیمهای کمتری برای عمل پروگرام نیاز دارد، توضیحات کاملتر را میتوانید در مقالهی معرفی شده در بالا، بخوانید.
همانطور که در تصویر زیر مشاهده میکنید ما از دو روش برای پروگرام کردن میکروکنترلر استفاده خواهیم کرد.
ابتدا روش 1 را انتخاب کنید تا با ST-Link برنامه را پروگرام کنیم. البته با انتخاب هر روش نیاز است که متناظر با آن روش تنظیماتی هم در نرمافزار Keil انجام شود.
برای اینکه بتوانیم یک کد ساده بنویسیم یکی از پایههای میکروکنترلر را در حالت خروجی قرار میدهیم. برای این کار مطابق با تصویر زیر پایه PA0 را در حالت GPIO_Output قرار بدهید.
تنظیماتی که تاکنون انجام دادیم همگی در سربرگ Pinout & Configuration بودند.
اجالتا بدون اینکه دلیلش را بدانید در سربرگ Clock Configuration نیز تنظیمات را مانند تصویر زیر انجام بدهید:
خب هر آن چیزی که نیاز یک پروژه ساده بود را تنظیم کردیم، اکنون وقت آن است که این پیکرهبندی و تنظیمات که به صورت گرافیکی انجام شد را به یک محیط برای کدنویسی انتقال بدهیم.
در نرمافزار STM32CubeMX میتوانیم از پروژهی که به صورت گرافیکی پیکرهبندی شد، برای نرمافزارهای ویرایش و کامپایل کد، خروجی بگیریم. سه نرمافزار شناختهشده و قدرتمندی که میتوان برای آنها خروجی گرفت عبارتاند از Keil ،IAR و STM32CubeIDE. البته ما در اینجا قصد داریم که برای نرمافزار Keil ورژن 5 خروجی بگیریم و برنامه را در این نرمافزار ویرایش، کامپایل و نهایتا پروگرام بکنیم.
برای این کار باید سربرگ Project Manager را طبق توضیحاتی که در ادامه داده خواهد شد، تنظیم کنید.
در بخش Project مانند تصویر زیر ابتدا یک نام و محل دلخواه برای پروژه انتخاب کنید و همچنین در بخش Toolchain / IDE گزینهی MDK-ARM V5 که معادل نرمافزار Keil ورژن 5 است را انتخاب کنید:
در بخش Code Generator مانند تصویر زیر تنظیمات را انجام بدهید، فقط توجه کنید که حتما گزینهی Keep User Code when re-generating انتخاب شده باشد، چون در غیر این صورت با هر بار تنظیم و پیکرهبندی دوباره، کدهایی که در نرمافزار Keil توسط کاربر نوشته میشوند حذف خواهند شد.
و در نهایت در بخش Advanced Setting مانند تصویر زیر توابع را از نوع LL انتخاب کنید (به صورت پیشفرض بر روی توابع HAL قرار دارد) و سپس بر روی گزینهی GENERATE CODE کلیک کنید.
پس از اینکه خروجی برای نرمافزار Keil گرفته شد با پیام زیر روبهرو میشویم که باید گزینهی Open Project را انتخاب بکنیم تا پروژه باز شود.
نرمافزار Keil
Keil یکی از قدرتمندترین نرمافزارها برای ویراش و کامپایل کد است. امکانات جانبی این نرمافزار از جمله محیط دیباگ، آنالیز زمانی عملکرد میکروکنترلر، ارتباط با پروگرامرهای مختلف، انتخاب کامپایلر و … شما را از هر نرمافزار دیگری بینیاز میکند.
پس از اینکه نرمافزار Keil باز شد، در ابتدا باید تنظیمات مربوط به پروگرامر را انجام بدهیم.
همانطور که گفتیم به دو روش میتوان میکروکنترلرهای ST را پروگرام کرد (البته ما در اینجا دو روش را بررسی میکنیم وگرنه روشهای دیگری مثل پروگرام از طریق boot و با استفاده از UART نیز ممکن است)، در تصویر زیر اگر شماره 1 را انتخاب کنید باید با استفاده از پروگرامر ST-Link و پروتکل SWD پروگرام انجام شود و اگر شماره 2 انتخاب شود باید با استفاده از J-Link و پروتکل JTAG پروگرام انجام شود.
هدف ما در این مقاله آشنایی با نرمافزار 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 */
خب وقت آن است که کد را کامپایل و سپس دانلود کنیم تا نتیجه را بر روی برد مشاهده کنیم.
برای این دو عمل باید مانند تصویر زیر به ترتیب نشان داده شده بر روی آیکونهای مربوطه کلیک کنید:
قابل ذکر است که این مجموعه مقالات با همکاری وبسایت آرملینکس گردآوری شده است. علاوه بر مقاله، ویدئوی معادل همین مقاله نیز ضبط شده است که شما میتوانید برای مشاهده این مقاله به همراه ویدئوی آن، به این صفحه مراجعه کنید.
در قسمت چهارم واحد RCC، تنظیمات مربوط به کلاک، PLL و Reset را با جزئیات، به طور کامل بررسی و همچنین یک برد سادهی آموزشی را برای اینکه بتوانید همراه با ما برنامههایتان را تست عملی کنید، معرفی خواهیم کرد.
منبع:سیسوگ