جلسه 25: پروژه پایانی و انتشار مستندات
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 25 از دوره STM32، موضوع «پروژه نهایی STM32 و مستندسازی» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: نمونه کارکرد، جدول آزمون و فهرست محدودیتها.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به برد، حسگر سازگار، نمایشگر و ابزار اندازهگیری نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: سامانه پایش بساز، خطاها را ثبت کن و مراحل بازتولید را بنویس. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: نمونه کارکرد، جدول آزمون و فهرست محدودیتها. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، کد، نسخه ابزار، مدل قطعات و نتایج اندازهگیری را کنار هم ارائه کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: نتیجه آزمایش را تنها برای مدل سختافزاری آزمایششده ادعا کن. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل پروژه پایانی و انتشار مستندات را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: کد، نسخه ابزار، مدل قطعات و نتایج اندازهگیری را کنار هم ارائه کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «پروژه نهایی STM32 و مستندسازی» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «نمونه کارکرد، جدول آزمون و فهرست محدودیتها» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 24: یکپارچهسازی حسگر، نمایشگر و گزارش
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 24 از دوره STM32، موضوع «پروژه ثبت داده با STM32» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: داده همسان در نمایشگر و ترمینال.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به حسگر سازگار، OLED و UART نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: خواندن دورهای، اعتبارسنجی داده، نمایش و گزارش سریال را مرحلهبهمرحله وصل کن. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: داده همسان در نمایشگر و ترمینال. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، قطع حسگر و بازگشت آن را آزمایش کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: هیچ سیمکشی را بدون تطبیق سطح ولتاژ و نقشه پایه انجام نده. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل یکپارچهسازی حسگر، نمایشگر و گزارش را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: قطع حسگر و بازگشت آن را آزمایش کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «پروژه ثبت داده با STM32» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «داده همسان در نمایشگر و ترمینال» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 23: آشنایی عملی با FreeRTOS
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 23 از دوره STM32، موضوع «شروع FreeRTOS در STM32» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: هر دو وظیفه بدون مسدود شدن کار میکنند.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به بردی با حافظه کافی و بسته نرمافزاری متناسب نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: دو وظیفه سبک برای LED و گزارش سریال بساز و اولویتها را ثبت کن. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: هر دو وظیفه بدون مسدود شدن کار میکنند. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، تفاوت زمانبندی وظیفه و وقفه را مشاهده کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: پشته هر وظیفه و توابع مجاز در محیط RTOS را بررسی کن. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل آشنایی عملی با FreeRTOS را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: تفاوت زمانبندی وظیفه و وقفه را مشاهده کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «شروع FreeRTOS در STM32» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «هر دو وظیفه بدون مسدود شدن کار میکنند» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 22: ساختار ماژولار و خطایابی
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 22 از دوره STM32، موضوع «معماری پروژه STM32 و مدیریت خطا» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: خطاها با پیام مشخص دیده میشوند و برنامه قفل نمیکند.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به پروژه حسگر و UART از درسهای قبل نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: کد خواندن حسگر، نمایش و گزارش خطا را در ماژولهای مستقل قرار بده. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: خطاها با پیام مشخص دیده میشوند و برنامه قفل نمیکند. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، برای timeout و قطع حسگر مسیر بازیابی تعریف کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: بازگشت بدون بررسی از توابع HAL تشخیص عیب را دشوار میکند. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل ساختار ماژولار و خطایابی را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: برای timeout و قطع حسگر مسیر بازیابی تعریف کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «معماری پروژه STM32 و مدیریت خطا» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «خطاها با پیام مشخص دیده میشوند و برنامه قفل نمیکند» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 21: مصرف انرژی و حالت خواب
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 21 از دوره STM32، موضوع «مدیریت توان STM32 و حالت Sleep» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: جدول جریان برای دو حالت.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به مولتیمتر مناسب و پروژه LED نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: پیش و پس از ورود به حالت کممصرف جریان را با روش اندازهگیری یکسان مقایسه کن. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: جدول جریان برای دو حالت. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، منبع بیدارشدن و رفتار GPIO را مستند کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: مصرف کل برد Nucleo شامل مدارهای جانبی نیز هست. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل مصرف انرژی و حالت خواب را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: منبع بیدارشدن و رفتار GPIO را مستند کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «مدیریت توان STM32 و حالت Sleep» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «جدول جریان برای دو حالت» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 20: نمایش داده روی OLED
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 20 از دوره STM32، موضوع «نمایشگر OLED با STM32 و I2C» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: متن پایدار و داده تازه روی نمایشگر.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به نمایشگر دارای کنترلر و کتابخانه سازگارِ مستند نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: پس از شناخت آدرس و کنترلر، یک پیام و سپس مقدار حسگر را نمایش بده. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: متن پایدار و داده تازه روی نمایشگر. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، نرخ تازهسازی و مصرف حافظه نمایشگر را بسنج. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: شباهت ظاهری نمایشگرها نشانه یکسان بودن کنترلر نیست. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل نمایش داده روی OLED را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: نرخ تازهسازی و مصرف حافظه نمایشگر را بسنج. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «نمایشگر OLED با STM32 و I2C» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «متن پایدار و داده تازه روی نمایشگر» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 19: DMA برای انتقال داده
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 19 از دوره STM32، موضوع «آموزش DMA در STM32 و انتقال غیرمسدودکننده» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: حلقه اصلی در زمان انتقال پاسخگو میماند.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به UART یا ADC داخلی و ابزار دیباگ نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: انتقال محدود و کنترلشده DMA را فعال کن و پایان آن را با callback گزارش بده. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: حلقه اصلی در زمان انتقال پاسخگو میماند. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، مالکیت بافر و لحظه مجاز تغییر آن را بنویس. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: بافر محلی کوتاهعمر را برای انتقال ناهمگام استفاده نکن. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل DMA برای انتقال داده را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: مالکیت بافر و لحظه مجاز تغییر آن را بنویس. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «آموزش DMA در STM32 و انتقال غیرمسدودکننده» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «حلقه اصلی در زمان انتقال پاسخگو میماند» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 18: ارتباط SPI و انتخاب تراشه
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 18 از دوره STM32، موضوع «آموزش SPI در STM32» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: پاسخ معتبر ماژول در سرعت محافظهکارانه.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به ماژول SPI با تغذیه سازگار و دیتاشیت نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: مد SPI، ترتیب بیت و پایه CS را مشخص کن؛ تبادل کوتاه را با مقدار شناختهشده آزمایش کن. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: پاسخ معتبر ماژول در سرعت محافظهکارانه. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، نقش CPOL و CPHA را از جدول زمانبندی دیتاشیت استخراج کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: تاخیر CS و سیمکشی طولانی خطای ارتباط میآورد. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل ارتباط SPI و انتخاب تراشه را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: نقش CPOL و CPHA را از جدول زمانبندی دیتاشیت استخراج کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «آموزش SPI در STM32» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «پاسخ معتبر ماژول در سرعت محافظهکارانه» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 17: خواندن داده حسگر I2C
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 17 از دوره STM32، موضوع «خواندن رجیستر حسگر با STM32 HAL I2C» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: شناسه درست و داده قابل تکرار.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به حسگر I2C و دیتاشیت همان مدل نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: رجیستر شناسه و سپس یک داده اندازهگیری را بر اساس دیتاشیت بخوان. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: شناسه درست و داده قابل تکرار. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، مقیاس و واحد فیزیکی را از فرمول دیتاشیت به دست آور. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: جابهجایی ترتیب بایتها مقدار ظاهراً معتبر اما غلط میدهد. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل خواندن داده حسگر I2C را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: مقیاس و واحد فیزیکی را از فرمول دیتاشیت به دست آور. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «خواندن رجیستر حسگر با STM32 HAL I2C» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «شناسه درست و داده قابل تکرار» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.
جلسه 16: ارتباط I2C و شناسایی دستگاه
هدف جلسه و جایگاه آن در مسیر آموزش
در جلسه 16 از دوره STM32، موضوع «آموزش I2C در STM32» را به صورت یک آزمایش قابل تکرار دنبال میکنیم. هدف این است که خواننده علاوه بر اجرای نمونه، بتواند دلیل انتخاب تنظیمات و معنای خروجی را توضیح دهد. اگر فقط کد را روی برد بریزیم و نتیجهای ظاهری ببینیم، هنوز نمیدانیم خطاهای بعدی از سختافزار هستند یا از تنظیمات نرمافزار. بنابراین از ابتدا مدل دقیق برد، نسخه ابزار و آنچه مشاهده شده است ثبت میشود.
این درس بر پایه یک برد مرجع NUCLEO-F401RE طراحی شده است. در صورت استفاده از برد دیگر، نام پایه، وضعیت کلید، مسیر درگاه سریال و قابلیتهای جانبی باید از راهنمای همان برد و دیتاشیت همان تراشه استخراج شود. تصویرها برای شناخت ابزار و موضوع هستند و نقشه اتصال پروژه به شمار نمیآیند. نتیجه مطلوب این جلسه چنین است: تأیید پاسخ دستگاه در آدرس درست.

