בפרק הקודם התלוננתי על חוסר נוחות בהתקנת שרשרת הכלים עבור לוחות STM8S הזולים שמצאתי באיביי (מאז השגתי, אגב, מספר לוחות זולים עוד יותר עם מיקרו-בקר מדגם STM8S103F3P6, שיש לו יותר EEPROM). אז מה אתם חושבים, העניינים נעשו פשוטים יותר כשניגשתי לכתוב ולהעלות את קוד ה-Blink?
לצרוב פרויקט ריק
הפעלתי את סביבת הפיתוח ST Visual Develop והגדרתי פרויקט חדש (ריק) עבור קומפיילר Cosmic והמיקרו-בקר שעל הלוח. לתדהמתי, הקמפול עבר בהצלחה ואפילו הצורב תואם ST-Link V2 הסיני שלי זוהה בלי תקלות. לא הצלחתי למצוא לחצן להרצה או צריבה של הקוד, אז לחצתי על הדבר הקרוב ביותר ("Start Debugging"), ואז קיבלתי את הודעת השגיאה המסתורית הזו:
הבנתם? גם אני לא. למרבה המזל, מישהו אחר נתקל באותה בעיה לפני שנה בערך וקיבל תשובה בפורומים של STMicroelectronics: מסתבר שצריך להריץ את הקובץ ST Toolset.msi שנמצא בתיקיית ההתקנה C:\Program Files (x86)\STMicroelectronics\st_toolset\stvd\dao . זה מסוג הדברים שגורמים לי לרצות לתפוס פטיש ולנתץ את הג'וק הארור – אלא שלאחר הפעולה הזו, לחצן הדיבוג דווקא עבד, הלדים על הצורב הבהבו וקיבלתי מספר אפשרויות חדשות בסביבת הפיתוח, ביניהן האפשרות להריץ את הקוד (מסומנת באייקון של סימן קריאה אדום, השד יודע למה). קדימה לבלינק!
לוחות STM8S מדגם אחר וזול עוד יותר
לא למתחילים
השלב הבא הוא למצוא לאילו רגיסטרים צריך לכתוב מה כדי להפעיל פלט HIGH או LOW בפין מסוים. בחרתי מראש את פין PD6 כי היה נוח לחבר אליו במטריצה את הנגד בשביל נורית ה-LED שחוברה, בצדה השני, לפין GND. את השמות של הרגיסטרים ותיאור מינימליסטי מצאתי ב-datasheet של המיקרו-בקר עצמו, אבל כדי להבין מה בדיוק צריך לעשות איתם הייתי חייב לעבור למסמך אחר, ה-Reference Manual של משפחת המיקרו-בקרים כולה. שם, בסעיף 11.3 (עמ' 107 והלאה) מצאתי את הפירוט הזה:
יש הרבה דברים מסתוריים בטבלה הזו, ללא ספק, ואם זה היה המפגש הראשון שלי עם מיקרו-בקרים, סביר להניח שזה גם היה המפגש האחרון. למזלי ידעתי פחות או יותר מה לחפש, ואחרי עוד כמה בירורים ראשוניים במסמכים האלה כתבתי קוד שאמור היה רק להדליק את ה-LED – בהשהיה ובכיבוי בלולאה אטפל אחר כך.
ו-הופ! הודעת שגיאה של הקומפיילר: הוא לא מכיר את הקבועים PD_DDR ושאר שמות הרגיסטרים בהם השתמשתי. זה דווקא לא מפתיע במיוחד – גם בסביבות פיתוח אחרות למיקרו-בקרים אחרים צריך לכתוב פקודת include לקובץ header שמכיל את ההגדרות המתאימות. אבל איך קוראים לקובץ הזה? גם כאן, איזו הפתעה, התשובה לא היתה מובנת מאליה ואף אחד לא טרח להדגיש אותה בשום מקום. רק בעקבות כמה ניסיונות נפל וחיטוט בעוד מסמכים הגעתי לפתרון הנכון (לקומפיילר הספציפי הזה): iostm8s.h .
סוף כל סוף, זה עבד. עוד לא מצאתי פקודת delay מובנית, אבל לולאת מניה פשוטה הספיקה כדי ליצור את האפקט המבוקש, וגרמתי לבלינק הזה לעבוד. הקוד מופיע בתמונה למטה. זה היה, בלי שום תחרות, הבלינק המתיש ביותר שנתקלתי בו עד היום. אני מקווה שהשלבים הבאים יהיו קצת יותר פשוטים – בכל אופן, ברור שללא רקע קודם במיקרו-בקרים ו/או ליווי צמוד מאיש מקצוע, מתחילים צריכים לברוח מלוחות הפיתוח האלה כמו מאש.
ובנימה אופטימית זו נעצור להפעם. בפרק הבא אנסה להפעיל פיצ'ר קטן ומעניין של המיקרו-בקרים האלה – מחולל צלילים מובנה!
זה באמת סיוט להרים את הסביבה הזו, היה לי קשה מאוד כנראה בלי הפוסט הזה 🙂
אתה עובד עם STM8? יש סיבה מיוחדת שבחרת לעבוד עם הכלים האלה?
משתעשע עם ה-STM8 ועם כל מיני 8051 לאחרונה (למשל STC15F104W – זה ממש כיף שלא צריך כל מיני צורבים יעודיים כי יש לזה בוטלואדר UART פנימי). די נמאס לי מ-AVR, אני שונא את atmel studio כי היא כזו כבדה ו-bloated, ולא מוצא סיבה טובה להמשיך לעבוד עם AVR באופן בלעדי. אז מה נשאר? ה-PICים נראים לי סתם יקרים, יתר עולמות ה-8 ביט זה רק 8051ים, רכיבי OTP מוזרים וכמה ארכיטקטורות אקסקלוסיביות יותר, שהנפוץ ביניהם הוא בפער STM8. אז אני נותן לזה צ'אנס – הארכיטקטורה והפריפריות סך הכל חביבים, וזה מספיק זול בכדי שלא יהיה לי אכפת. אפשר לקפוץ למעבדי ARM… לקרוא עוד »
יש הרבה ביקורות לגיטימיות על PIC, דווקא עניין המחיר שהזכרת מפתיע אותי – באתרים המקצועיים, לפחות, דגמים חדשים ומתקדמים בהרבה מהצ'יפ שבפוסט נמכרים יותר בזול. וסתם לידע כללי, הדור החדש של AVR (ה-0-Series וה-1-Series) שונה מהקודמים, ו-Microchip דוחפים את השימוש ב-MPLAB X על חשבון Atmel Studio. לא שזו סביבה קלילה או משהו, ועדיין נחמד שיהיה מקום אחד לתכנת בו את כל ה-PIC, ה-AVR וה-SAM.
בכל אופן, אני שמח שהפוסט הזה עזר, ותמיד טוב לראות אנשים מנסים טכנולוגיות חדשות ולא נשארים תקועים במקום 🙂 אתה מוזמן לשתף חוויות ומסקנות!