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

GitHub - hocarm/STM32F4-Discovery-Tutorial at stm32cubeide_f4
Các ví dụ lập trình STM32F4 Discovery dùng CubeMX. Contribute to hocarm/STM32F4-Discovery-Tutorial development by creating an account on GitHub.