وسایل و پیشنیازهای مشخص
برای اجرای این مرحله به یک حسگر I2C سازگار با سطح ولتاژ برد نیاز دارید. پیش از برقرسانی، نام مدل را از نوشته روی برد بخوانید و آن را با گزینه انتخابشده در محیط توسعه مقایسه کنید. کابل USB باید قابلیت انتقال داده داشته باشد؛ برخی کابلها تنها برای شارژ هستند و باعث میشوند برد در رایانه دیده نشود. اگر قطعه خارجی به کار میبرید، ولتاژ تغذیه، جریان مجاز و جهت اتصال را از سند سازنده آن قطعه بخوانید.
پروژههای جلسات قبل را در پوشه جداگانه نگه دارید و از پروژه فعلی یک نسخه قابل بازگشت بسازید. هنگام تغییر تنظیمات CubeMX، فایل IOC را ذخیره و سپس کد را تولید کنید. بخشهای دستی برنامه را در ناحیههای مخصوص USER CODE بگذارید تا تولید مجدد کد آنها را پاک نکند. برای گزارش نتیجه، یک جدول ساده از تنظیم، مشاهده و توضیح بسازید.
مراحل اجرای آزمایش
گام اول: SDA و SCL را با راهنمای برد و حسگر مطابقت بده؛ آدرس را از دیتاشیت حسگر بخوان. در صفحه تنظیمات، هر گزینه را با هدف همین آزمایش مرتبط کنید. اگر گزینهای را صرفاً از نمونه دیگری کپی میکنید، پیش از ادامه بررسی کنید که آیا در برد مرجع و نسخه کتابخانه فعلی همان معنی را دارد. نامگذاری روشن برای پینها و متغیرها انتخاب کنید تا هنگام دیباگ بتوانید منشأ هر مقدار را پیدا کنید.
گام دوم: پروژه را Build کنید و پیامهای خطا و هشدار را بخوانید. سپس اتصال ST-LINK را بررسی و برنامه را روی برد بارگذاری کنید. یک بار برد را بازنشانی کنید و رفتار آن را دوباره بسنجید؛ این کار نشان میدهد نتیجه فقط ناشی از وضعیت باقیمانده در جلسه Debug نیست. اگر خروجی فیزیکی دیده نمیشود، ابتدا همان آزمایش را با سادهترین حالت ممکن و بدون ماژولهای جانبی تکرار کنید.
گام سوم: تأیید پاسخ دستگاه در آدرس درست. این مشاهده را با زمان، شرایط تغذیه و وضعیت اتصالات ثبت کنید. سپس فقط یک پارامتر مرتبط با موضوع درس را تغییر دهید و آزمایش را دوباره انجام دهید. تغییر همزمان چند پارامتر تشخیص علت را دشوار میکند. در پایان به تنظیم قابل تکرار بازگردید و نسخه نهایی پروژه را ذخیره کنید.

