সুচিপত্র:

STM32CubeMX বাটন ডিবাউন্স ইনট্রাপ্ট: ৫ টি ধাপ
STM32CubeMX বাটন ডিবাউন্স ইনট্রাপ্ট: ৫ টি ধাপ

ভিডিও: STM32CubeMX বাটন ডিবাউন্স ইনট্রাপ্ট: ৫ টি ধাপ

ভিডিও: STM32CubeMX বাটন ডিবাউন্স ইনট্রাপ্ট: ৫ টি ধাপ
ভিডিও: 2.8 Inch TFT Touch LCD 01: bare board review 2024, ডিসেম্বর
Anonim
STM32CubeMX বাটন ডিবাউন্স ইন্টারাপ্ট সহ
STM32CubeMX বাটন ডিবাউন্স ইন্টারাপ্ট সহ

হাই, এই টিউটোরিয়ালে আমি বোতাম বাউন্স প্রতিরোধের জন্য আমার সহজ সমাধান দেওয়ার চেষ্টা করব যা খুবই গুরুতর সমস্যা। ইন্টারনেটে এই সমস্যার সমাধানের জন্য অনেক ভিডিও আছে, কিন্তু বাহ্যিক বাধার জন্য সেগুলি নয়। এই সমস্ত ভিডিওতে বোতাম প্রেস করা হয় ভোটের পদ্ধতি দ্বারা যা অকার্যকর। সুতরাং শুরু করি!

ধাপ 1: হার্ডওয়্যার এবং সফটওয়্যারের প্রয়োজনীয়তা

হার্ডওয়্যারের প্রয়োজনীয়তা:

  • STM32 ARM ডেভেলপমেন্ট বোর্ড
  • একটি কম্পিউটার

সফ্টওয়্যার প্রয়োজনীয়তা:

  • STM32CubeMX
  • Keil uVision5

পদক্ষেপ 2: সমস্যা বোঝা

সমস্যা বোঝা
সমস্যা বোঝা

সুতরাং, আমরা বোতাম বাউন্সিং সমস্যার সমাধান খোঁজার চেষ্টা করি। অতএব, আমাদের বিষয়টি বুঝতে হবে। সুতরাং, যখন আমরা একটি বোতাম টিপি তখন এটি এমন একটি রাষ্ট্র আসা উচিত যা তার আগের অবস্থার বিপরীত। উদাহরণস্বরূপ, যদি এটি উচ্চ হয় তবে এটি কম হতে হবে এবং যদি এটি কম হয় তবে এটি উচ্চ হতে হবে। যাইহোক, এটি আদর্শ অবস্থা (সুরক্ষায়:)) বাস্তবে, যখন আমরা একটি বোতাম টিপি তখন এটি নিষ্ক্রিয় অবস্থায় আসার আগে উচ্চ এবং নিম্নের মধ্যে বাউন্স করা শুরু করে। সুতরাং, ভান করে যে এটি বেশ কয়েকবার চাপানো হয়েছে যা সমস্যা সৃষ্টি করে। সুতরাং, আমাদের কি করা উচিত?

এখানে আমি লক্ষ্য করতে চাই যে এই উদাহরণে, আমরা বোতাম প্রেস সনাক্ত করার জন্য বাহ্যিক বাধা ব্যবহার করব। সুতরাং, আমরা বাটন প্রেস শনাক্ত করার পরে আমাদের অলস অবস্থায় পৌঁছানোর জন্য 50mS এর মত কিছু সময় অপেক্ষা করতে হবে এবং বোতামটি অলস অবস্থায় আছে কি না তা আবার পরীক্ষা করতে হবে। যদি এটি নিষ্ক্রিয় অবস্থায় থাকে তবে আমরা আমাদের কাজ চালিয়ে যেতে পারি। সুতরাং, কোড দেখা যাক:)

ধাপ 3: STM32CubeMX কনফিগারেশন

STM32CubeMX কনফিগারেশন
STM32CubeMX কনফিগারেশন

সুতরাং, আমাদের প্রথমে আমাদের পুশ বোতামের জন্য বাহ্যিক বাধা সক্ষম করতে হবে (আমি এখানে ধরে নিচ্ছি যে আপনি STM32F407VG আবিষ্কার বোর্ড ব্যবহার করেন):

  • "পিনআউট এবং কনফিগারেশন" ট্যাবে পিন PA0 তে ক্লিক করুন যা পুশ বোতামের সাথে সংযুক্ত এবং GPIO_EXTI0 নির্বাচন করুন যা সেই পিনে বাহ্যিক বাধা সক্ষম করে।
  • পিনের "ব্যবহারকারী লেবেল" কে "Push_Button" বা আপনি যা চান তা পরিবর্তন করুন।

