Lập trình ngắt ngoài trên STM32F746

0
1088

Khái niệm về ngắt: ngắt là một số loại tín hiệu đến CPU và yêu cầu nó tạm dừng chương trình chính để thực thi một số mã quan trọng ở một số nơi khác, được gọi là Trình xử lý ngắt hoặc Quy trình dịch vụ ngắt (ISR), sau đó tiếp tục chương trình chính từ nơi nó bị tạm dừng. Do đó, nó có thể được sử dụng để xử lý một số sự kiện tại thời điểm bất ngờ mà không đòi hỏi nhiều thời gian thực hiện. Ví dụ: bạn có một mã rất dài và nhiều thời gian trễ trong quy trình chính của mình, nhưng bạn cũng cần chương trình của mình hoạt động nhanh chóng khi có thông tin đầu vào từ người dùng hoặc các thiết bị khác như nút nhấn hoặc cảm biến yêu cầu đọc định kỳ. Vì vậy, trình xử lý ngắt sẽ giúp bạn làm điều đó thay vì đặt rất nhiều cú pháp kiểm tra điều kiện lãng phí bên trong chương trình chính để bắt các sự kiện đầu vào.

Một số thuộc tính để đạt được trình xử lý ngắt đáng tin cậy mà chúng ta cần nhớ:

  • Mã bên trong trình xử lý ngắt phải càng ngắn gọn càng tốt.
  • Không bao giờ sử dụng delay hoặc bất kỳ loại khoảng thời gian nào bên trong trình xử lý ngắt.
  • Các biến được chia sẻ bởi ngắt phải được quản lý cẩn thận.

Yêu cầu phần cứng:

  • Sử dụng KIT Open746I-C

Nội dung Project:

Thực hiện xử lý ngắt ngoài trên nút nhấn WAKE C của kit Open746I-C, khi nhấn nút chương trình phục vụ ngắt sẽ chạy làm LED1 nhấp nháy.

Cấu hình trên STM32CubeMX

Bước 1: Mở STM32CubeMX và tạo dự án mới

Bước 2: Gõ tên tìm kiếm loại MCU cần lập trình và click đúp vào tên của nó

Bước 3: Cấu hình chế độ Debug cho chip là Serial Wire

Bước 4: Trong tab Clock Configuration, cấu hình tần số hoạt động cho chip là 216Mhz (max)

Bước 5: Chọn chân input và cấu hình nó hoạt động ở mode ngắt ngoài GPIO_EXT0

Bước 6: Cấu hình chân PB6 nối với LED1 là GPIO_OUTPUT

Bước 7: Trong tab Project Manager, đặt tên cho Project, chọn đường dẫn lưu thư mục, chọn trình biên dịch là Keilc (MDK-ARM) và chọn phiên bản sử dụng.

Bước 8: Trong mục Code Generator tích chọn Generate peripheral initialization.. Sau đó tiến hành GENERATE CODE.

Dưới đây là nội dung hàm main sau khi GENERATE CODE từ STM32CubeMX, trong hàm while(1) chúng ta sẽ thực hiện delay 1s và không làm gì cả ngoài delay. Khi có sự kiện nhấn nút nhấn, chương trình ngắt sẽ được thực hiện để sáng nhấp nháy led1.

int main(void)

{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration——————————————————–*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */

  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */

  /* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

            HAL_Delay(1000);

  }

  /* USER CODE END 3 */

}

Nội dung chương trình ngắt được viết trong hàm void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)

{

            HAL_GPIO_TogglePin(Led_1_GPIO_Port,Led_1_Pin);

}

Trong cây thư mục Project, click đúp vào file stm32f7xx_it.c, đây là file chứa tất cả các chương trình ngắt của STM, tìm đến hàm xử lý ngắt trên EXTI0 và gọi hàm HAL_GPIO_EXTI_IRQHandler.

void EXTI0_IRQHandler(void)

{

  /* USER CODE BEGIN EXTI0_IRQn 0 */

  /* USER CODE END EXTI0_IRQn 0 */

  HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);

  /* USER CODE BEGIN EXTI0_IRQn 1 */

  /* USER CODE END EXTI0_IRQn 1 */

}

Sau khi hoàn thiện code, nhấn F7 hoặc click vào biểu tượng như hình dưới để biên dịch chương trình

Kết nối các chân trên header JTAG của KIT và mạch nạp ST-link V2 tương ứng như hình dưới

* Các chân nạp code cho STM32 của St-Link:

[1] 3.3V

[2] GND

[3] SWDIO

[4] SWCLK

nối tương ứng các chân này với các chân tương ứng trên KIT STM32F746I

Trước khi nạp chương trình cho KIT qua mạch nạp ST-LINK V2, chúng ta cần cấu hình một số chức năng. Thực hiện các bước như hình dưới để vào giao diện cài đặt mạch nạp.

Sau khi nhấn Setting, cửa sổ cấu hình mạch nạp hiện ra, Trong SW Device, ID CODE hiện ra có nghĩa mạch nạp đã kết nối với KIT thành công, chúng ta cấu hình tốc độ nạp ở mục Max Clock là tần số cao nhất, ở như hình là 4Mhz, Tick vào các mục Verify Code Download để Verify lại chương trình sau khi nạp và Tick vào Download to Flash để nạp chương trình vào bộ nhớ Flash chip.

Trong tab Flash Download tích chọn Reset and Run để chương trình chạy ngay sau khi nạp code xong, sau đó click OK để kết thúc cài đặt.

Click vào biểu tượng LOAD để tiến hành nạp code cho chip.

Chúc các bạn thành công!

Biên dịch: Mai Văn Ba

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

0 0 Phiếu bầu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận