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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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