[Tự Học STM8] Bài 3 - Thiết lập tốc độ xung cho STM8

maingochoc

Học sinh phổ thông
#1
Trong STM8 có nhiều thanh ghi liên quan tới CLOCK nhưng chúng ta chỉ cần quan tâm tới thanh ghi CLK_CKDIVR


Trong này có 2 phần cần chú ý là HSIDIVCPUDIV
HSIDIV là chọ hệ số chia cho Fmaster từ HSI ( Hight Speed Internal - Là tần số dao động cao bên trong chip - dao động nội 16MHz )
Trong STM8 nó có 2 bộ dao động nội là HSILSI ( LSI nó chỉ nó 128KHz )
HSIDIV là chọ hệ số chia tần cho Fmaster với nguồn tần số lấy từ HSI
Fmater nó là tần số dao động chủ. Từ Fmaster nó sẽ đi vào CPU và ra các ngoại vi khác củaSTM8 như TIMER, UART, SPI, I2C ...
CPUDIV là chọn hệ số chia tần cho FCPU với tần số nguồn vào lấy từ Fmaster


Như đã thấy FCPU = Fmaster / CPUDIV.
Giá trị của CLK_CKDIVR khi mới cấp nguồn là 0x18, có nghĩa là
HSIDIV đang nhận giá trị là 11 ( nhị phân ) => hệ số chia là 8.
Còn CPUDIV000 (nhị phân) => Hệ số chia là 1.
Khi đó Fmaster = 16MHz / 8 = 2MHz
Còn FCPU = Fmaster / 1 = 2MHz.
Hay khi mới cấp nguồn chíp chạy ở tần số 2MHz.
Vậy để chíp chạy Max tốc độ thì chỉ cần cho 2 cái hệ số chia này là nhỏ nhất =>CLK_CKDIVR = 0x00.
Áp dụng vào Code của Bài 2, các bạn thử thay CLK_CKDIVR = 0x18CLK_CKDIVR = 0x00 xem khác nhau như nào
* Lưu ý : Lệnh thiết lập tốc độ xung nhịp nên để ngay sau hàm main() như sau
PHP:
void main(){
  CLK_CKDIVR = 0x00; // Tốc độ tối đa 16Mhz
  ......
  ......
  while(1){
   ..........
  }
}
Cập nhật thiết lập Clock sử dụng thạch anh ngoài - by Thanh Tùng
PHP:
void clock_config(){
  CLK_CKDIVR = 0x00;
  CLK_ECKR = 0x01;              // Enable HSE
  while(!(CLK_ECKR & 0x01));    // Wait HSE Ready
  CLK_SWCR_SWEN = 1;
  CLK_SWR = 0xB4;
  while(CLK_CMSR != 0xB4);
  while(!CLK_SWCR_SWIF);
  CLK_SWCR_SWIF = 0;
}
 

Quảng cáo Google