🌱 STM32 - 2. Clock Tree và module RCC trên vi điều khiển STM32F4

🌱 STM32 - 2. Clock Tree và module RCC trên vi điều khiển STM32F4

    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 thêm: Vai Trò và Ứng Dụng của Clock trong Vi Điều Khiển

    👉 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_CFGR - Cấu hình phân chia tần số

  • Chức năng: Quy định tần số của các bus HCLK (AHB), PCLK1 (APB1), và PCLK2 (APB2), từ đó ảnh hưởng đến clock của các ngoại vi.
  • Các bit quan trọng:
    • HPRE (bit 4-7): Bộ chia tần số cho AHB (HCLK) từ SYSCLK.
      • Ví dụ: 0000 = không chia, 1000 = chia 2, 1111 = chia 512.
      • HCLK tối đa trong STM32F401 là 84 MHz.
    • PPRE1 (bit 10-12): Bộ chia tần số cho APB1 (PCLK1).
      • Ví dụ: 000 = không chia, 100 = chia 2, 111 = chia 16.
      • PCLK1 tối đa là 42 MHz.
    • PPRE2 (bit 13-15): Bộ chia tần số cho APB2 (PCLK2).
      • Ví dụ: 000 = không chia, 100 = chia 2, 111 = chia 16.
      • PCLK2 tối đa là 84 MHz.
  • Cách hoạt động: Tần số SYSCLK (thường từ PLL) được chia qua các bộ chia này để tạo ra tần số cho các bus, và các ngoại vi trên bus đó sẽ nhận clock từ PCLK1, PCLK2, hoặc HCLK.

    💬 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 Reference Manual mục 6.3.2.

  • PLLM (bit 0-5): Bộ chia đầu vào cho PLL (từ HSE/HSI). Giá trị: 2 đến 63.
  • PLLN (bit 6-14): Hệ số nhân của PLL.
    • Giá trị: 50 đến 432.
  • PLLP (bit 16-17): Bộ chia đầu ra của PLL cho SYSCLK.
    • 00 = chia 2, 01 = chia 4, 10 = chia 6, 11 = chia 8.
  • PLLQ (bit 24-27): Bộ chia cho các ngoại vi như USB OTG FS.

    Công thức:

F_VCO = (F_in / PLLM) * PLLN
SYSCLK = F_VCO / PLLP
  • F_in: Tần số nguồn (HSE = 8 MHz hoặc HSI = 16 MHz).
  • SYSCLK tối đa trong STM32F401 là 84 MHz.

    💬 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. Các thanh ghi này kiểm soát việc cung cấp clock cho các ngoại vi trên các bus AHB2, APB1, và APB2. Khi một bit trong thanh ghi được đặt thành 1, clock sẽ được bật cho ngoại vi tương ứng; nếu là 0, clock sẽ bị tắt.

🔻RCC_AHB2ENR (AHB2 Peripheral Clock Enable Register)

  • Chức năng: Kích hoạt clock cho các ngoại vi trên bus AHB2.
  • Vị trí: Địa chỉ offset 0x34 trong khối RCC.
  • Đặc điểm:
    • Bus AHB2 thường dành cho các ngoại vi tốc độ cao hoặc liên quan đến dữ liệu lớn.
    • Ví dụ các bit trong STM32F401:
      • Bit 7: OTGFSEN - Kích hoạt clock cho USB OTG Full-Speed.
      • Các bit khác thường không được sử dụng trong STM32F401 (ít ngoại vi trên AHB2 so với dòng cao cấp hơn như STM32F4x7).
    • Sau khi reset, tất cả các bit mặc định là 0 (clock tắt).

🔻RCC_APB1ENR (APB1 Peripheral Clock Enable Register)

  • Chức năng: Kích hoạt clock cho các ngoại vi trên bus APB1 (tốc độ thấp hơn AHB).
  • Vị trí: Offset 0x40.
  • Đặc điểm:
    • Bus APB1 thường dành cho các ngoại vi giao tiếp như I2C, SPI, UART, hoặc Timer.
    • Ví dụ các bit trong STM32F401:
      • Bit 0: TIM2EN - Clock cho Timer 2.
      • Bit 11: SPI2EN - Clock cho SPI2.
      • Bit 17: USART2EN - Clock cho USART2.
      • Bit 28: I2C1EN - Clock cho I2C1.
    • Tần số tối đa của APB1 trong STM32F401 là 42 MHz (tùy cấu hình HCLK).

🔻RCC_APB2ENR (APB2 Peripheral Clock Enable Register)

  • Chức năng: Kích hoạt clock cho các ngoại vi trên bus APB2 (tốc độ cao hơn APB1).
  • Vị trí: Offset 0x44.
  • Đặc điểm:
    • Bus APB2 thường dành cho ADC, USART1, SPI1, hoặc Timer tốc độ cao.
    • Ví dụ các bit trong STM32F401:
      • Bit 0: TIM1EN - Clock cho Timer 1.
      • Bit 8: USART1EN - Clock cho USART1.
      • Bit 12: ADC1EN - Clock cho ADC1.
      • Bit 14: SPI1EN - Clock cho SPI1.
    • Tần số tối đa của APB2 trong STM32F401 là 84 MHz.

    Các thanh ghi reset (RSTR) dùng để reset phần cứng của các ngoại vi trên các bus tương ứng. Khi đặt bit thành 1, ngoại vi sẽ bị reset; khi trả về 0, trạng thái reset được gỡ bỏ.

🔻RCC_AHB2RSTR (AHB2 Peripheral Reset Register)

  • Chức năng: Reset các ngoại vi trên bus AHB2.
  • Vị trí: Offset 0x14.
  • Đặc điểm:
    • Bit 7: OTGFSRST - Reset USB OTG Full-Speed.
    • Reset không ảnh hưởng đến thanh ghi cấu hình RCC, chỉ đặt lại trạng thái nội bộ của ngoại vi.

🔻RCC_APB1RSTR (APB1 Peripheral Reset Register)

  • Chức năng: Reset các ngoại vi trên bus APB1.
  • Vị trí: Offset 0x20.
  • Đặc điểm:
    • Bit 0: TIM2RST - Reset Timer 2.
    • Bit 11: SPI2RST - Reset SPI2.
    • Bit 17: USART2RST - Reset USART2.
    • Bit 28: I2C1RST - Reset I2C1.

🔻RCC_APB2RSTR (APB2 Peripheral Reset Register)

  • Chức năng: Reset các ngoại vi trên bus APB2.
  • Vị trí: Offset 0x24.
  • Đặc điểm:
    • Bit 0: TIM1RST - Reset Timer 1.
    • Bit 8: USART1RST - Reset USART1.
    • Bit 12: ADC1RST - Reset ADC1.
    • Bit 14: SPI1RST - Reset SPI1.

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

Mới hơn Cũ hơn
//