Talaan ng mga Nilalaman:
- Hakbang 1: Mga Kinakailangan sa Hardware at Software
- Hakbang 2: Pag-unawa sa Suliranin
- Hakbang 3: Pag-configure ng STM32CubeMX
- Hakbang 4: Pag-unlad ng Keil Software
- Hakbang 5: Konklusyon
Video: STM32CubeMX Button na Pagwawasto Sa Pag-abala: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:12
Kumusta, sa tutorial na ito susubukan kong ibigay ang aking simpleng solusyon upang maiwasan ang pag-bounce ng pindutan na napakaseryoso sa isyu. Sa internet maraming mga video na nag-aalok ng solusyon sa isyung ito, ngunit hindi sa kanila para sa panlabas na pagkagambala. Sa lahat ng mga video na ito, ang press button ay naka-check sa pamamagitan ng paraan ng botohan na hindi mabisa. Kaya, magsimula na tayo!
Hakbang 1: Mga Kinakailangan sa Hardware at Software
Mga kinakailangan sa hardware:
- STM32 ARM development board
- Isang kompyuter
Mga kinakailangan sa software:
- STM32CubeMX
- Keil uVision5
Hakbang 2: Pag-unawa sa Suliranin
Kaya, sinusubukan naming maghanap ng solusyon para sa problema sa pag-bouncing ng button. Samakatuwid, kailangan nating maunawaan ang isyu. Kaya, kapag pinindot namin ang isang pindutan dapat itong dumating sa isang estado na kabaligtaran sa dating estado nito. Halimbawa, kung ito ay Mataas dapat itong maging mababa at kung ito ay mababa pagkatapos ito ay dapat na maging mataas. Gayunpaman, ito ay mainam na estado (sa PROTEUS:)) Sa totoo lang, kapag pinindot namin ang isang pindutan nagsisimula itong bounce sa pagitan ng TAAS at LOW bago ito dumating sa idle state. Kaya, nagpapanggap na ito ay nai-press nang maraming beses na nagiging sanhi ng mga problema. Kaya, ano ang dapat nating gawin?
Dito nais kong tandaan na sa halimbawang ito, gagamit kami ng panlabas na makagambala upang makita ang pindot ng pindutan. Kaya, pagkatapos naming makita ang pindutin ang pindutan kailangan naming maghintay ng kaunting oras, tulad ng 50mS upang maabot ang idle na estado at suriin muli kung ang pindutan ay idle na estado o hindi. Kung nasa idle state ito pagkatapos ay maaari nating ipagpatuloy ang aming gawain. Kaya, tingnan natin ang code:)
Hakbang 3: Pag-configure ng STM32CubeMX
Kaya, kailangan muna naming paganahin ang panlabas na makagambala para sa aming pindutan ng itulak (ipinapalagay ko dito na gumagamit ka ng board ng pagtuklas ng STM32F407VG):
- Sa tab na "Pinout & Configuration" mag-click sa pin PA0 na konektado sa pindutan ng push at piliin ang GPIO_EXTI0 na nagbibigay-daan sa panlabas na makagambala sa pin na iyon.
- Palitan ang "label ng gumagamit" ng pin sa "Push_ Button" o anumang nais mo.
Pagkatapos, kailangan naming i-configure ang timer upang lumikha ng pagkaantala ng 50mS na oras:
- Ipasok ang seksyong "Mga timer"
- Mag-click sa TIM1
- Piliin ang "Panloob na Orasan" bilang isang mapagkukunan ng Orasan
-
Sa pagsasaayos (Kung nais mong maunawaan ang seksyong ito mangyaring sumangguni sa tutorial na ito, lubos na inirerekumenda ang "Servo Motor Control Sa STM32F4 ARM MCU"):
- Itakda ang prescaler bilang 32000
- At counter period hanggang 50
- Sa tab na "Mga Setting ng NVIC," paganahin ang lahat ng mga nakakagambala
Paganahin ang LED bilang isang output:
Mag-click sa PD12 at itakda bilang "GPIO_Output"
Pagkatapos, i-configure ang orasan tulad ng sa imaheng ibinigay sa itaas at bumuo ng code.
Hakbang 4: Pag-unlad ng Keil Software
Una, tinukoy namin ang variable ng estado na makatiyak na hindi kami magsisimulang timer sa loob ng panlabas na pagkagambala kapag naganap ang pag-bouncing:
/ * USER CODE BEGIN PFP * / bool state = true; / * USER CODE END PFP * /
Pagkatapos, nagsusulat kami ng ISR para sa panlabas na makagambala:
walang bisa HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {kung (GPIO_Pin == Push_ Button_Pin && estado == totoo) {HAL_TIM_Base_Start_IT (& htim1); estado = mali; } iba pa {_NOP (); }}
Kapag pinindot ang pindutan sinusuri namin kung ito ang aming tinukoy na pindutan ng itulak at kung ang estado ay totoo. Sa simula ang estado ay magiging totoo upang maipasok ang kung pahayag. Matapos ang pagpasok simulan namin ang timer at gawing hindi totoo ang estado upang matiyak na ang bouncing ay hindi i-restart ang timer.
Pagkatapos, nagsusulat kami ng ISR para sa timer makagambala:
walang bisa HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Pigilan ang (mga) hindi nagbigay ng babalang babala * / UNUSED (htim);
/ * TANDAAN: Ang pagpapaandar na ito ay hindi dapat mabago, kung kinakailangan ang callback, ang HAL_TIM_PeriodElapsedCallback ay maaaring ipatupad sa file ng gumagamit * / kung (HAL_GPIO_ReadPin (Push_ Button_GPIO_Port, Push_button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); estado = totoo; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * USER CODE END 4 * /
Pagkatapos ng 50mS sinusuri namin kung ang pindutan pa rin sa naka-reset na estado o inilabas, kung oo alam namin na ang pindutan ay nasa idle na estado. Pagkatapos ay i-toggle namin ang pinangunahan, gawing totoo ang estado upang makapag-tiktikan ang isa pang pindutin ang pindutan at ihinto ang timer upang masimulan itong muli.
Kaya, titiyakin ng prosesong ito na pipigilan namin ang isyu ng pagba-bounce.
Hakbang 5: Konklusyon
Ito ang code para sa pag-debug ng pindutan. Nais kong tandaan na ang code na ito ay binuo ko at hindi ako dalubhasang programmer. Kaya, tiyak na maaaring may mga pagkakamali. Kung mayroon kang mas mahusay na solusyon mangyaring tandaan ito. Huwag kalimutan, kung nakatagpo ka ng anumang problema mangyaring sumulat sa akin at susubukan kong tumulong.
Inirerekumendang:
May Pinag-usbong kwelyo ng Pagwawasto para sa Mikroskopyo: 8 Hakbang (na may Mga Larawan)
Layunin sa Pagwawasto ng Motor para sa Mikroskopyo Layunin: Sa itinuturo na ito, mahahanap mo ang isang proyekto na may kinalaman sa isang Arduino at 3D na pag-print. Ginawa ko ito upang makontrol ang kwelyo ng pagwawasto ng isang layunin ng mikroskopyo. Ang layunin ng proyekto Ang bawat proyekto ay may isang kuwento, narito ito: Nagtatrabaho ako sa isang c
Isang Eksperimento sa Pagwawasto ng Precision: 11 Mga Hakbang
Isang Eksperimento sa Pagwawasto ng Katumpakan: Natapos ako kamakailan lamang ng isang eksperimento sa isang tumpak na circuit ng pagwawasto at nakakuha ng ilang magaspang na konklusyon. Isinasaalang-alang na ang tumpak na circuit ng tagatuwid ay isang pangkaraniwang circuit, ang mga resulta ng eksperimentong ito ay maaaring magbigay ng ilang impormasyon sa sanggunian. Ang
Smart Meter Na May Awtomatikong Power Factor Pagwawasto ng Yunit: 29 Mga Hakbang
Ang Smart Meter Na may Awtomatikong Yunit ng Pagwawasto ng Kadahilanan ng Lakas: Ang isang bidirectional meter na may awtomatikong pagbabago ng gadget ng gadget na pang-aktibo at reaktibo ng kapangyarihan at saka ang kadahilanan ng kuryente mula sa linya ng boltahe at linya ng kasalukuyang kahulugan sa pamamagitan ng boltahe at kasalukuyang sensor. Napagpasyahan nito ang yugto ng slack sa pagitan ng
ESP32 NTP Temperatura Probe Cooking Thermometer Na May Steinhart-Hart Pagwawasto at Temperatura Alarm .: 7 Hakbang (na may Mga Larawan)
ESP32 NTP Temperatura Probe Cooking Thermometer Na May Steinhart-Hart Pagwawasto at Temperatura Alarm .: Nasa paglalakbay pa rin upang makumpleto ang isang " paparating na proyekto ", " ESP32 NTP Temperatura Probe Cooking Thermometer Na May Steinhart-Hart Pagwawasto at Temperatura Alarm " ay isang Naituturo na nagpapakita kung paano ako nagdaragdag ng isang probe ng temperatura ng NTP, piezo b
Turntable (phono) Preamp Sa RIAA Pagwawasto: 7 Hakbang
Turntable (phono) Preamp Sa RIAA Pagwawasto: Kumusta. Ito ang aking unang itinuturo. Nakita kong hindi sinasadya ang paligsahan ng PCB at nagpasyang ibahagi ang proyektong ito. Ang preamplifier na ito ay ginawa noong Marso-Abril 2018. Nagsisimula ang kwento nang ang isang kaibigan, na sa pamamagitan ng paraan ay isang tagagawa at si DJ, si Mihail P, ay bumili ng isang paikutan.