BÀI 03 : CLOCK HỆ THỐNG VỚI STM32F1.


  1. Sơ lược về lý thuyết.
  2. Clock là một phần quan trọng của vi điều khiển. Bất kì 1 ngoại vi nào cũng cần clock để hoạt động. Trước khi tìm hiểu về một loại vi điều khiển nào đó chúng ta cần tìm hiểu trước tiên về một số đặc điểm chung về cấu hình của nó, điều đó là khá quan trọng. VĐK đó bao nhiêu bit?? bộ nhớ ra sao?? Ngoại vi như thế nào?? Phần mềm lập trình cũng như mạch nạp có thông dụng, dễ sử dụng, giá cả ra sao…... Một phần quan trọng nữa đó clock của hệ thống, clock hệ thống quan trọng cũng như nguồn nuôi của mạch điện, không có clock hệ thống vi xử lí sẽ không hoạt động được. Clock hệ thống quyết định tốc độ xử lí của vi điều khiển. Vi điều khiển có clock hệ thống càng lớn(tính theo Hz) thì tốc độ xử càng nhanh. Ví dụ: Khi các bạn thay đổi clock thì tốc độ delay của hàm delay tương đối sẽ thay đổi theo. Clock tối đa của STM32F103C8 là 72Mhz.

    Khi có thạch anh ngoài thì tốc độ tối đa sẽ là 72Mhz(thường thạch anh có giá trị 8Mhz) và đó cũng chính là tốc độ mặc định khi chưa cấu hình gì. Khi không có thạch anh ngoài thì tốc độ tối đa sẽ là 64Mhz nếu được cấu hình và tốc độ mặc định sẽ là 8Mhz nếu không cấu hình gì

    Hình trên là toàn bộ hệ thống clock của STM32 và clock tối đa của chúng. Bao gồm các phần như sau:

    • Thạch anh ngoại 32.768Khz được dùng cho bộ RTC.
    • Thạch anh ngoại 8Mhz được đưa vào bộ PLL để chia lock cho các ngoại vi.
    • MCO là clock output được xuất ra dùng để điều khiển các ngoại vi khác. VD: dùng MCO của STlink để điều khiển STM32 mà không cần sử dụng thạch anh.
    • Bên phải là toàn bộ các nhánh clock cung cấp tối đa cho các ngoại vi.

    Các nguồn clock bao gồm:

    • Nguồn clock ngoài bên ngoài chip:
      • HSE: là nguồn clock chính để nuôi MCU và các ngoại vi. Thường sử dụng thạch anh 8Mhz.
      • LSE : là nguồn clock cung cấp cho bộ RTC hoạt động và sử dụng cho backup domain khi nguồn VDD bị mất. Thường sử dụng thạch anh 32.768Khz.
    • Nguồn clock ngoài bên ngoài chip:
      • LSI RC: sử dụng các mạch dạo động RC để tạo nguồn clock phụ nhằm để bộ RTC hoạt động.
      • HSI RC: sử dụng các mạch dao động RC để tạo nguồn clock cung cấp cho MCU và các ngoại vi khi không có thạch anh hay clock bên ngoài.

    Chúng ta nên sử dụng các thạch anh hay nguồn clock bên ngoài để tạo được clock hệ thống tối đa cũng như để mạch hoạt động ổn định hơn.

  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 HSE với tham số truyền vào là clock mong muốn.
    2. Chương trình con cấu hình HSI với tham số truyền vào là clock mong muốn.
    3. Chương trình thực thi trong hàm main.
    4. Gọi hàm cấu hình HSI cũng tương tự với HSE. Các loại clock đã được define ở đầu chương trình, có thể thay thế ở trong dòng lệnh Clock_HSE_Configuration(clock_72Mhz);. Thay đổi clock hệ thống có nghĩa là tốc độ xử lí của vi điều khiển sẽ thay đổi - > hàm Delay sẽ thay đổi thời gian - > led sẽ có chu kì sáng tắt thay đổi.

      Để quan sát rõ hơn chúng ta có thể dùng công cụ debug của Keil C để quan sát giá trị biến clock_source. Giá trị biến clock_source chính là clock tổng của hệ thống.

  4. Một số thanh ghi quan trọng.
    1. RCC_CR – Clock control register.
      • PLLx: bộ nhân tần số clock, PLLxDRY cờ báo trạng thái khóa(=1) hay không khóa(=0) bộ nhân tần sô đó, PLLxON là bit cho phép(=1) hoặc không cho phép(=0) bộ nhân đó hoạt động.
      • CSSON : bit cho phép kiểm tra clock hệ thống có sử dụng HSE hay không.HSEBYP/HSERDY : cho phép sử dụng HSE với bypass clock source hoặc crystal/ceramic resonator.
      • HSEON: bit cho bật HSE hay không.
      • HSIRDY: cờ báo bộ HSI đã sẵn sang hay chưa.
      • HSION : bit cho phép bộ HSI hoạt động hay không.
    2. RCC_CFGR – clock configuration register.
      • MCO[3:0]: chọn nguồn clock output ra trên chân PA8 là nguồn nào như SYSCLK, HSI,HSE... tham khảo thêm trong reference manual.
      • OTGFSPRE: bộ chia clock sử dụng cho giao tiếp USB.
      • PLLMUL[3:0] : bộ nhân clock sau khi chọn lựa clock là HSE hay HSI.
      • PLLXTPRE : bit này điều khiển thanh ghi RCC_CFGR2.
      • PLLSRC: bit chia đầu vào của bộ PLL.
      • ADCPRE[1:0]: bit chia clock cho bộ ADC.
      • PPRE2[2:0]: bit chia clock cho bộ APB2.
      • PPRE1[2:0] : bit chia clock cho bộ APB1.
      • HPRE[3:0] : bit chia clock cho bộ APB(bao gồm APB1 và APB2).
      • SWS[1:0] : cờ báo trạng thái sử dụng clock hệ thống từ nguồn nào HSI, HSE, PLL.
      • SW[1:0] : bit báo chuyển trạng thái sử dụng clock hệ thống nào.
    3. RCC_CSR - Control/status register.
      • LPWRRSTF : cờ báo reset do VDD nhỏ hơn giới hạn dưới.
      • WWDGRSTF : cờ báo reset do bộ window watchdog.
      • IWDGRSTF : cờ báo reset do bộ Independent watchdog.
      • SFTRSTF :cờ báo reset do phần mềm.
      • PORRSTF: cờ báo reset khi khởi động.
      • PINRSTF: cờ báo reset do tác động trên chân reset.
      • RMVF: cờ báo reset do tác động bằng phần mềm.
      • LSIDRY : cờ báo bộ LSI nội đã được kích hoạt.
      • LSION: cờ cho phép bộ LSI hoạt động.
  5. Bài tập.
    1. Cấu hình sử dụng HSE với clock hệ thống(SYSCLK) với tốc độ 48Mhz.
    2. Cấu hình sử dụng HIS với clock hệ thống(SYSCLK) với tốc độ 48Mhz.

Link tải chương trình sử dụng HSE Link tải chương trình sử dụng HSI