真的爱你0828 真的爱你0828
你猜(“、”)
关注数: 29 粉丝数: 40 发帖数: 2,015 关注贴吧数: 9
STM8L-DISCOVERY学习交流-基于(STM8L152C6T6)【切换时钟源】 寄存器操作: /* ****************************** *时钟切换 * 自动切换 * *****************************/ #include<stm8l152.h> #define u8 unsigned char #define u16 unsigned int //********* CLK_SELECT ******** #define CLK_HSI 0x01 #define CLK_LSI 0x02 #define CLK_HSE 0x04 #define CLK_LSE 0x08 //****** function prototype ******* void DelayMs(u8 Ms); void PORT_Init(void); void LED3(u8 count); void LED4(u8 count); void CLK_Switch(u8 CLK_SELECT); main() { u8 i;PORT_Init(); //不用开启时钟也行 //CLK_ECKCR |= 0X04; //open LSE (not bypass) //while((CLK_ECKCR & 0X08)==0X00); //waitting HSE ready //以上只是开启了HSE,但现在的时钟还是HSI while(1) { CLK_Switch(CLK_LSI); LED3(2); CLK_Switch(CLK_HSI); LED4(10); } } /********************************** Clock Switch********************************/ void CLK_Switch(u8 CLK_SELECT) { //SWIEN=1: Clock switch interrupt enabledCLK_SWCR |= 0x06; /*System clock selection bits 0x01: HSI selected as system clock source (reset value) 0x02: LSI selected as system clock source 0x04: HSE selected as system clock source 0x08: LSE selected as system clock source*/ CLK_SWR = CLK_SELECT; //SWIF=1: Clock switch event occurredwhile((CLK_SWCR&0x08)==0); //等待时钟切换完成 //不清除中断标志SWIF和SWEN也行 CLK_SWCR &= 0XF0; } /***************************** DelayMs(u8 Ms)*************************/ void DelayMs(u8 Ms) { u8 i;while(Ms--)for(i=100;i>0;i--); } /*************************** PORTC PORTE init**********************/ void PORT_Init(void) { PC_DDR=0X80; PC_CR1=0X80; PC_CR2=0X00; PE_DDR=0X80; PE_CR1=0X80; PE_CR2=0X00; } /**************************** LED3 LED4 闪烁********************/ void LED3(u8 count) { u8 i; for(i=0;i<count;i++) { PE_ODR=0X80; DelayMs(10); PE_ODR=0X00; DelayMs(10); } } void LED4(u8 count) { u8 i; for(i=0;i<count;i++) { PC_ODR=0X80; DelayMs(1000); PC_ODR=0X00; DelayMs(1000); } }
1 下一页