در قسمت قبل، به معرفی میکروکنترلرهای STM32 و ویژگیهای کلی هر دسته پرداختیم. در این قسمت از آموزش قصد داریم تا با استفاده از نرمافزارهای CubeMX و KEIL تنظیمات میکروکنترلر و برنامه نویسی را انجام دهیم.
در این جلسه ابتدا به آموزش نرم افزار CubeMX میپردازیم و تنظیمات آن را برای یک پروژه ساده بیان میکنیم و در جلسه بعد آن را به محیط KEIL برده و برنامه نویسی را آغاز میکنیم. با ما همراه باشید…
شروع آموزش میکروکنترلرSTM32
ایجاد پروژه:
این قسمت از آموزش را به راهاندازی GPIO میکروکنترلر اختصاص میدهیم. در این آموزش تصمیم داریم تا از میکروکنترلر STM32f103C8T6 که در دسته mainstream قرار دارد و از سری پردازنده CORTEX-M3 استفاده میکند(برای اطلاعات بیشتر راجع به این دسته میتوانید به جلسه قبل مراجعه کنید) استفاده میکنیم؛ زیرا این میکروکنترلر دارای قیمتی نسبتا مناسب است و راحتتر میتوان آن را تهیه نمود.
برای شروع ابتدا نرمافزار CubeMX را باز میکنیم و سپس گزینه new project را از نوار ابزار file انتخاب میکنیم
در ادامه با جست و جوی میکروکنترلر مورد نظر(STM32f103c8t6) و انتخاب آن پروژه را میسازیم:
حال همانگونه که در تصویر زیر مشاهده میکنید، شمای میکروکنترلر انتخابی و تنظیمات آن در صفحه نمایش داده میشود. ابتدا توضیح مختصری در مورد بخشهای آن می دهیم و سپس تنظیمات مربوط به پروژه را انجام می دهیم.
در تصویر زیر، بخش ۱ مربوط به تنظیمات Pinout و که محل انتخاب نوع و عملکرد پایههای مختلف میکروکنتراست، میباشد.
بخش ۲ مربوط به تنظیمات کلاک میکروکنترلر است و با انتخاب آن میتوان فرکانس کلاک و تنظیمات آن را مشاهده و تغییر داد.
بخش۳ مربوط به ساخت پروژه و نامگذاری و چگونگی تولید کد در نرم افزار KEIL میباشد
بخش ۴ قسمت ابزار نرمافزار میباشد که در آن تنظیمات PCC را انجام میدهیم.
بخش ۱-۱ نیز که زیر مجموعه بخش اول می باشد، مربوط به تنظیمات پایه های میکروکنترلر است و هر بخش به صورت دستهبندی قرار داده شده و با مرجعه به آنها میتوان بخش های مختلف میکروکنترلر نظیر تایمر، پایههای آنالوگ، بخش ارتباطات میکرو کنترلر و سایر بخشها تنظیم کرد.
تنظیمات مربوط به پروژه:
در ادامه از قسمت۱-۱ به دسته system Core رفته و با انتخاب SYS نوع پروگرامر و دیباگر را تنظیم میکنیم و همچنین تأخیر مورد استفاده در برنامه را به مانند عکس زیر تنظیم میکنیم:
پس از تنظیم نوع پروگرامر به سراغ تنظیمات کلاک میکروکنترلر رفته و از طریق دسته system Core، بخش RCC را انتخاب میکنیم و در صورتی که بخواهیم از کریستال خارجی استفاده کنیم تنظیمات زیر را انجام میدهیم. البته توجه داشته باشید که در حالت عادی تنظیمات کلاک میکروکنترلر روی گزینه HSI یا همان کلاک سریع داخلی با فرکانس ۸ مگاهرتز تنظیم شده است.
حال در ادامه به بخش Clock Configuration میرویم و توسط واحد PLL( ضرب و تقسیم کننده ها) فرکانس کاری میکروکنترلر را مطابق تصویر زیر تنظیم کنیم.
در این قسمت input frequency همان فرکانس خارجی است و بر اساس فرکانس کریستال تعیین میگردد.
HSE ,LSE در واقع مربوط به کلاک سریع و کند خارجی است که در بخش قبل انتخاب شده است. و در این بخش با انتخاب منبع PLL بر اساس این کلاک خارجی و PLLCLK خروجی ضرب کننده را میسازیم.
بخش مهم دیگر قسمت HCLK است که فرکانس کاری میکروکنترلر را تعیین میکند و معمولا با انتخاب آن بر روی حالت بیشینه میکروکنترلر را فعال میکنند. سایر بخش ها نیز در جلسات آینده و بر حسب نیاز آن پروژه توضیح داده خواهند شد.
در تصویر زیر تنظیمات مربوطه را میبینید:
حال با بازگشت به صفحه Pinout نرمافزار تنظیمات مربوط به خروجی میکروکنترلر را انجاممیدهیم به این منظور، از روی شمای گرافیکی میکروکنترلر که در سمت راست صفحه هست پایه PB15 را انتخاب میکنیم. همانگونه که مشاهده می منید قابلیتهای این پایه در لیستی نمایش داده میشود. با انتخاب GPIO_output آن پایه را به عنوان خروجی تعریف میکنیم.
و با راستکلیک کردن روی پایه مذکور میتوانیم نامی برای آن انتخاب کنیم تا در ادامه در بخش کدنویسی راحتتر بتوان پایه ها را از یکدیگر تفکیک کرد(بدین منظور نام LED1 برای آن انتخاب میگردد).
سپس در ادامه اگر به بخش System core در همین صفحه نرمافزار مراجعه کنیم و زیرگروه GPIO را انتخاب کنیم، ملاحظه میکنیم که پایه PB15 در این بخش آورده شده است و با انتخاب آن میتوان تنظیمات زیر را انجام داد:
در تنظیمات مربوط به پایه PB15، ۵ بخش را مشاهده میکنید که کاربرد هرکدام به شرح زیر است:
بخش۱ مربوط به سطح خروجی پایه مذکور میباشد که با انتخاب low/High بودن آن میتوان سطح خروجی این پایه میکروکنترلر را در لحظات اول و قبلا از اجرا شدن کد، ۱ یا ۰ منطقی( ۰ یا ۳٫۳ ولت) تعریف کرد.
بخش۲ مربوط به نوع خروجی پایه انتخابی است و آن پایه میتواند به صورت push-pull و یا open Drain خروجی را ایجاد کند.
در بخش ۳ میتوان خروجی میکروکنترلر را pull-up و یا pull-down و یا هیچکدام تعریف کرد.
بخش ۴ نیز مربوط به سرعت تغییر وضعیت پایه میکروکنترلر میباشد و در صورتی که بخواهیم این تغییر وضعیت بسیار سریع اتفاق بیافتد آنرا بر روی High تنظیم میکنیم( درحالت عادی و در پروژه های معمولی بهتر است از low استفاده شود).
بخش ۵ همان نام انتخابی ای میباشد که در بخش قبل آن را LED1 قرار دادیم.
تنظیمات این قسمت برای پروژه چراغ چشمکزن به همان صورت دیفالت میتواند باشد و نیازی به تغییر نیست.
با انجام تنظیمات فوق، تمام تنظیمات مربوط به پروژه در نرمافزار CubeMX را انجام دادیم و باید در ادامه این پروژه را نامگذاری و ذخیره کنیم. برای این منظور قسمت Project manager رفته و مسیر فایل و نام آنرا انتخاب میکنیم.
بخش مهم این قسمت انتخاب نوع فایل خروجیای است که نرمافزار CubeMX برای سایر نرمافزارهای واسطه ای جهت کدنویسی وجود دارند. و چون در این آموزش ما از نرمافزار KEIL استفاده میکنیم گزینه مشخص شده در بالا و ورژن آن نرم افزار را انتخاب میکنیم.
سایر بخشهای این قسمت نظیر Code Generator نیز در قسمتهای بعدی آموزش و بر حسب نیاز توضیح داده خواهد شد.
تا به اینجا ما میکروکنترلر را در نرمافزار CubeMX انتخاب کرده و تنظیمات مربوط به آن را برای انجام یک پروژهی ساده برای بخش GPIO انجام دادیم. در ادامه با زدن گزینه Code Generator در گوشه بالا سمت راست نرمافزار کدهای پایه این پروژه جهت اجرا در نرمافزار KEIL در مسیر مشخص شده ساخته خواهد شد.
در قسمت بعدی آموزش قصد داریم تا پروژه را به محیط نرم افزاری KEIL ببریم و کدنویسی در این محیط را آموزش دهیم. با ما همراه باشید.
نویسنده: اشکان راکی