چرا این تنظیمات مهم هستند؟
برای تحلیل نتیجه، آدرس هفتبیتی را از نمایش هشتبیتی کتابخانه تفکیک کن. این بخش را با داده واقعی آزمایش پر کنید: انتظار شما چه بود، چه اتفاقی افتاد و کدام مشاهده دو فرضیه متفاوت را از هم جدا میکند؟ وقتی خروجی مطابق انتظار نیست، به جای تعویض تصادفی سیمها یا کد، زنجیره را به ورودی، پیکربندی، اجرای برنامه و خروجی تقسیم کنید.
کتابخانه HAL لایهای برای دسترسی به پیرامونیها فراهم میکند، اما جای خواندن راهنمای برد و مرجع تراشه را نمیگیرد. کد تولیدشده به پیکربندی فایل IOC وابسته است. نام یک تابع ممکن است روی چند خانواده یکسان باشد، در حالی که پینهای قابل استفاده، منبع کلاک و جزئیات تایمر تغییر کنند. برای همین در گزارش خود مدل تراشه و نسخه بسته نرمافزاری را بنویسید.
یک آزمایش خوب باید معیار موفقیت داشته باشد. فقط نوشتن «کار کرد» کافی نیست: اگر پیام سریال میخوانید، نرخ و متن را ثبت کنید؛ اگر زمانبندی میسنجید، دوره تقریبی را بنویسید؛ اگر مقدار آنالوگ میخوانید، مقدار خام و مرجع را کنار هم بیاورید. به این ترتیب خواننده دیگری میتواند همان روش را تکرار و اختلاف نتیجه را پیدا کند.
عیبیابی مرحلهای
مهمترین احتیاط این جلسه: مقاومت pull-up و سطح تغذیه حسگر باید با مدار سازگار باشند. پیش از نسبت دادن مشکل به نرمافزار، تغذیه، اتصال زمین مشترک در صورت نیاز، شناخته شدن برد در رایانه و انتخاب مدل درست را بررسی کنید. اگر در کد خطا رخ میدهد، نخستین پیام خطای Build را بخوانید؛ خطاهای بعدی معمولاً پیامد همان خطای اول هستند.
اگر برنامه بارگذاری میشود اما خروجی تغییر نمیکند، یک breakpoint در نقطه اصلی بگذارید و ببینید اجرای برنامه واقعاً به آنجا میرسد یا نه. سپس متغیر ورودی، مقدار پیکربندی و فرمان خروجی را به ترتیب بررسی کنید. در آزمونهای زمانحساس، breakpoint میتواند خود رفتار را تغییر دهد؛ در آن شرایط از گزارش محدود سریال یا ابزار اندازهگیری استفاده کنید.
وقتی از قطعه بیرونی استفاده میشود، نقشه پایه منبع آموزشی را به صورت خودکار معتبر فرض نکنید. برخی ماژولها از نظر ظاهر شبیهاند اما ترتیب پایهها و سطح ولتاژشان فرق میکند. آزمون نخست را با تغذیه خاموش انجام دهید، سپس در صورت امکان ولتاژ را با مولتیمتر بسنجید و فقط پس از مطابقت با سند سازنده برنامه را اجرا کنید.