তারপর, 50mS সময় বিলম্ব তৈরি করার জন্য আমাদের টাইমার কনফিগার করতে হবে:

  • "টাইমার" বিভাগে প্রবেশ করুন
  • TIM1 এ ক্লিক করুন
  • ঘড়ির উৎস হিসেবে "অভ্যন্তরীণ ঘড়ি" নির্বাচন করুন
  • কনফিগারেশনে (যদি আপনি এই বিভাগটি বুঝতে চান তবে দয়া করে এই টিউটোরিয়ালটি পড়ুন, অত্যন্ত সুপারিশকৃত "STM32F4 ARM MCU সহ সার্ভো মোটর কন্ট্রোল"):

    • 32000 হিসাবে prescaler সেট করুন
    • এবং পাল্টা সময় 50
  • "এনভিআইসি সেটিংস" ট্যাবে সমস্ত বাধা সক্ষম করুন

একটি আউটপুট হিসাবে LED সক্ষম করুন:

PD12 তে ক্লিক করুন এবং "GPIO_Output" হিসাবে সেট করুন

তারপরে, উপরের চিত্রের মতো ঘড়িটি কনফিগার করুন এবং কোডটি তৈরি করুন।

ধাপ 4: কেইল সফটওয়্যার ডেভেলপমেন্ট

প্রথমে, আমরা স্টেট ভেরিয়েবলকে সংজ্ঞায়িত করি যা নিশ্চিত করবে যে বাউন্সিং হওয়ার সময় আমরা বাইরের বাধার ভিতরে টাইমার শুরু করি না:

/ * ব্যবহারকারী কোড শুরু PFP */বুল অবস্থা = সত্য; / * ব্যবহারকারী কোড শেষ PFP */

তারপর, আমরা বাহ্যিক বাধার জন্য ISR লিখি:

বাতিল HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {যদি (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); রাষ্ট্র = মিথ্যা; } অন্য {_NOP (); }}

বোতাম টিপে আমরা চেক করি যে এটি আমাদের সংজ্ঞায়িত পুশ বোতাম ছিল এবং রাষ্ট্রটি সত্য কিনা। শুরুতে if স্টেটমেন্টে প্রবেশ করার জন্য রাজ্যটি সত্য হবে। প্রবেশের পরে আমরা টাইমার শুরু করি এবং নিশ্চিত করি যাতে বাউন্সিং টাইমার পুনরায় আরম্ভ না করে।

তারপর, আমরা টাইমার ইন্টারাপ্টের জন্য ISR লিখি:

শূন্য

/* দ্রষ্টব্য: কলব্যাকের প্রয়োজন হলে এই ফাংশনটি পরিবর্তন করা উচিত নয়, HAL_TIM_PeriodElapsedCallback ব্যবহারকারীর ফাইলে প্রয়োগ করা যেতে পারে */ যদি (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD_ GPIOD, GPIOD_12 অবস্থা = সত্য; HAL_TIM_Base_Stop_IT (& htim1); }}

/ * ব্যবহারকারীর কোড শেষ 4 */

50mS এর পরে আমরা চেক করি যে বোতামটি এখনও রিসেট অবস্থায় আছে কি না, যদি হ্যাঁ হয় তাহলে আমরা জানি যে বোতামটি নিষ্ক্রিয় অবস্থায় আছে। তারপরে আমরা নেতৃত্বকে টগল করি, অন্য বোতাম টিপতে এবং এটি আবার শুরু করতে সক্ষম হওয়ার জন্য টাইমার বন্ধ করতে সক্ষম হওয়ার জন্য রাষ্ট্রকে সত্য করে তুলি।

সুতরাং, এই প্রক্রিয়াটি নিশ্চিত করবে যে আমরা বাউন্সিং সমস্যা রোধ করি।

ধাপ 5: উপসংহার

এটি ছিল বোতাম ছাড়ার কোড। আমি লক্ষ্য করতে চাই যে এই কোডটি আমার দ্বারা তৈরি করা হয়েছিল এবং আমি একজন বিশেষজ্ঞ প্রোগ্রামার নই। সুতরাং, অবশ্যই ত্রুটি থাকতে পারে। আপনার যদি আরও ভাল সমাধান থাকে তবে দয়া করে এটি নোট করুন। ভুলে যাবেন না, যদি আপনি কোন সমস্যার সম্মুখীন হন দয়া করে আমাকে লিখুন এবং আমি সাহায্য করার চেষ্টা করব।

প্রস্তাবিত: