?? stm8+
字號:
#include "STM8S105S4.H"
#include "STM8_include.H"
unsigned char ceshi_CLK;//用于測試中斷是發生在哪個
/*
中斷
CSSD :HSE失效使能
SWIF :切換時鐘使用
*/
void init_system_clock(void)
{
CLK_SWCR =0x06;
/*CLK_SWCR =00000110;
BIT3 0:有時鐘切換事件發生中斷標志位,軟件寫0清除中斷標志
BIT2 1:時鐘切換中斷使能
BIT1 1:使能時鐘切換
BIT 0: 切換時鐘未進行
*/
CLK_SWR = 0XB4;//HSE作為主時鐘源
CLK_ICKR=0x07;
/*CLK_ICKR=00000111;
BIT5 0:活躍停機模式主電壓調節器開
BIT4 只讀位
BIT3 1:LSI使能
BIT2 1:從停機或者活躍停機模式快速喚醒使能
BIT1 只讀位
BIT0 1:內部高速RC開,CCS被激活作為備用震蕩器
*/
CLK_ECKR=0x01;
/*CLK_ECKR
BIT1 只讀位,判斷HSE是否準備就緒
BIT0 1:HSE開
*/
/*CLK_CMSR 只讀寄存器*/
CLK_CKDIVR=0x00;
/*
BIT[4:3] 00:高速內部時鐘預分頻器為1
BIT[2:0] 000:CPU預分頻因子為1
*/
CLK_PCKENR1=0XFF;
/*
BIT7 TIM1
BIT6 TIM3
BIT5 TIM2
BIT4 TIM4
BIT3 UART2/3
BIT2 UART1 BIT1 SPI
BIT0 I2C
*/
CLK_PCKENR1=0XFF;
/*
BIT7 CAN
BIT6 X
BIT5 X
BIT4 X
BIT3 ADC
BIT2 AWU BIT1 X
BIT0 X
*/
CLK_CSSR=0x05;
/*CLK_CSSR=00000101;
BIT3 0:為HSE失效中斷標志位
BIT2 1:時鐘安全系統檢測中斷使能
BIT1 只讀位,讀取是否輔助振蕩器開
BIT0 1:時鐘安全系統開
*/
CLK_CCOR=0x1E;
/*CLK_CCOR=00011110;
BIT6 只讀位
BIT5 只讀位
BIT[4:1] 1111輸出CPU時鐘
BIT0 0:禁止CCO輸出
*/
ITC_SPR1 &= 0XCF;//優先級2級
}
@far @interrupt void System_Clock_IRQ (void)
{
if((CLK_SWCR & 0x08) == 0x08)//如果切換時鐘發生
{
CLK_SWCR &= 0x05;//清除SWIF標志位,并且禁止切換時鐘
//CLK_ICKR &= 0XFE;
//清除ICKR第0位,關閉HSI,減小功耗(不知道關閉HSI會不會影響時鐘安全系統CCS)
ceshi_CLK=1;
}
if((CLK_CSSR & 0x08) == 0x08)//如果HSE失效,使用HSI 16M
{
CLK_CSSR =0x05;//清除HSE失效標志位
CLK_CKDIVR = 0X00;
/*
BIT[4:3] 00:高速內部時鐘預分頻器為1
BIT[2:0] 000:CPU預分頻因子為1
*/
ceshi_CLK=2;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -