Title Image

Blog Logo

🌱 STM32 - 2. Clock Tree và module RCC

🌱 STM32 - 2. Clock Tree và module RCC

    Khác với nhiều dòng vi điều khiển 8-bit cũ, nhiều dòng vi điều khiển hiện đại cần phải config clock trước khi sử dụng các ngoại vi. Mặc định, tất cả clock của các thiết bị ngoại vi sẽ bị vô hiệu hóa để tiết kiệm năng lượng.

    Đối với VĐK STM32, clock được cấu hình qua thanh ghi của module RCC. Bài viết này sẽ giới thiệu về các nguồn cấp xung nhịp của Vi điều khiển STM32F401 và khối điều khiển Clock RCC.

    👉 Các nguồn cấp xung nhịp

    Để biết được các nguồn cấp xung nhịp cho từng ngoại vi của Vi điều khiển, cần tham khảo Clock Tree trong tài liệu RM - Reference Manual (Chương 6 - Trang 94).

Clock

    Vi điều khiển STM32F401 có ba nguồn cấp xung clock chính đó là:

  • Nguồn Clock dao động nội tốc độ cao (HSI – High Speed Internal): lấy từ bộ dao động RC nội, mặc định là 16MHz.
  • Nguồn Clock dao động ngoại tốc độ cao (HSE – High Speed External): lấy từ nguồn dao động thạch anh.
  • Nguồn Clock PLL (PLL – Phase Lock Loop).

   Các ngoại vi được cấp xung clock thông qua ba đường bus sau:

  • AHB (Advanced High Speed Buses ): Đây là Bus kết nối hệ thống.
  • APB1, APB2 (Advanced Peripheral Buses 1,2): Đây là các Bus kết nối với thiết bị ngoại vi và kết nối với hệ thống thông qua AHB.

    👉 Một số thanh ghi cấu hình Clock

    💬 RCC clock control register (RCC_CR)


    Một số bit quan trọng:

  • Bit[0] - HSION: Internal high-speed clock enable
    0: HSI oscillator OFF
    1: HSI oscillator ON

  • Bit[16] - HSEONHSE clock enable
    0: HSE oscillator OFF
    1: HSE oscillator ON

  • Bit[24] - PLLONMain PLL (PLL) enable
    0: PLL OFF
    1: PLL ON

    💬 RCC PLL configuration register (RCC_PLLCFGR)


    Thanh ghi này dùng để cấu hình PLL, tức là nếu bit[24] của thanh ghi RCC_CR = 1, thì PLL sẽ được sử dụng để cấu hình Clock cho hệ thống qua các bộ nhân/chia, với công thức như hình trên. Chi tiết các bit quy định mức độ nhân/chia M, N, P được quy định rất rõ bằng các bit của thanh ghi này trong RM mục 6.3.2.

    💬 RCC AHB1 peripheral clock enable register (RCC_AHB1ENR)


    Dùng để cho phép cấp Clock cho các ngoại vi được kết nối với bus AHB1 như GPIOA/B/C/D/E/H, CRC, DMA1, DMA2. 
    0: Clock disabled
    1: Clock enabled

    💬 RCC AHB1 peripheral reset register (RCC_AHB1RSTR)


    Ngược lại với thanh ghi RCC_AHB1ENR, thanh ghi RCC_AHB1RSTR dùng để Reset Clock cấp cho các ngoại vi tương ứng. 
    0: does not reset 
    1: resets

    💬 RCC_AHB2ENR, RCC_APB1ENR, RCC_APB2ENR >< RCC_AHB2RSTR, RCC_APB1RSTR, RCC_APB2RSTR

    Tương ứng là các thanh ghi để cấu hình cấp clock cho các ngoại vi tương ứng trên từng bus.

>>>= 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

0 Nhận xét