در قسمت دوم از آموزش STM32 با توابع LL، در رابطه با چند بیتی بودن پردازنده و مزایای آن صحبت کردیم. در ادامه با نحوهی پیکرهبندی و همچنین روشهای مختلفی که برای آن وجود دارد آشنا شدیم. نهایتاً هم با چندین نوع کتابخانه و تابع آشنا شدیم که گفتیم در ادامه از توابع LL استفاده خواهیم کرد. در این قسمت قصد داریم آموزش STM32CubeMX در LL و آموزش Keil در 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 بنویسیم.
1 2 3 4 | LL_GPIO_SetOutputPin(GPIOA, LL_GPIO_PIN_0); LL_mDelay(500); LL_GPIO_ResetOutputPin(GPIOA, LL_GPIO_PIN_0); LL_mDelay(500); |
این کد را در قسمت مربوط به GPIO بررسی و تحلیل خواهیم کرد.
همچنین در نظر داشته باشید برای اینکه هم کد تمیزی نوشته باشید و هم اگر خواستید پروژه را در نرمافزار STM32CubeMX تغییر بدهید و دوباره خروجی بگیرید، و کدهایی که توسط شما نوشته شد حذف نشود، باید کدتان را در هر بخش شبیه الگوی زیر بین دو عبارت بنویسید.
1 2 3 | /* USER CODE BEGIN */ /* USER CODE END */ |
خب وقت آن است که کد را کامپایل و سپس دانلود کنیم تا نتیجه را بر روی برد مشاهده کنیم.
برای این دو عمل باید مانند تصویر زیر به ترتیب نشان دادهشده بر روی آیکونهای مربوطه کلیک کنید:
در قسمت چهارم واحد RCC، تنظیمات مربوط به کلاک، PLL و Reset را با جزئیات بهطور کامل بررسی و همچنین یک برد سادهی آموزشی را برای اینکه بتوانید همراه با ما برنامههایتان را تست عملی کنید، معرفی خواهیم کرد.
ببخشید گزینه ی open project برای من اصلا نیست.چیکار کنم؟ چند بار هم نرم افزار رو حذف و نصب کردم
ببخشید من گزینه load رو که میزنم با ارور مواجه میشوم در برنامه کیل.
متن ارور:
flash download failed- couldnt load file ledblink/ledblink.axf
باید برید توی تمظیمات پروژه و گیزینه ساخت axf رو فعال کنید.
سلام خسته نباشید پرقدرت به تک تک شما عزیزان
یه سئوال من پروگرمر st link دارم میشود با این پرو گرمر stm32 f را پروگرمر کرد
باتشکر از شما
سلام
ممنون از آموزشهای خوبتون
در تنظیمات کیوب برای من گزینه LL نست فقط گزینهhal وجود داره
سلام دوست عزیز، مرسی از حمایتتون.
برای چه Peripheralای میخواید از این درایور استفاده کنید؟
بعضی از Peripheralها از LL پشتیبانی نمیکنند.
سلام آقای جلیلی عزیز .ممنون از کمکی که به رشد علمی دوستان دارید.سوالی داشتم:
-در قسمت project manager گزینه toolchain/ide فعال نیست و لذا گزینه mdk -arm را نمیتوان انتخاب کرد.
ممنون از لطف شما.
سلام محمدرضا جان. خواهش میکنم نظر لطفتون. این گزینه را کلا مشاهده نمیکنید، یا مشاهده میکنید ولی فعال نیست؟
سلام اموزش عالی فقط چرا تو پروتوس شبیه سازی ک میشه هیچ اتفاقی نمی افته؟؟
سلام علی جان. این کد بر روی سختافزار تست شده و مشکلی نداره، پس در پروتئوس هم باید بدون مشکل اجرا بشه.
ببینید کجا را اشتباه رفتید. ولی به نظرم از محیط شبیهساز و دیباگ خود کیل استفاده کنید، بهتر از پروتئوس.
سلام
قسمت 1 و 2 رو به صورت فیلم دیدم و متن مقاله رو هم خوندم. خیلی خیلی خوب بود. به نظرم مشکل ترین بخش اینه که یه دید کلی در ابتدای کار داشته باشیم و بفهمیم چی به چی هست که شما به خوبی این دید رو به حداقل خود من دادین و یه جورایی ذهنم رو دسته بندی کردین!
خیلی خوب میشد اگر سایر قسمت ها هم ویدیویی بود، البته درک میکنم که وقت زیادی از شما میگیره. میدوارم همین روال متنی با همین کیفیت خوب ادامه داشته باشه و مثل بعضی سایت های دیگه نیمه کاره رها نشه.
بسیار تشکر و خسته نباشید.
سلام محمدرضا جان، خوشحالم از اینکه این مجموعه آموزشی برای شما مفید بوده است. یکم فرصت بدید سعی میکنم بقیه ویدئوها را هم روی سایت آپلود کنم. فعلا یه مشکلی از سمت گوگل به وجود اومده نمیتونم ویدئوهای جدید را آپلود بکنم.
متشکر
راضی به زحمت نیستیم. فقط اگر با همین منوال خوب هم ادامه دار باشه آموزش ها و بعدش پروژه محور بشه کافیست و بسیار عالی.
واقعاً ضبط ویدیوی آموزشی خیلی زمان بر هست.
???
سپاس از آموزش خوب ، خلاصه و بدون حاشیه
سپاس از شما مهدی عزیز که حوصله به خرج دادید و مقاله را مطالعه فرمودید.
واقعا عالی بود. با توجه به تایم زمانی بین قسمت های مختلف ایا راه میانبری برای رسیدن سریعتر به انتهای اموزش وجود دارد؟
شهناز جان خوشحالم از این بابت که این مقاله برای شما مفید بوده و نظر مثبت شما را به دنبال داشته است.
تجربه من از محیط اطرافم میگه که میانبر زدن تو الکترونیک به جای مناسبی ختم نمیشه، بهتره یکم صبر داشته باشید و ممارست بورزید تا نتیجهی بهتری کسب کنید. اما به هر حال با همهی این تفاسیر اگر برای این مورد راهکار یا پیشنهادی دارید من گوش میدم.
سلام
روزتون بخیر
لطفا بفرمایید که لیست توابع LL رو از کجا میشه تهیه کرد.
ممنون
سلام امیر جان، روزت بخیر عزیزم. لیست و تعریف این توابع هم در نرمافزار و هم در یوزر منوالی که شرکت ST ارائه کرده، وجود داره. در قسمت پنجم مواردی که گفتید کامل توضیح داده میشه، حالا بازم اگه سوالی براتون وجود داره یا ابهامی هست بفرمائید تا من پاسخ بدم.
قسمت جذابش اونجاییه که کتابخونه رو از HAL به LL تغییر میدین .
عالیه .
منتظر قسمت بعدی هستم
سپاس از نظر مثبتت علی جان. از قسمت پنجم به بعد که وارد فاز برنامهنویسی میشیم هیجان و جذابیتش خیلی بیشتر میشه.