Mündəricat:
- Addım 1: Avadanlıq və Proqram Tələbləri
- Addım 2: Problemi anlamaq
- Addım 3: STM32CubeMX Konfiqurasiyası
- Addım 4: Keil Proqram İnkişafı
- Addım 5: Nəticə
Video: STM32CubeMX Düyməsini kəsməklə çıxın: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Salam, bu dərslikdə çox ciddi bir problem olan düymənin sıçramasının qarşısını almaq üçün sadə həllimi verməyə çalışacağam. İnternetdə bu problemin həllini təklif edəcək bir çox video var, ancaq xarici müdaxilə üçün deyil. Bu videoların hamısında düymə basması səmərəsiz olan sorğu üsulu ilə yoxlanılır. Beləliklə, başlayaq!
Addım 1: Avadanlıq və Proqram Tələbləri
Avadanlıq tələbləri:
- STM32 ARM inkişaf lövhəsi
- Kompüter
Proqram tələbləri:
- STM32CubeMX
- Keil uVision 5
Addım 2: Problemi anlamaq
Beləliklə, düymələrin sıçrayan probleminin həllini tapmağa çalışırıq. Ona görə də məsələni başa düşməliyik. Beləliklə, bir düyməyə basdığımızda, əvvəlki vəziyyətinə zidd olan bir vəziyyət gəlməlidir. Məsələn, YÜKSEK olsaydı DÜŞÜK, YÜKSƏK isə YÜKSƏK olmalıdır. Ancaq bu ideal vəziyyətdir (PROTEUS -da:)) Əslində, bir düyməyə basdığımız zaman boş vəziyyətə gəlməzdən əvvəl YÜKSƏK və DÜŞÜK arasında sıçramağa başlayır. Beləliklə, problemlərə səbəb olan bir neçə dəfə basıldığını iddia edir. Yaxşı, nə etməliyik?
Burada qeyd etmək istəyirəm ki, bu nümunədə düyməni basmağı aşkar etmək üçün xarici kəsilmədən istifadə edəcəyik. Beləliklə, düyməni basdıqdan sonra boş vəziyyətə çatmaq və düymənin boş vəziyyətdə olub olmadığını yenidən yoxlamaq üçün 50mS kimi bir az gözləməliyik. Boş vəziyyətdədirsə, vəzifəmizə davam edə bilərik. Beləliklə, kodu görək:)
Addım 3: STM32CubeMX Konfiqurasiyası
Beləliklə, əvvəlcə düyməmiz üçün xarici kəsilməni aktiv etməliyik (burada STM32F407VG kəşf lövhəsindən istifadə etdiyinizi düşünürəm):
- "Pinout və Konfiqurasiya" sekmesinde, basma düyməsinə bağlı olan PA0 pininə basın və bu pin üzərində xarici müdaxiləni təmin edən GPIO_EXTI0 seçin.
- Pinin "istifadəçi etiketini" "Push_Button" və ya istədiyiniz hər şeyə dəyişdirin.
Sonra 50mS vaxt gecikməsi yaratmaq üçün taymer konfiqurasiya etməliyik:
- "Taymerlər" bölməsinə daxil olun
- TIM1 düyməsini basın
- Saat mənbəyi olaraq "Daxili Saat" ı seçin
-
Konfiqurasiyada (Bu bölümü başa düşmək istəyirsinizsə, bu təlimata baxın, yüksək tövsiyə olunan "STM32F4 ARM MCU ilə Servo Motor İdarəetmə"):
- Öncədən ölçmə cihazını 32000 olaraq təyin edin
- Və 50 -ə qarşı say
- "NVIC Ayarları" sekmesinde bütün fasilələri aktiv edin
Çıxış olaraq LED -i aktiv edin:
PD12 düyməsini basın və "GPIO_Output" olaraq təyin edin
Sonra saatı yuxarıda göstərildiyi kimi konfiqurasiya edin və kodu yaradın.
Addım 4: Keil Proqram İnkişafı
Birincisi, sıçrayış baş verdikdə xarici fasilə içərisində taymeri başlamamağımızı təmin edəcək vəziyyət dəyişənini təyin edirik:
/ * KULLANICI KODU PFP BAŞLADI */bool state = true; / * İSTİFADƏÇİ KODU SON PFP */
Sonra xarici fasilə üçün ISR yazırıq:
boş HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); vəziyyət = yalan; } başqa {_NOP (); }}
Düymə basıldığında, müəyyən edilmiş düyməmiz olub olmadığını və vəziyyətin doğru olub olmadığını yoxlayırıq. If ifadəsinə girmək üçün əvvəlcə vəziyyət doğru olacaq. Daxil olduqdan sonra, taymeri işə salırıq və sıçrayışın taymeri yenidən başlamamasını təmin etmək üçün saxta vəziyyətə salırıq.
Sonra, taymer kəsilməsi üçün ISR yazırıq:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) { / *İstifadə edilməmiş arqument (lər) tərtib xəbərdarlığı * / QULLANILMAMIŞ (htim);
/* DİQQƏT: Geri çağırma lazım olduqda bu funksiya dəyişdirilməməlidir.
HAL_TIM_PeriodElapsedCallback istifadəçi faylında tətbiq oluna bilər */ if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_) vəziyyət = doğru; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * İSTİFADƏÇİ KODU SON 4 */
50mS -dən sonra düymənin sıfırlama vəziyyətində olub olmadığını yoxlayırıqsa, bəli, bu düymənin boş vəziyyətdə olduğunu bilirik. Sonra yenidən açmaq üçün başqa bir düyməni basmaq və taymeri dayandırmaq üçün ledi dəyişirik, vəziyyəti doğru edirik.
Beləliklə, bu proses sıçrayış probleminin qarşısını almağımızı təmin edəcək.
Addım 5: Nəticə
Bu düyməni çıxarmaq üçün kod idi. Qeyd etmək istəyirəm ki, bu kod mənim tərəfimdən hazırlanmışdır və təcrübəli proqramçı deyiləm. Beləliklə, şübhəsiz ki, səhvlər ola bilər. Daha yaxşı bir həlliniz varsa, qeyd edin. Unutmayın, hər hansı bir problemlə qarşılaşsanız mənə yazın və kömək etməyə çalışacağam.
Tövsiyə:
Masadan çıxın! Makey Makey ilə: 4 addım
Masadan çıxın! Makey Makey ilə: İLK LEGO Liqası Çağırış komandasına məşqçi olsanız, komandanız (hətta məşqçiləriniz də) masaya söykənəndə məyus ola bilərsiniz. Kövrək missiya modellərini yıxa bilər, robotlarınızın işinə və hətta yoldaş yoldaşınızın robotuna müdaxilə edə bilər! U
Köhnə qulaqlıqlardan pulsuz bir IPhone Selfie düyməsini necə etmək olar: 5 addım
Köhnə Qulaqlıqlardan Pulsuz Bir IPhone Selfie Düyməsini Necə Hazırlamaq olar: Bu Təlimatı izlədiyiniz üçün təşəkkürlər !!! Bu gün sizə yalnız kiçik bir ördək lentindən və standart bir qulaqlıqdan bir selfie düyməsini necə düzəldəcəyinizi göstərəcəyəm. Şans budur ki, daha yaxşı bir şeyiniz var və onlardan artıq istifadə etməyin. Onları bir selfiyə çevirin
Arduino Geri/ Geri Düyməsini Geri Say: 4 Addım
Arduino Geri/ Geri Düyməsini Geri Say: Bu Təlimat, bir düymə ilə sıfırlaya bilən 4 Rəqəmli 7 Segmentli Ekrandan istifadə edərək geri sayım sayğacının necə yaradılacağını sizə öyrədəcək. Bunu etmək fikrinə gəldim, çünki sinifdə 1 rəqəmli 7 seqmentli ekran yaradarkən bir şey yaratmaq istədim
Yol Gəzintisinə çıxın: 16 addım (şəkillərlə)
Yol Gəzintisinə Gedin: Beləliklə, həbsxanada qaldım, birdən qaranlıqda parlayan bir işıq kimi Squid Labs -da təcrübə keçmək üçün bir təklif məktubu qandallarımı parçaladı və mən azad oldum. Yalnız bir xəbərdarlıq var idi: Ölkəni günəşli Alameda, C
USB Hub İşdən çıxın: 3 addım
USB Hub İşdən çıxın: Dynex əlavəsi olan dörd portlu USB mərkəzim var. Təxminən bir ay sonra limanlar bir -bir işini dayandırdı. Bu, Amazon.com -da bu mərkəzi nəzərdən keçirənlər arasında yayılmış bir şikayətdir. Lakin, hər şey itirilmir