فهرست مطالب:
- مرحله 1: سخت افزار و نرم افزار مورد نیاز
- مرحله 2: درک مشکل
- مرحله 3: پیکربندی STM32CubeMX
- مرحله 4: توسعه نرم افزار Keil
- مرحله 5: نتیجه گیری
تصویری: Debounce STM32CubeMX با وقفه: 5 مرحله
2024 نویسنده: John Day | [email protected]. آخرین اصلاح شده: 2024-01-30 08:54
سلام ، در این آموزش من سعی می کنم راه حل ساده خود را برای جلوگیری از برگشتن دکمه ارائه کنم که مسئله ای بسیار جدی است. در اینترنت ویدیوهای زیادی برای ارائه راه حل برای این مشکل وجود دارد ، اما هیچ کدام از آنها برای وقفه خارجی وجود ندارد. در همه این فیلم ها فشار دکمه با روش نظرسنجی بررسی می شود که ناکارآمد است. بنابراین ، بیایید شروع کنیم!
مرحله 1: سخت افزار و نرم افزار مورد نیاز
الزامات سخت افزاری:
- برد توسعه STM32 ARM
- یک کامپیوتر
الزامات نرم افزاری:
- STM32CubeMX
- Keil uVision5
مرحله 2: درک مشکل
بنابراین ، ما سعی می کنیم راه حلی برای مشکل پرش دکمه پیدا کنیم. بنابراین ، ما باید موضوع را درک کنیم. بنابراین ، هنگامی که ما یک دکمه را فشار می دهیم ، باید به حالتی برسد که برخلاف حالت قبلی است. به عنوان مثال ، اگر ارتفاع آن بالا بود ، باید LOW باشد و اگر پایین بود ، باید HIGH باشد. با این حال ، این حالت ایده آل است (در PROTEUS:)) در حقیقت ، وقتی دکمه ای را فشار می دهیم ، قبل از رسیدن به حالت آماده به کار ، بین HIGH و LOW شروع به جست و خیز می کند. بنابراین ، وانمود می کند که چندین بار فشار داده است که باعث ایجاد مشکل می شود. بنابراین ، ما باید چه کار کنیم؟
در اینجا می خواهم توجه داشته باشم که در این مثال ، از وقفه خارجی برای تشخیص فشار دکمه استفاده می کنیم. بنابراین ، پس از تشخیص فشار دکمه ، باید کمی زمان مانند 50mS منتظر بمانیم تا به حالت آماده به کار برسیم و دوباره بررسی کنیم که آیا دکمه حالت بیکاری دارد یا خیر. اگر در حالت بیکاری باشد ، می توانیم به کار خود ادامه دهیم. بنابراین ، بیایید کد را ببینیم:)
مرحله 3: پیکربندی STM32CubeMX
بنابراین ، ابتدا باید وقفه خارجی را برای دکمه فشاری خود فعال کنیم (در اینجا فرض می کنم که شما از صفحه کشف STM32F407VG استفاده می کنید):
- در برگه "Pinout & Configuration" روی پین PA0 که به دکمه متصل است کلیک کنید و GPIO_EXTI0 را انتخاب کنید که وقفه خارجی را در آن پین فعال می کند.
- "برچسب کاربر" پین را به "Push_Button" یا هر چیزی که می خواهید تغییر دهید.
سپس ، ما باید تایمر را به منظور ایجاد تاخیر زمانی 50mS پیکربندی کنیم:
- وارد قسمت "تایمرها" شوید
- روی TIM1 کلیک کنید
- "ساعت داخلی" را به عنوان منبع ساعت انتخاب کنید
-
در پیکربندی (اگر می خواهید این بخش را درک کنید ، لطفاً به این آموزش مراجعه کنید ، "کنترل موتور سروو با STM32F4 ARM MCU" که بسیار توصیه می شود):
- پیش فروش را 32000 تنظیم کنید
- و دوره مقدماتی تا 50
- در برگه "تنظیمات NVIC" همه وقفه ها را فعال کنید
LED را به عنوان خروجی فعال کنید:
روی PD12 کلیک کنید و به عنوان "GPIO_Output" تنظیم کنید
سپس ، ساعت را مانند تصویر بالا پیکربندی کرده و کد را تولید کنید.
مرحله 4: توسعه نرم افزار Keil
اول ، ما متغیر حالت را تعریف می کنیم که اطمینان می دهد هنگام وقوع تندر زمان سنج را در وقفه خارجی شروع نمی کنیم:
/ * USER CODE BEGIN PFP */bool state = true؛ / * USER CODE END 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؛ } else {_NOP ()؛ }}
وقتی دکمه را فشار می دهیم ، بررسی می کنیم که آیا دکمه تعریف شده ما بوده است یا خیر یا خیر. در ابتدا حالت برای وارد کردن دستور if درست خواهد بود. پس از ورود ، ما تایمر را راه اندازی می کنیم و حالت را نادرست می کنیم تا مطمئن شویم که بازگرداندن زمان سنج دوباره شروع نمی شود.
سپس ، ISR را برای وقفه زمان سنج می نویسیم:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *جلوگیری از آرگومان (های) استفاده نشده هشدار کامپایل * / UNUSED (htim) ؛
/* توجه: در صورت نیاز به تماس مجدد ، این عملکرد نباید اصلاح شود ،
HAL_TIM_PeriodElapsedCallback را می توان در فایل کاربر پیاده سازی کرد */ اگر (HAL_GPIO_ReadPin (Push_Button_GPIO_Port، Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD، GPI12)؛ state = true؛ HAL_TIM_Base_Stop_IT (& htim1) ؛ }}
/ * USER CODE END 4 */
پس از 50mS ما بررسی می کنیم که آیا دکمه هنوز در حالت تنظیم مجدد است یا آزاد شده است ، اگر بله ، می دانیم که دکمه در حالت آماده به کار است. سپس led را تغییر می دهیم ، حالت را درست می کنیم تا بتوانیم یک دکمه دیگر را فشار دهیم و تایمر را متوقف کنیم تا بتوانیم دوباره آن را شروع کنیم.
بنابراین ، این فرآیند اطمینان می دهد که ما از بروز مشکل جلوگیری می کنیم.
مرحله 5: نتیجه گیری
این کد برای خروج از دکمه بود. می خواهم توجه داشته باشم که این کد توسط من تهیه شده است و من یک برنامه نویس متخصص نیستم. بنابراین ، مطمئناً ممکن است خطاهایی وجود داشته باشد. اگر راه حل بهتری دارید لطفاً توجه کنید. فراموش نکنید ، اگر با مشکلی برخورد کردید لطفاً برای من بنویسید و من سعی خواهم کرد به شما کمک کنم.
توصیه شده:
آزمایشگاه وقفه (کار در حال پیشرفت): 3 مرحله
Interrupts Lab (کار در حال پیشرفت): هدف این آزمایشگاه اجرای یک برنامه آردوینو با استفاده از Interrupts است. این آزمایشگاه به دلیل مشکلات برنامه نویسی به درستی کار نمی کند. آنچه شما نیاز دارید:- 1 Arduino Uno- 1 Breadboard- 1 دکمه فشاری- 3 LED- مقاومت 220 اهم- سیم های بلوز
360 درجه بسیار ارزان زمان وقفه کوه V2.0: 4 مرحله
360 درجه بسیار ارزان زمان وقفه کوه V2.0: این ارتقاء & nbsp؛ 360 & deg؛ بسیار ارزان Time Lapse mount v1.0 اینجا
طراحی یک کنترل کننده وقفه قابل برنامه ریزی در VHDL: 4 مرحله
طراحی یک کنترل کننده وقفه قابل برنامه ریزی در VHDL: من از نوع پاسخ هایی که در این وبلاگ دریافت می کنم غرق شده ام. بچه ها از اینکه به وبلاگ من سر زدید و انگیزه ای برای به اشتراک گذاشتن دانش خود با شما داشتم ، متشکرم. این بار ، من قصد دارم طراحی یک ماژول جالب دیگر را که در همه SOC ها مشاهده می کنیم - Interrupt C
جعبه زمان وقفه: 5 مرحله
Time-Lapse Box: این آموزش نحوه ایجاد تنظیمات Raspberry Pi را برای عکاسی از تایم لپس نشان می دهد! این تنظیمات از یک جعبه حاوی منبع نور و یک دوربین (PiCamera) ساخته شده توسط Raspberry Pi برای گرفتن عکس و بارگذاری آنها در Google ساخته شده است. درایو. من نور خود را اعمال می کنم
سنسور اثر آردوینو هال با وقفه: 4 مرحله
سنسور جلوه آردوینو با وقفه: سلام به همه ، امروز به شما نشان خواهم داد که چگونه می توانید سنسور جلوه سالن را به آردوینو متصل کرده و با وقفه از آن استفاده کنید. ابزارها و مواد مورد استفاده در ویدیو (پیوندهای وابسته): Arduino Uno: http : //s.click.aliexpress.com/e/biNyW0zK سنسورهای اثر هال: ساعت