สารบัญ:
- ขั้นตอนที่ 1: ข้อกำหนดด้านฮาร์ดแวร์และซอฟต์แวร์
- ขั้นตอนที่ 2: ทำความเข้าใจปัญหา
- ขั้นตอนที่ 3: การกำหนดค่า STM32CubeMX
- ขั้นตอนที่ 4: การพัฒนาซอฟต์แวร์ Keil
- ขั้นตอนที่ 5: บทสรุป
วีดีโอ: ปุ่ม STM32CubeMX เด้งด้วยการขัดจังหวะ: 5 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
สวัสดี ในบทช่วยสอนนี้ ฉันจะพยายามให้วิธีแก้ปัญหาง่ายๆ ในการป้องกันการตีกลับของปุ่มซึ่งเป็นปัญหาที่ร้ายแรงมาก บนอินเทอร์เน็ตมีวิดีโอมากมายที่จะนำเสนอวิธีแก้ปัญหานี้ แต่ไม่มีวิดีโอสำหรับการขัดจังหวะจากภายนอก ในการกดปุ่มวิดีโอเหล่านี้ทั้งหมดจะถูกตรวจสอบโดยวิธีการโพลซึ่งไม่มีประสิทธิภาพ เริ่มกันเลย!
ขั้นตอนที่ 1: ข้อกำหนดด้านฮาร์ดแวร์และซอฟต์แวร์
ข้อกำหนดด้านฮาร์ดแวร์:
- บอร์ดพัฒนา STM32 ARM
- คอมพิวเตอร์
ข้อกำหนดของซอฟต์แวร์:
- STM32CubeMX
- Keil uVision5
ขั้นตอนที่ 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; /* รหัสผู้ใช้สิ้นสุด 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(); } }
เมื่อกดปุ่ม เราจะตรวจสอบว่าเป็นปุ่มกดที่เรากำหนดไว้หรือไม่ และสถานะเป็นจริงหรือไม่ เมื่อเริ่มต้น state จะเป็น true เพื่อป้อนคำสั่ง if หลังจากป้อนแล้ว เราจะเริ่มจับเวลาและทำให้สถานะเป็นเท็จเพื่อให้แน่ใจว่าการตีกลับจะไม่เริ่มตัวจับเวลาใหม่
จากนั้น เราเขียน ISR สำหรับตัวจับเวลาขัดจังหวะ:
เป็นโมฆะ HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){ /* ป้องกันคำเตือนการรวบรวมอาร์กิวเมนต์ที่ไม่ได้ใช้ */ UNUSED(htim);
/* หมายเหตุ: ฟังก์ชันนี้ไม่ควรแก้ไข เมื่อต้องการโทรกลับ
HAL_TIM_PeriodElapsedCallback สามารถนำมาใช้ในไฟล์ผู้ใช้ */ if(HAL_GPIO_ReadPin(Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET){ HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12); รัฐ = จริง; HAL_TIM_Base_Stop_IT(&htim1); } }
/* รหัสผู้ใช้ สิ้นสุด 4 */
หลังจาก 50mS เราจะตรวจสอบว่าปุ่มอยู่ในสถานะรีเซ็ตหรือปล่อยหรือไม่ ถ้าใช่ เราจะรู้ว่าปุ่มนั้นอยู่ในสถานะไม่ได้ใช้งาน จากนั้นเราสลับไฟ LED ทำให้สถานะเป็นจริงเพื่อให้สามารถตรวจจับการกดปุ่มอื่นและหยุดตัวจับเวลาเพื่อให้สามารถเริ่มต้นได้อีกครั้ง
ดังนั้น กระบวนการนี้จะช่วยให้แน่ใจว่าเราจะป้องกันปัญหาการตีกลับ
ขั้นตอนที่ 5: บทสรุป
นี่คือรหัสสำหรับการดีบักปุ่ม ฉันต้องการทราบว่ารหัสนี้พัฒนาโดยฉันและฉันไม่ใช่โปรแกรมเมอร์ผู้เชี่ยวชาญ ดังนั้นอาจมีข้อผิดพลาดได้อย่างแน่นอน หากคุณมีทางออกที่ดีกว่าโปรดทราบ อย่าลืมถ้าคุณพบปัญหาใด ๆ โปรดเขียนถึงฉันและฉันจะพยายามช่วย
แนะนำ:
ปุ่ม Home Automation มูลค่า $5: 4 ขั้นตอน
ปุ่ม Home Automation ราคา $5: ปุ่ม Home Automation ราคา $5 บางครั้งวิธีแก้ปัญหาที่ง่ายที่สุดคือปุ่มเดียว เราต้องการวิธีง่ายๆ ในการเรียกใช้กิจวัตร "เวลาเข้านอน" บนฮับระบบอัตโนมัติภายในบ้านของเรา (Hubitat Elevation) ซึ่งจะปิดไฟส่วนใหญ่ ตั้งค่าอื่นๆ ให้อยู่ในระดับที่เฉพาะเจาะจง และ
ปุ่ม Push to Talk ที่ควบคุมด้วยเท้า: 5 ขั้นตอน
ปุ่ม Push to Talk แบบควบคุมด้วยเท้า: นี่คือวิธีที่ฉันสร้างปุ่ม Push To Talk ที่คุณสามารถใช้กับเท้าของคุณได้
วิธีใช้สเต็ปเปอร์มอเตอร์ 28BYJ-48 พร้อมปุ่มกด 3 ปุ่ม: 5 ขั้นตอน
วิธีใช้สเต็ปเปอร์มอเตอร์ 28BYJ-48 พร้อมปุ่มกด 3 ปุ่ม: คุณต้องการควบคุมสเต็ปเปอร์มอเตอร์โดยใช้ปุ่มกดหรือไม่? ที่สามารถทำตามเข็มนาฬิกา, ทวนเข็มนาฬิกาแล้วหยุดฟังก์ชั่น? วิดีโอนี้เหมาะสำหรับคุณ
ปุ่ม Uber: 7 ขั้นตอน
ปุ่ม Uber: เรียกรถ Uber ได้เพียงแค่กดปุ่ม!บทนำในบทช่วยสอนนี้ เราจะใช้บริการโลคัลไลเซชันเครือข่าย Sigfox (ซึ่งขณะนี้สามารถระบุตำแหน่งในรัศมีสูงสุด 1 กม.) เพื่อให้ได้ตำแหน่งที่ใกล้เคียงที่สุด ตำแหน่งที่กำหนด
ปุ่ม Macbook ทำจากไม้ (พร้อมฟังก์ชั่นแบ็คไลท์): 7 ขั้นตอน
ปุ่ม Macbook ทำจากไม้ (พร้อมฟังก์ชั่นแบ็คไลท์): บทนำ คอมพิวเตอร์ Mac ได้รับการดัดแปลงอย่างหนักในช่วงไม่กี่ปีที่ผ่านมา ซึ่งอาจแตกต่างกันไปตามการเปลี่ยนสี สติ๊กเกอร์ การแกะสลัก และอื่นๆ แป้นไม้บน macbook ทำให้ฉันประทับใจเสมอ คุณสามารถทำได้ทางออนไลน์จากที่ต่างๆ ในราคาประมาณ $70 หรือ