stm8 時鐘切換;spa
1 /************************************ 時鐘設置 ************************************/ 2 // 時鐘 0:內部高速 1:內部低速 2:外部 3:保留 3 void set_System_clock(char clock_mode){ 4 // set CPUDIV 5 CLK_CKDIVR &= 0xf8;CLK_CKDIVR |= 0x00; // 設置 CPUDIV 不分頻 6 switch(clock_mode){ 7 case 0:{ // set HSI 8 CLK_CKDIVR &= 0xe7;CLK_CKDIVR |= 0x00; // 設置 HSIDIV 不分頻 9 }break; 10 case 1:{ // set LSI 11 CLK_ICKR |= MASK_CLK_ICKR_LSIEN; /* 打開內部低速時鐘源 */ 12 while(CLK_ICKR_LSIRDY == 0); /* 等待時鐘源信號穩定,穩定後CLK_ICKR_LSIRDY置位 */ 13 CLK_SWCR = MASK_CLK_SWCR_SWEN; /* 轉換使能,採用自動轉換方式 */ 14 CLK_SWR = 0xD2; /* 選擇內部低速時鐘源 */ 15 while(!(CLK_SWCR & 0x08)); /* 切換完成後,SWIF置位 */ 16 }break; 17 case 2:{ // set HSE 18 CLK_ECKR |= MASK_CLK_ECKR_HSEEN; /* 打開外部高速時鐘源 */ 19 while(CLK_ECKR_HSERDY == 0); /* 等待時鐘源信號穩定,穩定後CLK_ECKR_HSERDY置位 */ 20 CLK_SWCR = MASK_CLK_SWCR_SWEN; /* 轉換使能,採用自動轉換方式 */ 21 CLK_SWR = 0xB4; /* 選擇外部高速時鐘源 */ 22 while(!(CLK_SWCR & 0x08)); /* 切換完成後,SWIF置位 */ 23 }break; 24 case 3:{ // 保留 25 ; 26 }break; 27 default:break; 28 } 29 }