תוכן עניינים:
- שלב 1: דרישות חומרה ותוכנה
- שלב 2: הבנת הבעיה
- שלב 3: תצורת STM32CubeMX
- שלב 4: פיתוח תוכנת Keil
- שלב 5: מסקנה
וִידֵאוֹ: לחצן STM32CubeMX ניתוק עם הפסקה: 5 שלבים
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
היי, במדריך זה אנסה לתת את הפתרון הפשוט שלי למניעת הקפצת כפתורים שהיא בעיה רצינית מאוד. באינטרנט ישנם סרטונים רבים להציע פתרון לבעיה זו, אך לא אחד מהם להפרעה חיצונית. בכל הסרטונים הללו לחיצת כפתור נבדקת בשיטת סקר שאינה יעילה. אז הבה נתחיל!
שלב 1: דרישות חומרה ותוכנה
דרישות חומרה:
- לוח פיתוח ARM STM32
- מחשב
דרישות תוכנה:
- STM32CubeMX
- Keil uVision5
שלב 2: הבנת הבעיה
לכן, אנו מנסים למצוא פתרון לבעיית הקפצת כפתורים. לכן עלינו להבין את הנושא. לכן, כאשר אנו לוחצים על כפתור זה אמור להגיע למצב שהוא הפוך למצב הקודם שלו. לדוגמה, אם זה היה גבוה זה חייב להיות נמוך ואם זה היה נמוך אז זה חייב להיות גבוה. עם זאת, זהו מצב אידיאלי (ב- PROTEUS:)) במציאות, כאשר אנו לוחצים על כפתור הוא מתחיל להקפיץ בין HIGH ל- LOW לפני שהוא מגיע למצב סרק. אז, מעמיד פנים שהוא נלחץ מספר פעמים מה שגורם לבעיות. אז מה עלינו לעשות?
כאן אני רוצה לציין שבדוגמה זו נשתמש בהפרעה חיצונית על מנת לזהות לחיצה על כפתורים. לכן, לאחר שזיהינו לחיצה על כפתורים עלינו להמתין מעט זמן, כמו 50mS כדי להגיע למצב סרק ולבדוק שוב אם הלחצן הוא מצב סרק או לא. אם הוא במצב סרק אז נוכל להמשיך במשימה שלנו. אז בואו נראה את הקוד:)
שלב 3: תצורת STM32CubeMX
אז עלינו לאפשר תחילה הפרעה חיצונית ללחצן הלחיצה שלנו (אני מניח שכאן אתה משתמש בלוח גילוי STM32F407VG):
- בכרטיסייה "Pinout & Configuration" לחץ על PIN PA0 המחובר ללחצן הלחיצה ובחר GPIO_EXTI0 המאפשר הפרעה חיצונית בסיכה זו.
- שנה את "תווית המשתמש" של הסיכה ל- "Push_Button" או כל דבר שתרצה.
לאחר מכן, עלינו להגדיר טיימר על מנת ליצור עיכוב זמן של 50ms:
- היכנס לקטע "טיימרים"
- לחץ על TIM1
- בחר "שעון פנימי" כמקור שעון
-
בתצורה (אם אתה רוצה להבין את הסעיף הזה עיין במדריך זה, מומלץ מאוד "בקרת מנועי סרוו עם STM32F4 ARM MCU"):
- הגדר מראש מכשיר כ 32000
- ותקופה נגדית עד 50
- בכרטיסייה "הגדרות NVIC" אפשר את כל ההפרעות
אפשר LED כפלט:
לחץ על PD12 והגדר כ- "GPIO_Output"
לאחר מכן, הגדר את השעון כמו בתמונה שניתנה למעלה וצור את הקוד.
שלב 4: פיתוח תוכנת Keil
ראשית, אנו מגדירים משתנה מצב שיבטיח שלא נפעיל טיימר בתוך הפרעה חיצונית כאשר קפצה קרתה:
/ * CODE USER BEGIN PFP */bool state = true; / * סיום קוד משתמש PFP */
לאחר מכן, אנו כותבים ISR להפרעה חיצונית:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); state = false; } אחר {_NOP (); }}
כאשר לחצו על כפתור אנו בודקים אם זה היה כפתור הלחיצה המוגדר שלנו והאם המצב נכון. בהתחלה המצב יהיה נכון על מנת להזין את המשפט if. לאחר הכניסה אנו מתחילים את הטיימר ועושים מצב לא נכון על מנת להבטיח שההקפצה לא תפעיל את הטיימר מחדש.
לאחר מכן, אנו כותבים ISR להפסקה של טיימר:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *מניעת אזהרת אוסף טיעונים שאינם בשימוש * / UNUSED (htim);
/* הערה: אין לשנות פונקציה זו, כאשר יש צורך בחיוג חוזר, ניתן ליישם את HAL_TIM_PeriodElapsedCallback בקובץ המשתמש */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_); מצב = נכון; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * סיום קוד משתמש 4 */
לאחר 50mS אנו בודקים אם הלחצן עדיין במצב איפוס או שוחרר, אם כן, אנו יודעים כי הכפתור במצב סרק. לאחר מכן אנו מחליפים את הלד, הופכים את המצב לאמיתי על מנת שנוכל לזהות לחיצה נוספת על כפתור ולעצור את הטיימר בכדי שנוכל להפעיל אותו מחדש.
לכן, תהליך זה יבטיח כי אנו מונעים בעיות קופצות.
שלב 5: מסקנה
זה היה קוד להפחתת כפתורים. אני רוצה לציין שהקוד הזה פותח על ידי ואני לא מתכנת מומחה. אז, בהחלט יכולות להיות טעויות. אם יש לך פתרון טוב יותר שים לב לזה. אל תשכח, אם אתה נתקל בבעיה כלשהי אנא כתוב לי ואנסה לעזור.
מוּמלָץ:
ניתוק מרחוק של צלחת הופר: 8 שלבים
ניתוק מרחוק של צלחת הופר: מדריך זה יראה לך כיצד לפרק את שלט המנות שלך. אזהרה: אתה יכול לשבור לפחות קליפ סגר אחד שמחזיק את הבקר יחד. אל דאגה, לבקר יש קליפים רבים מבחוץ ואפילו לא תשימו לב
חיסכון בסוללה, מתג ניתוק מגן פריקה עם ATtiny85 למכונית חומצת עופרת או סוללה ליפו: 6 שלבים
חיסכון בסוללה, מתג ניתוק מגן פריקה עם ATtiny85 למכונית חומצת עופרת או סוללת ליפו: מכיוון שאני צריך מספר מגיני סוללה למכוניות ומערכות סולאריות שלי מצאתי את המסחריות במחיר של 49 $ יקר מדי. הם גם משתמשים בכוח רב מדי עם 6 mA. לא הצלחתי למצוא הוראות בנושא. אז הכנתי לבד שצייר 2mA איך זה
בקר מיקרו AVR. החלף נוריות LED באמצעות מתג לחצן. הפעלת לחצן לחיצה: 4 שלבים
בקר מיקרו AVR. החלף נוריות LED באמצעות מתג לחצן. הפעלת לחצני לחיצות: בפרק זה נלמד כיצד ליצור קוד C של תוכנית ATMega328PU כדי להחליף את מצב שלוש נוריות הלדים בהתאם לקלט ממתג כפתורים. כמו כן, חקרנו פתרונות לבעיה של 'Switch Bounce'. כרגיל, אנו יכולים
קינק תקע אוזניות & מנע הפסקה: 5 שלבים
קינק תקע אוזניות & מנע הפסקה: אני נוהג הרבה, ומאזין להרבה ספרים בפורמט mp3. נמאס לי לקנות אוזניות חדשות כל חודש רק בגלל שהחבל בקצה התקע יתקלקל וישבור את החוטים בפנים. המצאתי את הגאדג'ט הזה כדי להגביל את טווח התנועה של
Elisen Lebkuchen - Musicbox - צליל ללא הפסקה !: 3 שלבים
Elisen Lebkuchen - Musicbox - Sound Non Stop !: בגרמניה אופים את אלה "אליסן לבקוצ'ן" הנפלאים האלה. זה ספיישל מהעיר נירנברג. הם גם מוכרים עוגיות אלה בקופסאות מוזיקה כ- agift (http://www.lebkuchen-markt.de/, http://www.manufactum.de/Produkt/193510/779545/Elis