دیروز در شبکههای اجتماعی سایت سؤالی رو مطرح کردم و فکر میکنم سؤال چالشی برای خیلی از دوستان بود. سؤال ساده بود: «آیا بدون استفاده از STMCUBE قادر به ساخت پروژه و کانفیگ میکروکنترلر stm هستید؟». البته کتمان نمیکنم که خودم هم خیلی درگیر این مساله هستم و واقعاً فکر میکنم از چه جنبههایی ممکنه دانستن و یا ندانستن چنین جزییاتی به نفع یا به ضرر ما یا پروژه باشد! چیزی که خود من را در نظرسنجی سورپرایز کرد درصد دوستانی بود که نمیتوانستند بدون استفاده از این ابزار پروژه رو بسازند.
مگه بده که نمی توانیم!
نه واقعاً بد نیست! حالا بحث STM32 است ولی قبل از آن چنین ویژگی را نرمافزار کدویژن در اختیار کاربرها قرار میداد، دلیل استقبال گسترده از کدویژن همین کدویزارد شگفتانگیز آن بود، که تنها با چند کلیک کلی کانفیگ دردسرساز رو انجام میداد، حالا به شکل پیشرفتهتری این قابلیت رو نرمافزار stmcube در اختیار کاربرها قرار داده است و حتی اخیراً با اضافه کردن کتابخانههای کاربردی مثل کتابخانه فایل سیستم یا سیستمعامل بلادرنگ یا کتابخانه شبکه و انجام کانفیگ موردنظر در بستر نرمافزار خیلی کاربردیتر از قبل شده است.
بهتر از ابزار چیزی نیست
به جرئت میتوان گفت که نوع بشر بدون استفاده از ابزارهای مختلف قادر به پیشرفت که هیچ حتی ادامه حیات و بقاء هم نبود، از ابزارهای اولیه که سبب شد ادامه حیات برای انسان اولیه ساده شود مثل تبر و تیزه دستساز که با استفاده از سنگ و چوپ درست شده بودند، چه ابزارهای پیشرفته شرکت بوش که سبب پیشی گرفتن صنعت آلمان از رقبا شد.
پس این سوءتفاهم را کنار بگذارید که اگر کسی از فلان نرمافزار یا ابزار استفاده میکند یا نمیکند، آدم حرفهای یا خفنی است (متأسفانه این دید را در دوستان زیادی دیدهام). آنچه اهمیت دارد این است که بتوانید کار کردن با ابزارهای مختلف را بیاموزید و بدانید در کجا بهتر است از چه ابزاری استفاده کنید.
بگذارید مقداری دقیقتر بگویم، سعی کنید مثل فردی نباشید که تنها یک پیچگوشتی دارد و سعی میکند تمام پیچها را با آن پیچگوشتی باز کند. برای کار کردن شما نیاز به ابزارهای مختلفی دارید و باید مهارت کار کردن با آنها را نیز به خوبی بیاموزید.
حالا که ابزار اینقدر خوبه چرا بدون ابزار کار کنیم
این برداشت هم سوءتفاهم است، هیچ کجا از شما نخواستیم که ابزارهای لازم را کنار بگذارید، گاهی نیاز است که بدانید ابزار شما چطور کار میکند و این دانش به شما کمک میکند که بسنجید آیا این ابزار میتوانید مشکل جاری شما را حل کند یا نه! دقیقاً با شابلون مثال قبل ببینید، سعی نکنید شخصی باشید که همه پیچها را با یک پیچگوشتی باز میکند، این شناخت از نحوه کارکرد ابزار شما علاوه بر این که دید خیلی خوبی به شما میدهد شما را قادر به ساخت ابزارهای لازم خودتان را توسعه دهید و ایجاد کنید.
احتمالاً الآن دارید فکر میکنید چه کمکی میکنه وقتی میدونید چطور میکروکنترلر شما بوت میشود، وکتورهای وقفه رو چطور میشود مدیریت کرد، یا این که چطور فایلهای اسمبلی بوت رو کنار فایلهای سی قرار بدید و یه بیلد از پروژه بگیرد، خوب که چی وقتی همه این کارها رو یک نرمافزار برای من انجام میدهد چرا خودم باید چنین جزییاتی رو بدونم؟
برای رانندگی نیاز نیست ماشین رو خودتون بسازید
بگذارید با یک مثال غیر الکترونیکی مسئله رو نگاه کنیم شاید توضیح آن به این شکل سادهتر باشد، فرض کنید قرار است از تهران سفر کنید و برید شمال، یه سفر تفریحی که با خانواده میخواهید بروید (این سفر رو پروژه ببینید)، خوب برای این کار نیاز نیست دقیقاً بدونید ماشین چطور کار میکند، به همین اندازه که بدونید چطور با ماشین میشه رانندگی (رانندگی را ابزار ببینید) کرد و این که چطور باید از ماشین مراقبت کنید مثل چک کردن آب و روغن و آمپرهای مربوطه، کفایت میکند تا شما و خانواده را از تهران به شمال برساند. در اینجا شما به هیچ وجه درگیر جزییات این که ماشین چطور کار میکند نمیشوید لازم نیست که بدانید سیستم جرقهزنی چطور کار میکند یا اصلاً تفاوت انژکتور و کاربراتور در چیست.
حالا بیایید فرض کنید شما قرار است در مسیری یک بار ده تنی را حمل کنید (نوع دیگری از پروژه) اینجا فقط دانش رانندگی کافی نیست، علاوه بر این باید بدانید که ماشین شما آیا تحمل این مقدار بار را دارد یا نه، چرخها و محور خودرو قادر به تحمل این مقدار بار هست یا نه، باید بدانید آیا موتور ماشین شما قادر به حمل چنین باری است یا نه، باید بدانید در چه شیبی با چه سرعتی حرکت کنید که حرکت شما دچار مشکل نشود. میبینید که وقتی نوع پروژه فرق کرد علاوه بر این که به ماشین نیاز دارید باید مقداری از جزییات عملکردی آن نیز آگاه باشید.
حالا فرض کنید شما راننده فرمول وان هستید و قصد دارید در مسابقه جایزه بزرگ اتومبیل رانی شرکت کنید، اینجا مهارت رانندگی تنها پیششرط راننده بودن است، شما بهعنوان راننده باید بدانید دقیقاً موتور خودروی شما تا چه اندازه میتواند تحت فشار قرار بگیرد، چقدر میتوانید دورموتور را بالا ببرید و بالا نگه دارید و … در واقع برای موفقیت در مسابقه علاوه بر رانندگی شما باید جزییات زیادی از عملکرد خودروی خودتان را بدانید که بدون دانستن آنها ممکنه از خط پایان عبور کنید ولی نفر اول نخواهید بود.
وقتی قرار باشد از تمام امکانات و قابلیتهای میکروکنترلر استفاده کنید، تنها توانایی کار کردن با چیزی مثل stmcube کافی نیست، بلکه باید جزییات عملکردی اجزاء سیستم را به خوبی درک کرده باشید و در این صورت است که میتوانید بهترین نتیجه را بگیرید.
آیا باید بلد باشیم ماشین هم بسازیم
بستگی داره که شما خودتون رو کدام یکی از رانندههای مثال بالا ببینید، اگر شما آن شخصی هستید که پروژههای جنرال و دمدستی رو انجام میده، خوب اگر هیچ وقت یاد نگیرید ماشین چطور کار میکند قطعاً کارتان دچار مشکل جدی نمیشود و میتوانید به فعالیت خودتون ادامه بدید بدون این که مشکل خاصی داشته باشید.
اما اگر قصد دارید پروژههای خاص بگیرد، پروژههای تولیدی و هایتک از این دسته پروژهها هستن، نیازه علاوه بر این که رانندگی بلد هستید باید بدانید ماشین شما چطور کار میکند تا در بزنگاهها بتوانید از تمام پتانسیل آن استفاده کنید.
تفاوت یک راننده معمولی و یک راننده فرمول یک در جزییاتی که از عملکرد خودرو میدانند و البته مهارت آنها در رانندگی است!
آیا من از Stmcube استفاده میکنم
بله چرا که نه! ولی برای من همیشه کاربرد ندارند، مثلاً اگر بخواهم تایمری را کانفیگ کنم یا پریفرال spi را راه اندازی کنم، زمان باز شدن نرمافزار از زمانی که خودم قادر به نوشتن کد مروبطه هستم بیشتر است، پس برای موضوعهای اینچنینی ازش استفاده نمیکنم، ولی اگر دنبال میکروکنترلر خاصی باشم که دارای حداقلهایی باشد حتماً از آن استفاده میکنم، یا مثلاً اگر قصد داشته باشم ضرایب ورودی فلان پریفرال رو بررسی کنم یا این ببینم کدام پایهها را برای چه منظوری میتوانم استفاده کنم
آخرین باری که استفاده کردم هم میخواستم ببینم برای اضافه کردن کتابخانه ssl از چه کتابخانههایی میتوانم استفاده کنم.
میبینید جواب من بله است.
و در انتها باید بگم که اگر از مخالفهای سرسخت استفاده از آردوینو هستند، و معتقد هستید که استفاده از آردوینو باعث شده که مهندسین سطحی بشن و پایه علم الکترونیک متزلزل بشود توصیه میکنم این پست را از اول بخوانید و بهجای کلمه stmcube از آردوینو استفاده کنید:)
منبع:سیسوگ