单片机成长之路(stm8基础篇)- 025 stm8 时钟切换
stm8 时钟切换;
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 }