تمرین مستقل و سنجش یادگیری
تمرین اول این است که مراحل ارتباط I2C و شناسایی دستگاه را بدون کپی مستقیم تنظیمات از پروژه قبلی بازسازی کنید. هدف را در یک جمله بنویسید، سپس از روی راهنمای برد منابع مورد نیاز را پیدا کنید. اگر همان نتیجه به دست آمد، یکی از پارامترهای مجاز را تغییر دهید و قبل از اجرا پیشبینی کنید چه اثری خواهد داشت.
تمرین دوم: آدرس هفتبیتی را از نمایش هشتبیتی کتابخانه تفکیک کن. پاسخ را فقط به شکل تعریف واژه ننویسید؛ یک مشاهده از اجرای واقعی خودتان نیز اضافه کنید. اگر اختلافی میان محاسبه و مشاهده وجود دارد، علتهای ممکن را به ترتیب احتمال فهرست کنید و برای هر کدام آزمون جداگانهای پیشنهاد دهید.
برای پایان جلسه، این پنج مورد را در یک یادداشت نگه دارید: مدل برد، نسخه ابزار، تنظیمات مهم، نتیجه مشاهدهشده و یک خطایی که توانستید رفع کنید. این یادداشتها در پروژه پایانی به مستندات واقعی تبدیل میشوند و به خواننده سایت کمک میکنند آزمایش را روی سختافزار خود با آگاهی انجام دهد.
جمعبندی و ادامه مسیر
در این مرحله با «آموزش I2C در STM32» از طریق یک کار عملی آشنا شدید و معیار موفقیت را «تأیید پاسخ دستگاه در آدرس درست» قرار دادید. ارزش این درس در تکرارپذیری آن است: از یک فرض روشن شروع میکنید، پیکربندی را ثبت میکنید، تنها یک متغیر را تغییر میدهید و خروجی را میسنجید.
برای مطالعه بیشتر، راهنمای رسمی برد NUCLEO-F401RE، مستندات STM32CubeIDE و مستندات HAL مربوط به خانواده F4 را ببینید. در جلسات بعدی همین روش مشاهده، ثبت و عیبیابی را برای پیرامونیهای دیگر به کار میبریم. هر ادعای مربوط به پین، فرکانس یا محدوده ولتاژ باید با سند مدل سختافزاری مورد استفاده بررسی شود.
منابع رسمی: صفحه برد NUCLEO-F401RE؛ STM32CubeIDE؛ آموزش رسمی ST.