Title Image

Blog Logo

🌱 STM32 - 18. Systick Timer - Overview & Registers

🌱 STM32 - 18. Systick Timer - Overview & Registers

    Các bạn sử dụng thư viện HAL chắc hẳn đã gặp trường hợp dùng hàm HAL_Delay() mà không sử dụng được các ngắt chương trình đúng theo ý mình. Bởi vì hàm HAL_Delay() này được viết sử dụng một ngắt đặc biệt của hệ thống - Systick Timer

    👉 Systick Timer là gì?

    Systick Timer đúng như tên gọi của nó, là một Timer, nhưng không giống như các ngoại vi Timer, Systick Timer là một Timer độc lập nằm trong lõi Cortex.
    Một điểm khác biệt nữa so với Timer Peripheral, Systick Timer là một Timer 24-bit, đếm ngược, xảy ra ngắt khi giá trị đếm bằng 0, và tự nạp lại giá trị đếm ban đầu. 

    Ứng dụng của Systick Timer điển hình nhất chính là tạo hàm delay, cụ thể là HAL_Delay() một cách chính xác hơn so với mấy vòng lặp for, while. Một ứng dụng khác có thể kể đến là tạo Time-Slice trong các ứng dụng RTOS.

    👉 Hoạt động của Systick Timer

    Không khác là mấy so với một Timer thông thường, Systick cũng bao gồm:

  • Một Bộ đếm Counter để đếm xuống.
  • Một thanh ghi chứa giá trị nạp lại.
  • Một cờ báo tràn Timer.
  • Một bộ phận để cấu hình xung clock đầu vào. 

    Cụ thể cấu tạo của Systick có trong sơ đồ dưới đây.

Systick Timer
Systick Timer Block Diagram

    👉 Các thanh ghi Systick

    Cortex M cung cấp một số thanh ghi sau để cấu hình và điều khiển Systick Timer.

    💬 Thanh ghi SYST_CSR - Systick Control & Status Register

SYST_CSR

    Chính là thanh ghi mà chúng ta thấy trong hình khối ở trên, thanh ghi này dùng để cấu hình điều khiển và trạng thái của Systick Timer. 

  • Bit[16] - COUNTFLAG: Cờ này được tự động set lên 1 khi bộ đếm tràn (đếm về 0).
  • Bit[2] - CLKSOURCE: Chọn nguồn cấp xung clock cho timer. 
    0 = External Clock = AHB / 8.
    1 = Processor Clock = AHB.
  • Bit[1] - TICKINT: Cho phép ngắt Systick nếu bit này bằng 1.
  • Bit[0] - ENABLE: Cho phép bộ đếm hoạt động.
    0 = DISABLE.
    1 = ENABLE.
    Khi được ENABLE, bộ đệm sẽ lấy giá trị đã cài đặt sẵn trong thanh ghi Reload và bắt đầu đếm ngược.

    💬 Thanh ghi SYST_RVR - Systick Reload Value Register 

    Thanh ghi này chưa giá trị nạp lại để bắt đầu đếm, nó chỉ sử dụng 24 bit thấp, với rải giá trị từ 0x0000.0001 - 0x00FF.FFFF.

    💬 Thanh ghi SYST_CVR - Systick Current Value Register 

    Tương tự Timer Peripheral, Systick Timer cũng có một thanh ghi đếm, thanh ghi này sẽ bắt đầu với giá trị lấy từ thanh ghi SYST_RVR, và đếm ngược về 0. Tương tự như RVR, thanh ghi SYST_CVR chỉ sử dụng 24 bit thấp.

    💬 Thanh ghi SYST_CALIB - Systick Calibration Value Register

    Giống như Calib trong cơ khí, thanh ghi CALIB này dùng để hiệu chuẩn cho Systick, tuy nhiên là chúng ta sẽ ít dùng tới nó do đặc trưng các ứng dụng dùng Systick không cần độ chính xác quá lớn. 

    Cách làm việc với Systick + Example mình sẽ nói đến ở post sau!

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                                        

Đăng nhận xét

4 Nhận xét

  1. Nhận xét này đã bị tác giả xóa.

    Trả lờiXóa
    Trả lời
    1. RCC anh có viết 2 bài rồi nhé, bài 2 và 3 đó:
      https://laptrinhcnhung.blogspot.com/2021/09/STM2.html
      https://laptrinhcnhung.blogspot.com/2021/09/STM3.html

      Xóa
  2. Bài viết của a rất hay ạ. Cảm ơn a rất nhiều!!!

    Trả lờiXóa
    Trả lời
    1. Thank e đã ủng hộ, nếu thấy hay cho a xin 1 lượt share cho nhiều người biết đến nha 😁

      Xóa