הלו אסתי #2: הבלינק הקשה מכולם

בפרק הקודם התלוננתי על חוסר נוחות בהתקנת שרשרת הכלים עבור לוחות STM8S הזולים שמצאתי באיביי (מאז השגתי, אגב, מספר לוחות זולים עוד יותר עם מיקרו-בקר מדגם STM8S103F3P6, שיש לו יותר EEPROM). אז מה אתם חושבים, העניינים נעשו פשוטים יותר כשניגשתי לכתוב ולהעלות את קוד ה-Blink?

בלינק עם STM8S
בלינק עם STM8S

לצרוב פרויקט ריק

הפעלתי את סביבת הפיתוח ST Visual Develop והגדרתי פרויקט חדש (ריק) עבור קומפיילר Cosmic והמיקרו-בקר שעל הלוח. לתדהמתי, הקמפול עבר בהצלחה ואפילו הצורב תואם ST-Link V2 הסיני שלי זוהה בלי תקלות. לא הצלחתי למצוא לחצן להרצה או צריבה של הקוד, אז לחצתי על הדבר הקרוב ביותר ("Start Debugging"), ואז קיבלתי את הודעת השגיאה המסתורית הזו:

הודעת השגיאה המסתורית ב-ST Visual Develop
הודעת השגיאה המסתורית ב-ST Visual Develop (לחצו להגדלה)

הבנתם? גם אני לא. למרבה המזל, מישהו אחר נתקל באותה בעיה לפני שנה בערך וקיבל תשובה בפורומים של STMicroelectronics: מסתבר שצריך להריץ את הקובץ ST Toolset.msi שנמצא בתיקיית ההתקנה C:\Program Files (x86)\STMicroelectronics\st_toolset\stvd\dao . זה מסוג הדברים שגורמים לי לרצות לתפוס פטיש ולנתץ את הג'וק הארור – אלא שלאחר הפעולה הזו, לחצן הדיבוג דווקא עבד, הלדים על הצורב הבהבו וקיבלתי מספר אפשרויות חדשות בסביבת הפיתוח, ביניהן האפשרות להריץ את הקוד (מסומנת באייקון של סימן קריאה אדום, השד יודע למה). קדימה לבלינק!

לוחות STM8S מדגם אחר וזול עוד יותר

לוחות STM8S מדגם אחר וזול עוד יותר

לא למתחילים

השלב הבא הוא למצוא לאילו רגיסטרים צריך לכתוב מה כדי להפעיל פלט HIGH או LOW בפין מסוים. בחרתי מראש את פין PD6 כי היה נוח לחבר אליו במטריצה את הנגד בשביל נורית ה-LED שחוברה, בצדה השני, לפין GND. את השמות של הרגיסטרים ותיאור מינימליסטי מצאתי ב-datasheet של המיקרו-בקר עצמו, אבל כדי להבין מה בדיוק צריך לעשות איתם הייתי חייב לעבור למסמך אחר, ה-Reference Manual של משפחת המיקרו-בקרים כולה. שם, בסעיף 11.3 (עמ' 107 והלאה) מצאתי את הפירוט הזה:

טבלת הגדרות הרגיסטרים ל-IO ב-STM8S.
טבלת הגדרות הרגיסטרים ל-IO ב-STM8S. נכון שעכשיו הכל ברור?

יש הרבה דברים מסתוריים בטבלה הזו, ללא ספק, ואם זה היה המפגש הראשון שלי עם מיקרו-בקרים, סביר להניח שזה גם היה המפגש האחרון. למזלי ידעתי פחות או יותר מה לחפש, ואחרי עוד כמה בירורים ראשוניים במסמכים האלה כתבתי קוד שאמור היה רק להדליק את ה-LED – בהשהיה ובכיבוי בלולאה אטפל אחר כך.

ו-הופ! הודעת שגיאה של הקומפיילר: הוא לא מכיר את הקבועים PD_DDR ושאר שמות הרגיסטרים בהם השתמשתי. זה דווקא לא מפתיע במיוחד – גם בסביבות פיתוח אחרות למיקרו-בקרים אחרים צריך לכתוב פקודת include לקובץ header שמכיל את ההגדרות המתאימות. אבל איך קוראים לקובץ הזה? גם כאן, איזו הפתעה, התשובה לא היתה מובנת מאליה ואף אחד לא טרח להדגיש אותה בשום מקום. רק בעקבות כמה ניסיונות נפל וחיטוט בעוד מסמכים הגעתי לפתרון הנכון (לקומפיילר הספציפי הזה): iostm8s.h .

סוף כל סוף, זה עבד. עוד לא מצאתי פקודת delay מובנית, אבל לולאת מניה פשוטה הספיקה כדי ליצור את האפקט המבוקש, וגרמתי לבלינק הזה לעבוד. הקוד מופיע בתמונה למטה. זה היה, בלי שום תחרות, הבלינק המתיש ביותר שנתקלתי בו עד היום. אני מקווה שהשלבים הבאים יהיו קצת יותר פשוטים – בכל אופן, ברור שללא רקע קודם במיקרו-בקרים ו/או ליווי צמוד מאיש מקצוע, מתחילים צריכים לברוח מלוחות הפיתוח האלה כמו מאש.

קוד הבלינק שעובד, בסביבת הפיתוח
קוד הבלינק שעובד, בסביבת הפיתוח

ובנימה אופטימית זו נעצור להפעם. בפרק הבא אנסה להפעיל פיצ'ר קטן ומעניין של המיקרו-בקרים האלה – מחולל צלילים מובנה!

להרשמה
הודע לי על
4 Comments
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

זה באמת סיוט להרים את הסביבה הזו, היה לי קשה מאוד כנראה בלי הפוסט הזה 🙂

משתעשע עם ה-STM8 ועם כל מיני 8051 לאחרונה (למשל STC15F104W – זה ממש כיף שלא צריך כל מיני צורבים יעודיים כי יש לזה בוטלואדר UART פנימי). די נמאס לי מ-AVR, אני שונא את atmel studio כי היא כזו כבדה ו-bloated, ולא מוצא סיבה טובה להמשיך לעבוד עם AVR באופן בלעדי. אז מה נשאר? ה-PICים נראים לי סתם יקרים, יתר עולמות ה-8 ביט זה רק 8051ים, רכיבי OTP מוזרים וכמה ארכיטקטורות אקסקלוסיביות יותר, שהנפוץ ביניהם הוא בפער STM8. אז אני נותן לזה צ'אנס – הארכיטקטורה והפריפריות סך הכל חביבים, וזה מספיק זול בכדי שלא יהיה לי אכפת. אפשר לקפוץ למעבדי ARM… לקרוא עוד »