راهنمای جامع پروگرام و رفع عیب STM32 و STM8 با ST-Link
راهنمای جامع پروگرام و رفع عیب STM32 و STM8 با ST-Link
از اولین اتصال بعد از خرید تا بوتمود، Under Reset، بازیابی میکروی قفلشده و انتخاب نسخه مناسب پروگرامر
این راهنما برای چه کسانی است؟ اگر تازه یک ST-Link خریدهاید، هنگام پروگرامکردن با خطای «No target connected» روبهرو میشوید یا میکرو بعد از یک برنامهریزی دیگر متصل نمیشود، مسیر زیر را از ابتدا دنبال کنید.
نکته مهم: رابط پروگرامکردن STM32 معمولاً SWD و رابط STM8 نوعاً SWIM است؛ این دو از نظر سیمکشی و نرمافزار یکسان نیستند.
1بعد از خرید ST-Link چه کاری انجام دهیم؟
- مدل دقیق پروگرامر را مشخص کنید. عبارت «ST-Link V2» بهتنهایی کافی نیست. ممکن است دستگاه شما یک ST-LINK/V2 رسمی، یک ماژول کوچک بازاری، یا ST-Link تعبیهشده روی برد Nucleo باشد. کانکتور، چیدمان پینها و امکانات این مدلها یکسان نیست.
- میکروکنترلر هدف را مشخص کنید. برای STM32 معمولاً به STM32CubeProgrammer و رابط SWD نیاز دارید. برای STM8 به نرمافزار STVP و رابط SWIM نیاز است.
- نرمافزار و درایور را از منبع رسمی نصب کنید. در ویندوز، نصب STM32CubeProgrammer معمولاً درایور لازم را نیز نصب میکند. درایور مستقل ویندوز با نام STSW-LINK009 نیز از سایت ST ارائه میشود.
- ابتدا فقط پروگرامر را به USB وصل کنید. بررسی کنید سیستمعامل آن را بدون خطا شناسایی میکند. از کابل سالم و دادهدار استفاده کنید؛ برخی کابلها فقط شارژ میکنند.
- فریمور دستگاه اصل را در صورت نیاز بهروز کنید. اگر STM32CubeProgrammer یا ابزار رسمی ST درخواست بهروزرسانی کرد، با کابل پایدار و بدون قطعکردن USB اقدام کنید. برای دستگاه کپی، فریمور تصادفی یا فریمور مخصوص مدل دیگر نصب نکنید.
- سیمکشی را در حالت بیبرق انجام دهید. حداقل GND، SWDIO و SWCLK لازم است؛ اتصال NRST نیز بهشدت توصیه میشود. سپس تغذیه برد و ولتاژ مرجع را بررسی کنید.
2اتصال صحیح ST-Link به STM32
سیمهای لازم در رابط SWD
| سیم | وظیفه | نکته اتصال |
|---|---|---|
| GND | مرجع مشترک صفرولت | همیشه لازم است؛ حتی اگر برد تغذیه جداگانه دارد. |
| SWDIO | داده دوطرفه رابط SWD | به پایه SWDIO میکرو وصل شود؛ در بسیاری از STM32ها PA13 است، اما دیتاشیت همان مدل ملاک است. |
| SWCLK | کلاک رابط SWD | به SWCLK میکرو وصل شود؛ در بسیاری از مدلها PA14 است. |
| NRST / RESET | کنترل سختافزاری ریست | برای Connect Under Reset و بازیابی مطمئن لازم است. |
| VCC / VTref / VAPP | سنجش ولتاژ هدف یا تغذیه، بسته به مدل | نقش این پایه در همه پروگرامرها یکسان نیست؛ پیناوت همان دستگاه را بررسی کنید. |
| SWO | خروجی اختیاری SWV/ITM | برای پروگرام معمولی لازم نیست و در بسیاری از مینیهای بازاری وجود ندارد. |
این شکل منطق اتصال را نشان میدهد، نه ترتیب فیزیکی پینهای یک مدل خاص را.
پیناوت کانکتور 20پین ST-LINK/V2
در این کانکتور، SWDIO پایه 7، SWCLK پایه 9 و NRST پایه 15 است. جهت فیزیکی کانکتور را نیز بررسی کنید.
قبل از زدن Connect
- برد هدف واقعاً روشن و ولتاژ تغذیه آن در محدوده مجاز است.
- GND پروگرامر و برد به هم وصل شده است.
- SWDIO و SWCLK جابهجا نشدهاند.
- سیمها کوتاه و اتصالات محکم هستند.
- ولتاژ مرجع در نرمافزار مقدار معقولی مانند حدود 3.3 ولت نشان میدهد.
- NRST برای بازیابی بعدی وصل شده است.
3پروگرامکردن STM32 با STM32CubeProgrammer
نرمافزار STM32CubeProgrammer ابزار رسمی و چندسکویی ST برای خواندن، پاککردن، پروگرام و Verify حافظه STM32 است. نرمافزار قدیمی STM32 ST-LINK Utility هنوز برای برخی دستگاههای قدیمی دیده میشود، اما برای کار جدید، CubeProgrammer انتخاب مناسبتری است.
- بازکردن نرمافزار و انتخاب پروگرامر: در پنل اتصال، گزینه ST-LINK را انتخاب کنید. اگر شماره سریال دیده نمیشود، دکمه Refresh را بزنید و سایر نرمافزارهایی مانند CubeIDE یا Keil را که ممکن است پروگرامر را اشغال کرده باشند، ببندید.
- انتخاب رابط: برای اتصال معمولی STM32 گزینه Port = SWD را انتخاب کنید.
- حالت اتصال: در شرایط عادی Mode = Normal مناسب است. اگر برنامه فعلی میکرو مانع اتصال میشود، از Connect Under Reset استفاده کنید.
- فرکانس: ابتدا میتوانید مقدار پیشفرض را امتحان کنید. اگر اتصال ناپایدار است یا سیمها بلندند، فرکانس را مثلاً به 400 یا 100 کیلوهرتز کاهش دهید.
- اتصال به هدف: روی Connect بزنید. نمایش Device ID، نام خانواده، ظرفیت Flash و Target voltage نشانه اتصال صحیح است.
- انتخاب فایل: فایل .hex یا .elf معمولاً آدرس را همراه خود دارد. برای فایل خام .bin باید آدرس صحیح را وارد کنید؛ در بسیاری از STM32ها آدرس شروع Flash داخلی 0x08000000 است، اما پروژه و دیتاشیت همان میکرو ملاک است.
- پاککردن و پروگرام: در بخش Erasing & Programming فایل را انتخاب کنید، گزینه Verify programming را فعال کنید و Start Programming را بزنید. Full chip erase فقط زمانی لازم است که واقعاً قصد پاککردن کل حافظه را دارید.
- اجرای برنامه: پس از موفقیت، Disconnect کنید و برد را Reset یا خاموشوروشان کنید. اگر برنامه اجرا نمیشود، BOOT0، آدرس فایل و صحت خود فایل را بررسی کنید.
نمونه پنل ST-LINK در CubeProgrammer؛ محل Port، Frequency، Mode، Reset mode و Firmware upgrade مشخص است. صفحه منبع تصویر
4نسخه اصل، کپی، با ID و بدون ID
اصطلاح «با ID» و «بدون ID» در بازار معمولاً به شماره سریال/شناسهای اشاره دارد که پروگرامر به نرمافزار معرفی میکند. این ID با Device ID میکروکنترلر هدف فرق دارد و مدرک قطعی اصلبودن هم نیست.
ST-Link اصل
- ساخت و پشتیبانی مطابق مستندات ST
- بهروزرسانی فریمور با ابزار رسمی و برای همان مدل
- پیناوت، محدوده ولتاژ و امکانات مشخص
- مناسب کار حرفهای، دیباگ مداوم و پروژه حساس
کپی با ID
- معمولاً شماره سریال در نرمافزار نمایش داده میشود.
- بسته به ساخت، ممکن است با ابزارهای STM32Cube کار کند.
- داشتن ID بهتنهایی ضامن سازگاری، یکتایی یا اصالت نیست.
- امکانات و بهروزرسانی باید برای همان مدل بررسی شود.
کپی بدون ID
- ممکن است شماره سریال قابلاستفاده به ابزار معرفی نکند.
- در برخی مدلها با ST-LINK Utility کار میکند ولی در ابزارهای STM32Cube دیده نمیشود.
- برای استفاده همزمان از چند پروگرامر یا اتوماسیون، مشکلساز است.
- برای پروژه جدید انتخاب کمریسکی نیست.
توصیه خرید ساده: برای شروع و کارهای روزمره، سازگاری واقعی با CubeProgrammer، اتصال NRST و پیناوت روشن مهمتر از شکل ظاهری است. برای STM8، JTAG، SWO، Virtual COM یا اتصال چند پروگرامر به یک کامپیوتر، امکانات دقیق مدل را قبل از خرید بررسی کنید.
5تفاوت ST-Link V2 mini، ST-LINK/V2 و STLINK-V3
V2 mini بازاری
کوچک و ساده؛ مشخصات به سازنده بستگی دارد.
ST-LINK/V2
مدل مستقل رسمی با SWD/JTAG و SWIM.
STLINK-V3SET
نسل سریعتر با VCP و Bridge؛ تصویر محصول ST.
| ویژگی | V2 mini بازاری | ST-LINK/V2 رسمی | STLINK-V3SET |
|---|---|---|---|
| کاربرد اصلی | پروگرام ساده STM32 با SWD | STM8 و STM32، پروگرام و دیباگ | توسعه سریعتر و امکانات جانبی بیشتر |
| SWD | معمولاً دارد | دارد | دارد |
| JTAG | معمولاً ندارد | دارد | دارد |
| SWV / SWO | اغلب ندارد | پشتیبانی میشود | پشتیبانی میشود |
| STM8 / SWIM | به فریمور و پیناوت بستگی دارد؛ فرض نکنید دارد | دارد | با برد آداپتور MB1440 |
| Virtual COM / UART | معمولاً ندارد | در مدل مستقل V2 ندارد | دارد |
| USB Bridge | ندارد | ندارد | SPI/UART/I2C/CAN/GPIO روی آداپتور |
| سرعت و USB | معمولاً محدود و متغیر | USB 2.0 Full Speed | USB 2.0 High Speed |
| فریمور | به سازنده بستگی دارد | بهروزرسانی رسمی | بهروزرسانی رسمی |
| انتخاب مناسب | کار اقتصادی و SWD ساده | ترکیب STM8/STM32 یا نیاز به JTAG | کار حرفهای، VCP، Bridge و سرعت بالاتر |
6بوتمودها و تنظیم صحیح BOOT0 و BOOT1
بعد از Reset، میکرو باید مشخص کند اجرای برنامه را از کدام ناحیه شروع کند. انتخاب معمول بین Flash کاربر، System Memory یا بوتلودر کارخانه و در برخی مدلها SRAM است. روش انتخاب در همه خانوادهها یکسان نیست: علاوه بر پایه BOOT0 و BOOT1، در برخی مدلها Option Bytes و بیتهایی مانند nBOOT1 یا BOOT_LOCK نقش دارند.
جدول رایج برای بسیاری از مدلهای STM32F1
| BOOT0 | BOOT1 | محل شروع بوت | کاربرد |
|---|---|---|---|
| 0 | بیاهمیت | Main Flash / Flash کاربر | حالت عادی اجرای برنامه و کار با SWD |
| 1 | 0 | System Memory | بوتلودر کارخانه برای UART یا رابطهای پشتیبانیشده |
| 1 | 1 | Embedded SRAM | اجرای خاص از RAM؛ برای پروگرام معمولی لازم نیست |
محدودیت مهم: این جدول را به تمام STM32ها تعمیم ندهید. نام و نقش پایهها، Option Bytes و رابطهای بوتلودر در مدلهای مختلف تغییر میکند. مرجع نهایی، دیتاشیت/Reference Manual همان میکرو و سند AN2606 است.
پروگرام با بوتلودر UART
- مطابق AN2606 مطمئن شوید کدام USART و کدام پایهها در مدل شما پشتیبانی میشوند.
- بوت را روی System Memory قرار دهید؛ در جدول F1 بالا BOOT0=1 و BOOT1=0.
- TX مبدل به RX میکرو و RX مبدل به TX میکرو، با GND مشترک و سطح ولتاژ سازگار وصل شود.
- میکرو را Reset کنید و در CubeProgrammer گزینه UART را انتخاب کنید.
- بعد از پروگرام، بوت را به Flash کاربر برگردانید و دوباره Reset کنید.
پروگرام با USB DFU
- فقط روی مدلهایی قابلاستفاده است که USB و بوتلودر USB DFU را در System Memory پشتیبانی کنند.
- به ST-Link نیاز نیست؛ کابل USB دادهدار مستقیم به میکرو وصل میشود.
- پایههای USB و شرایط فعالشدن DFU باید از AN2606 بررسی شود.
- در CubeProgrammer نوع اتصال USB انتخاب میشود.
- همه بردهای دارای کانکتور USB لزوماً DFU کارخانه ندارند.
7میکرو قفل شده است؛ Under Reset و روش بازیابی
عبارت «میکرو قفل شده» لزوماً یک مشکل واحد نیست. گاهی برنامه قبلی بلافاصله پایههای SWD را به GPIO تبدیل میکند، میکرو به Sleep میرود یا Watchdog مدام ریست میکند. گاهی نیز Readout Protection یا Option Bytes تغییر کردهاند. ابتدا باید این موارد از هم جدا شوند.
Under Reset دقیقاً چه میکند؟
در حالت Connect Under Reset پروگرامر میکرو را در وضعیت Reset نگه میدارد تا برنامه کاربر اجرا نشود و سپس از طریق SWD به آن متصل میشود. بنابراین این حالت برای مواردی مفید است که خود برنامه قبلی مانع اتصال شده است؛ اما بهخودیخود قفل حفاظتی را باز نمیکند.
روش استاندارد با سیم NRST
- پایه NRST پروگرامر را به NRST/RESET میکرو و GND را مشترک کنید. تغذیه هدف و SWDIO/SWCLK نیز باید سالم باشد.
- در CubeProgrammer نوع اتصال ST-LINK و پورت SWD را انتخاب کنید.
- گزینه Mode = Connect Under Reset و در صورت وجود Reset mode = Hardware Reset را انتخاب کنید.
- فرکانس را کاهش دهید و Connect را بزنید. پروگرامر ریست سختافزاری را کنترل میکند.
- بعد از اتصال، اگر هدف فقط حذف برنامه معیوب است، Flash را پاک و برنامه سالم را دوباره پروگرام کنید. اگر RDP فعال است، بخش بعد را بخوانید.
اگر قفل از نوع RDP باشد
| وضعیت | معنی ساده | امکان بازیابی |
|---|---|---|
| RDP Level 0 | حفاظت خواندن فعال نیست. | اتصال و پروگرام معمولی انجام میشود. |
| RDP Level 1 | خواندن و دسترسی دیباگ محدود شده است. | در بسیاری از مدلها بازگشت به Level 0 با Mass Erase ممکن است و کل برنامه قبلی پاک میشود. |
| RDP Level 2 | حالت قفل دائمی در بسیاری از خانوادهها. | در بسیاری از مدلها برگشتناپذیر است و ST-Link نمیتواند آن را باز کند. برای آزمایش روی برد اصلی فعال نکنید. |
مسیر امن بازیابی یک برد معمولی
- ابتدا با Normal و فرکانس پایین امتحان کنید؛ شاید مشکل فقط اتصال ضعیف باشد.
- NRST را وصل و Connect Under Reset را امتحان کنید.
- پیام نرمافزار و Target voltage را بخوانید؛ خطای تغذیه را با قفل اشتباه نگیرید.
- اگر امکان خواندن Option Bytes وجود دارد، وضعیت RDP/WRP را بدون Apply بررسی کنید.
- فقط پس از پذیرش پاکشدن اطلاعات، Mass Erase یا روند RDP Regression مخصوص همان مدل را انجام دهید.
- برنامه سالم را پروگرام و Verify کنید؛ سپس بوت را در حالت Flash و برد را Reset کنید.
8پروگرامکردن STM8 با SWIM و STVP
STM8 از SWD استفاده نمیکند. رابط اصلی برنامهریزی و دیباگ آن SWIM است و نرمافزار متداول آن ST Visual Programmer یا STVP میباشد. STM32CubeProgrammer برای STM32 است، نه جایگزین عمومی STVP برای STM8.
سیمکشی معمول SWIM
- VDD/VAPP: تغذیه یا سنجش ولتاژ هدف، طبق راهنمای پروگرامر
- DATA/SWIM: به پایه SWIM میکروکنترلر
- GND: زمین مشترک
- RESET/NRST: به پایه ریست میکرو
در STVP ابتدا سختافزار ST-LINK و مدل دقیق STM8 را انتخاب کنید، فایل برنامه را باز کنید و Program/Verify را انجام دهید. Option Bytes را فقط با شناخت عملکردشان تغییر دهید.
چیدمان VDD، DATA، GND و RESET در کانکتور SWIM مدل ST-LINK/V2.
9خطاهای رایج و راهحل عملی
| خطا یا علامت | علتهای محتمل | اقدام پیشنهادی |
|---|---|---|
| No ST-LINK detected | درایور، کابل، پورت USB، اشغالشدن پروگرامر توسط برنامه دیگر یا ناسازگاری کپی | CubeIDE/Keil را ببندید، Refresh کنید، کابل و پورت را عوض کنید و درایور STSW-LINK009 را بررسی کنید. |
| دستگاه در ویندوز Unknown است | درایور ناقص یا اتصال قبل از نصب درایور | درایور رسمی را نصب و در Device Manager گزینه Update driver را برای دستگاه مربوط انجام دهید. |
| No STM32 target found / No target connected | قطعی تغذیه، نبود GND مشترک، جابهجایی SWDIO/SWCLK، پیناوت اشتباه یا اجرای برنامه مخرب | ولتاژ و سیمها را بررسی، فرکانس را کم و در صورت نیاز Under Reset را امتحان کنید. |
| Target voltage صفر یا بسیار کم است | برد خاموش، VTref وصل نیست، اتصال نامناسب یا مشکل رگولاتور | تغذیه واقعی میکرو و نقش پایه VCC/VTref در پروگرامر را بررسی کنید؛ صرفنظر از این خطا توصیه نمیشود. |
| اتصال فقط گهگاه برقرار میشود | سیم بلند، اتصال شل، نویز، فرکانس زیاد یا تغذیه ناپایدار | سیمها را کوتاه و محکم کنید، فرکانس را به 400 یا 100 کیلوهرتز برسانید و تغذیه را پایدار کنید. |
| Under Reset هم وصل نمیشود | NRST وصل نیست، Reset mode اشتباه، مدار ریست مشکل دارد یا قفل سختافزاری/حفاظتی | اتصال NRST و Hardware Reset را بررسی کنید. Under Reset بهتنهایی RDP را حذف نمیکند. |
| خطای Readout Protection | RDP فعال است | سطح RDP و خانواده میکرو را بررسی کنید. در Level 1 بازیابی معمولاً با پاکشدن Flash همراه است؛ Level 2 در بسیاری از مدلها برگشتناپذیر است. |
| Flash write protection | WRP یا Option Bytes محدودکننده | قبل از تغییر، Option Bytes را بخوانید و Reference Manual همان مدل را بررسی کنید. همه محدودیتها RDP نیستند. |
| Download یا Verify خطا میدهد | آدرس اشتباه BIN، اتصال ناپایدار، تغذیه ضعیف، فایل نامناسب یا حفاظت حافظه | آدرس پروژه و فایل را بررسی، فرکانس را کم و وضعیت حفاظت را کنترل کنید. Erase تصادفی انجام ندهید. |
| Verify موفق است ولی برنامه اجرا نمیشود | BOOT0 اشتباه، فایل متعلق به مدل دیگر، آدرس شروع نادرست یا نیاز به Reset | بوت را روی Flash کاربر قرار دهید، مدل Target و آدرس لینکر را بررسی و برد را Reset کنید. |
| در ST-LINK Utility کار میکند ولی در Cube نه | فریمور قدیمی، نبود ID سازگار یا محدودیت دستگاه کپی | مدل و سریال را بررسی کنید. دستگاه اصل را با ابزار رسمی بهروز کنید؛ برای کپی از روش فروشنده استفاده کنید. |
| Firmware upgrade نیمهکاره مانده | قطعی USB، انتخاب فریمور نامناسب یا محدودیت کپی | USB پایدار و ابزار رسمی مناسب همان مدل را امتحان کنید. فریمور مدل دیگر نصب نکنید؛ برای کپی با فروشنده هماهنگ شوید. |
| STM8 متصل نمیشود | عدم پشتیبانی SWIM، انتخاب مدل اشتباه در STVP یا سیمکشی ناقص | پشتیبانی واقعی SWIM، چهار سیم VDD/DATA/GND/RESET و انتخاب دقیق STM8 را بررسی کنید. |
10چکلیست سریع و جمعبندی
برای پروگرام معمولی STM32
- نرمافزار CubeProgrammer و درایور نصب شده باشد.
- GND، SWDIO، SWCLK و ترجیحاً NRST وصل باشد.
- تغذیه و Target voltage سالم باشد.
- Port روی SWD و Mode روی Normal باشد.
- فایل و آدرس صحیح انتخاب و Verify فعال شود.
- BOOT0 در حالت بوت از Flash کاربر باشد.
اگر اتصال برقرار نمیشود
- کابل، درایور و اشغالنبودن ST-Link را بررسی کنید.
- فرکانس SWD را کاهش دهید.
- NRST را وصل و Connect Under Reset را انتخاب کنید.
- پیام خطا را از خطای تغذیه تا RDP دستهبندی کنید.
- قبل از پاککردن، از نبود نیاز به برنامه قبلی مطمئن شوید.
- RDP Level 2 را برای آزمایش فعال نکنید.
قاعده طلایی
تغذیه سالم + GND مشترک + پیناوت درست + NRST متصل، بیشتر مشکلات ST-Link را قبل از پیچیدهشدن حل میکند.
منابع رسمی و مراجع فنی
- STM32CubeProgrammer — صفحه رسمی نرمافزار
- UM2237 — راهنمای کامل STM32CubeProgrammer
- STSW-LINK009 — درایور USB برای ویندوز
- STSW-LINK007 — بسته رسمی بهروزرسانی فریمور ST-LINK
- TN1235 — مقایسه نسلها و امکانات ST-LINK
- ST-LINK/V2 — صفحه رسمی محصول
- STLINK-V3SET — صفحه رسمی محصول
- AN2606 — بوتلودر System Memory و رابطهای هر خانواده STM32
- STVP-STM8 — نرمافزار برنامهریزی STM8
- صفحه محصول ST-LINK/V2 در کافهربات — پیناوت و توضیحات مدل فروشگاه
تصویر ST-LINK/V2 از فروشگاه کافهربات، تصویر V2 mini از Waveshare و تصویر V3SET مربوط به محصول STMicroelectronics است. پیناوتهای SWD/SWIM از مستندات فنی ST و تصویر محیط CubeProgrammer از انجمن ST استفاده شدهاند؛ لینکهای خارجی برای انتقال بعدی تصاویر به سرور فروشگاه در فایل حفظ شدهاند.
راهنمای فنی کافهربات برای کاربران STM32، STM8 و پروگرامرهای ST-Link