Სარჩევი:
- ნაბიჯი 1: აპარატურისა და პროგრამული უზრუნველყოფის მოთხოვნები
- ნაბიჯი 2: პრობლემის გაგება
- ნაბიჯი 3: STM32CubeMX კონფიგურაცია
- ნაბიჯი 4: Keil პროგრამული უზრუნველყოფის განვითარება
- ნაბიჯი 5: დასკვნა
ვიდეო: STM32CubeMX ღილაკი დებიუნით შეწყვეტით: 5 ნაბიჯი
2024 ავტორი: John Day | [email protected]. ბოლოს შეცვლილი: 2024-01-30 10:18
გამარჯობა, ამ გაკვეთილზე მე შევეცდები მოგცეთ მარტივი გამოსავალი, რათა თავიდან ავიცილოთ ღილაკების გადახტომა, რაც ძალიან სერიოზული საკითხია. ინტერნეტში არის ბევრი ვიდეო, რომელიც გთავაზობთ ამ საკითხის გადაწყვეტას, მაგრამ არცერთი მათგანი გარე შეფერხებისთვის. ყველა ამ ვიდეოში ღილაკის დაჭერა შემოწმებულია გამოკითხვის მეთოდით, რომელიც არაეფექტურია. მაშ, დავიწყოთ!
ნაბიჯი 1: აპარატურისა და პროგრამული უზრუნველყოფის მოთხოვნები
ტექნიკის მოთხოვნები:
- STM32 ARM განვითარების დაფა
- კომპიუტერი
პროგრამული უზრუნველყოფის მოთხოვნები:
- STM32CubeMX
- კეილი uVision 5
ნაბიჯი 2: პრობლემის გაგება
ამრიგად, ჩვენ ვცდილობთ ვიპოვოთ გამოსავალი ღილაკზე გადახტომის პრობლემისთვის. ამიტომ, ჩვენ უნდა გვესმოდეს საკითხი. ამრიგად, როდესაც ჩვენ ვაჭერთ ღილაკს, ის უნდა მოვიდეს წინა მდგომარეობის საპირისპიროდ. მაგალითად, თუ ის იყო მაღალი ის უნდა იყოს დაბალი და თუ იყო დაბალი მაშინ ის უნდა იყოს მაღალი. თუმცა, ეს არის იდეალური მდგომარეობა (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 გარე შეფერხებისთვის:
ბათილია HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); მდგომარეობა = ყალბი; } სხვა {_NOP (); }}
ღილაკზე დაჭერისას ჩვენ ვამოწმებთ იყო თუ არა ეს ჩვენი განსაზღვრული ღილაკი და არის თუ არა მდგომარეობა სიმართლე. დასაწყისში სახელმწიფო იქნება ჭეშმარიტი, რათა შეიტანოს if განცხადება. შესვლის შემდეგ ჩვენ ვიწყებთ ტაიმერს და ვაქცევთ მდგომარეობას ყალბი, რათა დავრწმუნდეთ, რომ ხტომა არ განაახლებს ტაიმერს.
შემდეგ, ჩვენ ვწერთ ISR ტაიმერის შეწყვეტისთვის:
ბათილია 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); მდგომარეობა = ჭეშმარიტი; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * მომხმარებლის კოდი ბოლოს 4 */
50mS- ის შემდეგ ჩვენ ვამოწმებთ, არის თუ არა ღილაკი გადატვირთვის მდგომარეობაში ან გათავისუფლებულია, თუ კი, მაშინ ჩვენ ვიცით, რომ ღილაკი უმოქმედო მდგომარეობაშია. შემდეგ ჩვენ ვრთავთ led- ს, ვაქცევთ მდგომარეობას ჭეშმარიტებად, რათა შევძლოთ სხვა ღილაკის დაჭერა და ტაიმერის გაჩერება, რათა შევძლოთ მისი ხელახლა დაწყება.
ამრიგად, ეს პროცესი უზრუნველყოფს, რომ ჩვენ თავიდან ავიცილოთ ხვრინვის საკითხი.
ნაბიჯი 5: დასკვნა
ეს იყო კოდი ღილაკზე დენონსირებისთვის. მინდა აღვნიშნო, რომ ეს კოდი შემუშავებულია ჩემ მიერ და მე არ ვარ ექსპერტი პროგრამისტი. ასე რომ, რა თქმა უნდა შეიძლება იყოს შეცდომები. თუ უკეთესი გამოსავალი გაქვთ გთხოვთ გაითვალისწინოთ. ნუ დაგავიწყდებათ, თუ რაიმე პრობლემა შეგექმნებათ მომწერეთ და მე შევეცდები დაგეხმაროთ.
გირჩევთ:
Microsoft გუნდების მუნჯი ღილაკი: 4 ნაბიჯი
Microsoft გუნდების დადუმების ღილაკი: შექმენით ადვილად მისაწვდომი ღილაკი Microsoft გუნდების ზარზე საკუთარი თავის დადუმების/დადუმების მიზნით! იმის გამო, რომ 2020 წ. ეს პროექტი იყენებს Adafruit Circuit Playground Express (CPX) და დიდ ღილაკს, რათა შექმნას მუნჯი ღილაკი Microsoft გუნდებისთვის ცხელი ღილაკის საშუალებით
$ 5 სახლის ავტომატიზაციის ღილაკი: 4 ნაბიჯი
სახლის $ 5 ავტომატიზაციის ღილაკი: $ 5 სახლის ავტომატიზაციის ღილაკი ზოგჯერ უმარტივესი გამოსავალი არის ერთი ღილაკი. ჩვენ გვინდოდა მარტივი გზა გაეღვიძებინა „ძილის წინ“რუტინა ჩვენი სახლის ავტომატიზაციის ცენტრში (Hubitat Elevation), რომელიც გამორთავს უმეტეს განათებას, აყენებს სხვებს კონკრეტულ დონეზე და
გათიშვის ღილაკი ჟოლოს პიისთვის: 3 ნაბიჯი
გათიშვის ღილაკი ჟოლოს Pi: Raspberry Pi არის ძალიან გამოთვლითი პლატფორმა, რომელიც საშუალებას გაძლევთ შექმნათ სხვადასხვა IoT/robotics/smart-home/… პროექტის პროგრამები. ერთი რამ, რაც მას არ აქვს, ჩვეულებრივ კომპიუტერთან შედარებით, არის გამორთვის გამორთვის ღილაკი. მაშ როგორ შეგვიძლია შევქმნათ
მბრუნავი კოდირების ღილაკი: 6 ნაბიჯი
მბრუნავი კოდირების ღილაკი: ეს არის მბრუნავი დისტანციური მართვა, რომელიც დაფუძნებულია მბრუნავ კოდირებაზე. მას აქვს შემდეგი მახასიათებლები. ბატარეა მუშაობს ძალიან დაბალი დენის მოხმარებით გააქტიურებისას ავტომატური გააქტიურება როდესაც კონტროლი ბრუნავს ავტომატური ძილი უმოქმედობის პერიოდის შემდეგ კონფიგურაცია
ღილაკი უჯრედის რვაფეხა: 8 ნაბიჯი
ღილაკი Cell Octopus: Button Cell Octopus ცვლის ღილაკის ბატარეებს. ეს სასარგებლოა მაშინ, როდესაც შემცვლელი ბატარეა ხელთ არ არის. იგი გამოიყენებოდა თერმომეტრის და ტენიანობის საზომი 4 ცენტიანი ბატარეიდან. ასევე ნაჩვენებია ამ ბატარეის დამზადება