單片機成長之路(stm8基礎篇)- 025 stm8 時鐘切換

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 }
相關文章
相關標籤/搜索