Mục lục:
- Bước 1: Yêu cầu phần cứng và phần mềm
- Bước 2: Tìm hiểu vấn đề
- Bước 3: Cấu hình STM32CubeMX
- Bước 4: Phát triển phần mềm Keil
- Bước 5: Kết luận
Video: Nút STM32CubeMX Debounce With Interrupt: 5 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:33
Xin chào, trong hướng dẫn này, tôi sẽ cố gắng đưa ra giải pháp đơn giản của mình để ngăn chặn việc trả lại nút, một vấn đề rất nghiêm trọng. Trên internet có rất nhiều video để cung cấp giải pháp cho vấn đề này, nhưng không phải trong số đó cho gián đoạn bên ngoài. Trong tất cả các video này, nút bấm được kiểm tra bằng phương pháp thăm dò không hiệu quả. Vì vậy, chúng ta hãy bắt đầu!
Bước 1: Yêu cầu phần cứng và phần mềm
Yêu cầu phần cứng:
- Bảng phát triển ARM STM32
- Một máy tính
Yêu cầu phần mềm:
- STM32CubeMX
- Keil uVision5
Bước 2: Tìm hiểu vấn đề
Vì vậy, chúng tôi cố gắng tìm giải pháp cho vấn đề nảy nút. Vì vậy, chúng ta phải hiểu rõ vấn đề. Vì vậy, khi chúng ta nhấn một nút, nó sẽ đến một trạng thái trái ngược với trạng thái trước đó của nó. Ví dụ, nếu nó CAO thì nó phải THẤP và nếu nó THẤP thì nó phải CAO. Tuy nhiên, đây là trạng thái lý tưởng (trong PROTEUS:)) Trong thực tế, khi chúng ta nhấn một nút, nó bắt đầu bật lên giữa CAO và THẤP trước khi chuyển sang trạng thái nhàn rỗi. Vì vậy, hãy giả vờ rằng nó đã được nhấn nhiều lần gây ra vấn đề. Vì vậy, những gì chúng ta nên làm gì?
Ở đây tôi muốn lưu ý rằng trong ví dụ này, chúng ta sẽ sử dụng ngắt ngoài để phát hiện thao tác nhấn nút. Vì vậy, sau khi chúng tôi phát hiện nút nhấn, chúng tôi cần đợi một chút thời gian, chẳng hạn như 50mS để đạt trạng thái không tải và kiểm tra lại xem nút có ở trạng thái không hoạt động hay không. Nếu nó ở trạng thái nhàn rỗi thì chúng ta có thể tiếp tục nhiệm vụ của mình. Vì vậy, chúng ta hãy xem mã:)
Bước 3: Cấu hình STM32CubeMX
Vì vậy, trước tiên chúng ta cần kích hoạt ngắt bên ngoài cho nút nhấn của chúng ta (tôi giả sử ở đây rằng bạn sử dụng bảng khám phá STM32F407VG):
- Trong tab "Sơ đồ và cấu hình", nhấp vào chân PA0 được kết nối với nút nhấn và chọn GPIO_EXTI0 cho phép ngắt bên ngoài trên chân đó.
- Thay đổi "nhãn người dùng" của ghim thành "Push_Button" hoặc bất kỳ thứ gì bạn muốn.
Sau đó, chúng ta cần định cấu hình bộ đếm thời gian để tạo độ trễ thời gian 50mS:
- Vào phần "Bộ hẹn giờ"
- Nhấp vào TIM1
- Chọn "Đồng hồ nội bộ" làm nguồn Đồng hồ
-
Về cấu hình (Nếu bạn muốn hiểu phần này, vui lòng tham khảo hướng dẫn này, "Điều khiển động cơ Servo với STM32F4 ARM MCU"):
- Đặt prescaler là 32000
- Và truy cập khoảng thời gian đến 50
- Trong tab "Cài đặt NVIC" cho phép tất cả các ngắt
Bật đèn LED làm đầu ra:
Nhấp vào PD12 và đặt là "GPIO_Output"
Sau đó, cấu hình đồng hồ như trong hình trên và tạo mã.
Bước 4: Phát triển phần mềm Keil
Đầu tiên, chúng tôi xác định biến trạng thái sẽ đảm bảo rằng chúng tôi không khởi động bộ đếm thời gian bên trong ngắt bên ngoài khi xảy ra hiện tượng thoát:
/ * MÃ NGƯỜI DÙNG BẮT ĐẦU PFP * / trạng thái bool = true; / * MÃ NGƯỜI DÙNG KẾT THÚC PFP * /
Sau đó, chúng tôi viết ISR cho ngắt bên ngoài:
void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) {if (GPIO_Pin == Push_Button_Pin && state == true) {HAL_TIM_Base_Start_IT (& htim1); trạng thái = sai; } else {_NOP (); }}
Khi nhấn nút, chúng tôi kiểm tra xem đó có phải là nút nhấn đã xác định của chúng tôi hay không và trạng thái có đúng không. Ở đầu trạng thái sẽ là true để nhập câu lệnh if. Sau khi nhập, chúng tôi bắt đầu bộ đếm thời gian và đặt trạng thái sai để đảm bảo rằng việc trả lại sẽ không khởi động lại bộ đếm thời gian.
Sau đó, chúng tôi viết ISR cho ngắt bộ định thời:
void HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef * htim) {/ * Ngăn cảnh báo biên dịch (các) đối số không sử dụng * / UNUSED (htim);
/ * LƯU Ý: Không nên sửa đổi chức năng này, khi cần gọi lại, HAL_TIM_PeriodElapsedCallback có thể được triển khai trong tệp người dùng * / if (HAL_GPIO_ReadPin (Push_Button_GPIO_Port, Push_Button_Pin) == GPIO_PIN_RESET) {HAL_GPIO_TogglePin (GPIOD, GPIO_PIN_12); trạng thái = true; HAL_TIM_Base_Stop_IT (& htim1); }}
/ * MÃ NGƯỜI DÙNG KẾT THÚC 4 * /
Sau 50mS, chúng tôi kiểm tra xem nút có ở trạng thái đặt lại hay được thả ra hay không, nếu có thì chúng tôi biết nút đó đang ở trạng thái không hoạt động. Sau đó, chúng tôi chuyển đổi đèn led, đặt trạng thái true để có thể phát hiện một nút bấm và dừng hẹn giờ khác để có thể bắt đầu lại.
Vì vậy, quá trình này sẽ đảm bảo rằng chúng tôi ngăn chặn sự cố bị trả lại.
Bước 5: Kết luận
Đây là mã cho lỗi nút. Tôi muốn lưu ý rằng mã này do tôi phát triển và tôi không phải là một lập trình viên chuyên nghiệp. Vì vậy, chắc chắn có thể có sai sót. Nếu bạn có giải pháp tốt hơn, xin vui lòng lưu ý nó. Đừng quên, nếu bạn gặp bất kỳ vấn đề nào, hãy viết thư cho tôi và tôi sẽ cố gắng giúp đỡ.
Đề xuất:
Nút tắt tiếng của Microsoft Teams: 4 bước
Nút tắt tiếng của Microsoft Teams: Tạo một nút bấm dễ tiếp cận để tự tắt tiếng / bật tiếng trong khi thực hiện cuộc gọi Microsoft Teams! Bởi vì năm 2020. Dự án này sử dụng Adafruit Circuit Playground Express (CPX) và một nút nhấn lớn để tạo nút tắt tiếng cho Microsoft Teams thông qua phím nóng
Cách sử dụng động cơ bước 28BYJ-48 với 3 nút đẩy: 5 bước
Cách sử dụng động cơ bước 28BYJ-48 với 3 nút ấn: Bạn có muốn điều khiển động cơ bước của mình bằng các nút ấn không? Điều đó có thể làm theo chiều kim đồng hồ, ngược chiều kim đồng hồ và sau đó dừng chức năng? Sau đó, video này là dành cho bạn
Arduino Simple Debounce: 4 bước
Arduino Simple Debounce: Hướng dẫn này hướng dẫn cách thực hiện debounce dễ dàng với 2 nút nhấn. Tất cả những gì bạn cần là kiến thức cơ bản về điện tử và lập trình arduino. tôi trên mail của tôi: iwx
Bộ điều khiển bước được kích hoạt bằng nút: 4 bước
Bộ điều khiển bước được kích hoạt bằng nút:
Bộ vi điều khiển AVR. Chuyển đổi đèn LED bằng Công tắc nút nhấn. Nút nhấn Debouncing: 4 bước
Bộ vi điều khiển AVR. Chuyển đổi đèn LED bằng Công tắc nút nhấn. Nhấn nút Debouncing: Trong phần này, chúng ta sẽ tìm hiểu Cách tạo mã chương trình C cho ATMega328PU để chuyển đổi trạng thái của ba đèn LED theo đầu vào từ một công tắc nút. Ngoài ra, chúng tôi đã khám phá một giải pháp cho vấn đề là ‘Chuyển đổi số lần trả lại‘. Như thường lệ, chúng tôi sẽ