BÀI 06 : TIMER BASE trong STM32F103.


  1. Sơ lược về lý thuyết.
  2. STM32f103C8 có tất cả 7 timer nhưng trong đó đã bao gồm 1 systick timer, 2 watchdog timer. Vậy chỉ còn lại 4 timer dùng cho các chức năng như ngắt, timer base, PWM, Encoder, Input capture…. Trong đó TIM1 là Timer đặc biệt, chuyên dụng cho việc xuất xung với các mode xuất xung, các mode bảo vệ đầy đủ hơn so với các timer khác. TIM1 thuộc khối clock APB2, còn các TIM2,TIM3,TIM4 thuộc nhóm APB1.

    Có 3 vấn đề cần phải tìm hiểu trong bài này đó là :

    • Timer clock.
    • Prescaler
    • Auto Reload Value.

    Khi không có cấu hình gì liên quan đến clock và đã gắn đúng thạch anh ngoài trên chân PD0(5) và PD1(6) thì clock tương ứng của TIM1,TIM2,TIM3,TIM4 đã là 72Mhz. Cần ghi nhớ là sử dụng timer nào thì cấp clock cho timer đó theo đúng nhánh clock.

    Prescaler là bộ chia tần số của timer. Bộ chia này có giá trị tối đa là 16 bit tương ứng với giá trị là 65535. Các giá trị này có thể được thay đổi và điều chỉnh bằng lập trình. Tần số sau bộ chia này sẽ được tính là:

    fCK_CNT = fCK_PSC/(PSC+1).

    • FCK_CNT: tần số sau bộ chia.
    • fCK_PSC: tần số clock đầu vào cấp cho timer.
    • PSC: chính là giá trị truyền vào được lập trình bằng phần mềm

    Auto Reload value là giá trị bộ đếm tối đa có thể được điều chỉnh để nạp vào cho timer. Giá trị bộ đếm này được cài đặt tối đa là 16bit tương ứng với giá trị là 65535.Từ các thông số trên ta rút ra công thức cần tính cuối cùng đó là:

    FTIMER= fSYSTEM/[(PSC+1)(Period+1)]

    • Ftimer : là giá trị cuối cùng của bài toán, đơn vị là hz.
    • F system : tần số clock hệ thống được chia cho timer sử dụng, đơn vị là hz.
    • PSC : giá trị nạp vào cho bộ chia tần số của timer. Tối đa là 65535.
    • Period : giá trị bộ đếm nạp vào cho timer. Tối đa là 65535.

    Ngắt timer: khi giá trị đếm của bộ đếm timer(thanh ghi CNT) vượt qua giá trị của Auto Reload Value thì cờ báo tràn sẽ được kích hoạt. Trình phục vụ ngắt tràn sẽ xảy ra nếu được cấu hình cho phép trước đó.

  3. Cấu hình với thư viện chuẩn của ST.
    1. Chương trình con cấu hình TIM4 và ngắt tràn:
    2. Đầu tiên là khai báo các định nghĩa cũng như cấp clock cho TIM4. 7199 tương ứng với giá trị PSC, 9999 tương ứng với Period. Clock cung cấp cho TIM4 là 72Mhz. Tính theo công thức ta sẽ được thời gian ngắt tràn là 1s. Cấu hình ngắt ở mức ưu tiên cao nhất.

    3. Chương trình con thực thi ngắt trong file stm32f10x_it.c:
    4. Sau khi nhảy vào ngắt, Led ở chân PB9 sẽ được đảo trạng thái. Cờ báo tràn sẽ được xóa để tránh tình trạng đứng trong ngắt và để phục vụ cho lần ngắt tiếp theo.

  4. Một số thanh ghi quan trọng.
    1. TIMx_CNT – counter register.
    2. Thanh ghi này chứa giá trị của bộ đếm timer. Giá trị tối đa là 65535.

    3. TIMx_PSC – Prescaler register.
    4. Thanh ghi này chứa giá trị của bộ chia tần số của timer. Giá trị chia tần số phụ thuộc vào giá trị của thanh ghi.

    5. TIMx_ARR – Auto-reload Register.
    6. Thanh ghi này chứa giá trị đích của bộ đếm. Giá trị này sẽ được so sánh với giá trị của thanh ghi CNT.

    7. TIMx_SR - Status register.
    8. Thanh ghi này chứa các cờ biểu thị các trạng thái của timer.

      • CCxOF: vượt quá giá trị compare/capture.
      • BIF: báo có ngắt đầu vào xảy ra.
      • TIF: báo có ngắt do xung trigger.
      • COMIF: báo có ngắt do tác động của COM.
      • CCxIF: báo có ngắt do compare/capture.
      • UIF: báo có ngắt do có sự cập nhật giá trị của bộ đếm timer.
    9. TIMx_CRx- Control register.
      • CKD[1:0] : bit liên quan đến việc sinh ra thời gian dead-time và bộ lọc số(ở mode ETR,TIx).
      • ARPE: có cho phép tự động load lại khi tràn hay không.
      • CMS[1:0] : bit cài đặt mode center-aligned, tham khảo thêm trong reference manual.
      • DIR : bit điều khiển timer đếm lên hay đếm xuống.
      • OPM: bit sử dụng cho chế độ one-pulse.
      • URS: bit này cho phép cập nhật bộ đếm timer theo chế độ điều khiển bằng tín hiệu bên ngoài hoặc bộ đếm bị tràn.
      • UDIS: bit này cho phép hoặc không cho phép việc cập nhật timer.
      • CEN: bit này cho phép hoặc không cho phép bộ đếm hoạt động.
  5. Bài tập.
    1. Cấu hình ngắt tràn TIM4 với tần số là 1Hz. Led trên chân PB9 sáng tắt với tốc độ là 1s sáng, 1s tắt. Lặp đi lặp lại quá trình này.
    2. Cấu hình ngắt tràn TIM1 với tần số là 2Hz. Led trên chân PB9 sáng tắt với tốc độ là 0.5s sáng, 0.5s tắt. Lặp đi lặp lại quá trình này.
Link tải chương trình ngắt tràn TIM4