Mục tiêu
- Học cách cấu hình chân EXTI với CubeMX và CubeIDE
- Sinh code và sử dụng các hàm HAL
Kết quả
- Cấu hình GPIO và EXTI, sau đó generate code
- Tạo các hàm Callback để bật LED
- Kiểm tra lại các chức năng bằng cách nhấn nút để bật LED
Cấu hình EXTI
Tạo project
Tương tự như bài trước GPIO mình sẽ đi nhanh qua phần này
- File > New > STM32 Project
- Cấu hình LED là GPIO_Output
- Cấu hình nút nhấn là GPIO_EXTIX
Cấu hình clock
Chúng ta sẽ set clock với tần số tối đa như ví dụ GPIO
Cấu hình GPIO
- Chọn External Interrupt Mode with Rising edge trigger detection
- GPIO Pull-up/Pull-down: No pull-up or pull-down
- PD14 cấu hình mặc định như bài gpio trước
Cấu hình interrupt
- Chúng ta cần enable interrupt cho EXTI
- Chọn NVIC > NVIC
Sau đó chọn save để generate code
Workflow
Phần này mới mẻ hơn, hình ảnh thay cho ngàn lời nói, mọi người có thể xem hình để biết cách hoạt động của interrupt trong HAL nhé
Code
Mở IDE
- Giờ thì ta có thể mở phần code được sinh ra ở Core > Source > main.c
- Tạo function handle EXTI interrupt vào trong tag /* USER CODE BEGIN 4 /và / USER CODE END 4 */
HAL callback function cho EXTI sẽ có tên
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
Để điều khiển LED ta dùng function
HAL_GPIO_WritePin
/* USER CODE BEGIN PFP */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
/* USER CODE END PFP */
//....
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
if(GPIO_Pin == GPIO_PIN_0) {
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
} else {
__NOP();
}
}
/* USER CODE END 4 */
Chương trình EXTI bạn có thể tham khảo tại