BÀI 04 : SYSTEM TICK TIMER VỚI STM32F1.


  1. Sơ lược về lý thuyết.
  2. System Tick Timer là bộ timer 24 bit độc lập nằm trong lõi cortex. Bộ timer này là timer đếm xuống, xảy ra ngắt ở mức ưu tiên cao khi giá trị đếm bằng 0 và tự nạp lại giá trị đếm ban đầu.

    System Tick Timer thường được được dùng để tạo hàm delay với độ chính xác cao, thay thế cho các hàm delay với độ chính xác tương đối dùng vòng lặp for hay while.

  3. Cấu hình với thư viện chuẩn của ST.
  4. Ta sử dụng hàm có sẵn là SysTick_Config(SystemCoreClock/F); để cấu hình thời gian xảy ra ngắt System Tick. Ví dụ SystemCoreClock = 72M và F =1000. Thì giá trị nạp vào bộ System Tick là 72000-1, kết quả sau 1ms bộ đếm System Tick sẽ = 0 một lần -> xảy ra ngắt 1 lần và tên vector ngắt sẽ là SysTick_Handler nằm trong file stm32f10x_it.c.

    1. Lợi dụng System Tick ta sẽ tạo 1 hàm delay tuyệt đối 1 ms như sau:
    2. Chương trình thực thi trong ngắt:
    3. SysTick_Handler là chương trình phục phụ ngắt khi giá trị của bộ đếm (thanh ghi STK_VAL) bằng 0 và được nhận biết bằng cờ COUNT FLAG.

      CHÚ Ý: có nhiều kiểu khai báo biến Timingdelay. Khi sử dụng biến này ở nhiều file .c khác nhau thì cần khai báo “extern” trên mỗi file có sử dụng biến Timingdelay đó.

  5. Một số thanh ghi quan trọng.
    1. STK_CTRL - SysTick control and status register.
      • COUNTFLAG : bằng 1 ở lần đầu tiên giá trị đếm = 0 và giữ nguyên trạng thái cho các lần tiếp theo.
      • CLKSOURCE: chọn lựa nguồn clock source là AHB/8 hoặc AHB.
      • TICKINT : có kiểm tra ngắt khi bộ đếm bằng 0 hay không.
      • ENABLE: cho phép bộ đếm bắt đầu đếm hay không.
    2. STK_LOAD – SysTick reload value register.
    3. RELOAD: đây là giá trị đếm được truyền vào khi bộ đếm bắt đầu và khi bộ đếm bắt đầu lại khi tràn về 0. Giá trị thực của bộ đếm = giá trị truyền vào + 1. Giá trị tối đa của thanh ghi này = 2^24.

    4. STK_VAL - SysTick current value register.
    5. CURRENT[23:0] : thanh ghi này chứa giá trị đếm hiện tại của bộ đếm.

  6. Bài tập.
    1. Viết hàm Delay ms dùng system Tick timer có sử dụng ngắt.
    2. Viết hàm Delay ms dùng system Tick timer có sử dụng ngắt.
Chương trình system tick có dùng ngắt
Chương trình system tick không dùng ngắt