STM8庫編程筆記之時(shí)鐘管理
STM8庫函數(shù)學(xué)習(xí)筆記之時(shí)鐘管理
相關(guān)函數(shù):
void CLK_DeInit(void);
void CLK_HSECmd(FunctionalState NewState);
void CLK_HSICmd(FunctionalState NewState);
void CLK_LSICmd(FunctionalState NewState);
void CLK_CCOCmd(FunctionalState NewState);
void CLK_ClockSwitchCmd(FunctionalState NewState);
void CLK_FastHaltWakeUpCmd(FunctionalState NewState);
void CLK_SlowActiveHaltWakeUpCmd(FunctionalState NewState);
void CLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral, FunctionalState NewState);
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, CLK_Source_TypeDef CLK_NewClock, FunctionalState
ITState, CLK_CurrentClockState_TypeDef CLK_CurrentClockState);
void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler);
void CLK_CCOConfig(CLK_Output_TypeDef CLK_CCO);
void CLK_ITConfig(CLK_IT_TypeDef CLK_IT, FunctionalState NewState);
void CLK_SYSCLKConfig(CLK_Prescaler_TypeDef CLK_Prescaler);
void CLK_SWIMConfig(CLK_SWIMDivider_TypeDef CLK_SWIMDivider);
void CLK_CANConfig(CLK_CANDivider_TypeDef CLK_CANDivider);
void CLK_ClockSecuritySystemEnabl
void CLK_SYSCLKEmergencyClear(void);
void CLK_AdjustHSICalibrationValu
u32 CLK_GetClockFreq(void);
CLK_Source_TypeDef CLK_GetSYSCLKSource(void);
FlagStatus CLK_GetFlagStatus(CLK_Flag_TypeDef CLK_FLAG);
ITStatus CLK_GetITStatus(CLK_IT_TypeDef CLK_IT);
void CLK_ClearITPendingBit(CLK_IT_TypeDef CLK_IT);
//-----------------------------------------------------------------------------------------
void CLK_DeInit(void);
恢復(fù)相關(guān)的時(shí)鐘寄存器到默認(rèn)值
參數(shù):無
返回值:無
注意:
當(dāng)要復(fù)位CCOR寄存器時(shí),如果CCOEN位被置位,則需要先復(fù)位CCOEN位,然后再復(fù)位CCOSEL位,復(fù)位CCOEN位和復(fù)位CCOSEL位的操作必須連續(xù)。
這個(gè)理解不知對不對,是根據(jù)庫函數(shù)的幫助來理解的,但測試結(jié)果,無論CCOEN是否置位,調(diào)用后都能恢復(fù)CCOR寄存器。
//-----------------------------------------------------------------------------------------
void CLK_HSECmd(FunctionalState NewState);
啟用或禁用外部高速振蕩器(HSE)
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_HSICmd(FunctionalState NewState);
啟用或禁用內(nèi)部高速振蕩器(HSI 16MHz)
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_LSICmd(FunctionalState NewState);
啟用或禁用內(nèi)部低速振蕩器(LSI 128KHz)
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_CCOCmd(FunctionalState NewState);
啟用或禁用可配置的時(shí)鐘輸出功能
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_ClockSwitchCmd(FunctionalState NewState);
手動啟動或關(guān)閉時(shí)鐘切換
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_FastHaltWakeUpCmd(FunctionalState NewState);
使能或禁止從停機(jī)模式(Halt)或活躍停機(jī)模式(Active Halt)中快速喚醒。
停機(jī)模式(Halt):CPU和片上設(shè)備完全停止工作,定時(shí)喚醒單元AWU也停止,僅由外部中斷及復(fù)位喚醒。
活躍停機(jī)模式(Active Halt):保留一個(gè)定時(shí)喚醒單元AWU工作,CPU和片上設(shè)備全停止工作,AWU和外部中斷及復(fù)位均可喚醒
使能后內(nèi)部高速振蕩器(HSI)會自動打開,且作為主時(shí)鐘源(fMASTER)(CKM=SWI=HSI),然后從停機(jī)模式(Halt)或活躍停機(jī)模式(Active Halt)中
快速喚醒。
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_SlowActiveHaltWakeUpCmd(FunctionalState NewState);
啟用或禁止活躍停機(jī)模式下的電壓調(diào)節(jié)器
但是這個(gè)函數(shù)并沒有字面上的喚醒功能。但是跟自動喚醒(AWU)功能有關(guān)。
一旦MCU進(jìn)入活躍停機(jī)模式時(shí),主電壓調(diào)節(jié)器將默認(rèn)關(guān)閉(DISABLE),從而喚醒時(shí)間將比較長,所以這個(gè)函數(shù)就為了在快速喚醒與低功耗之間選
擇。
參數(shù):
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
如果為了能快速從活躍停機(jī)模式中喚醒,進(jìn)入活躍停機(jī)前則調(diào)用CLK_SlowActiveHaltWakeUpCmd(ENABLE);但功耗較大。
如果進(jìn)入活躍停機(jī)模式前沒有調(diào)用CLK_SlowActiveHaltWakeUpCmd(ENABLE);或調(diào)用了CLK_SlowActiveHaltWakeUpCmd(DISABLE);即默認(rèn)的情況下
,喚醒時(shí)間比較長,但功耗較低。
關(guān)于AWU(自動喚醒功能的詳細(xì)說明請查看手冊)
//-----------------------------------------------------------------------------------------
void CLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral, FunctionalState NewState);
啟用或禁用指定的外設(shè)時(shí)鐘,默認(rèn)所有的外設(shè)時(shí)鐘都是啟用的。
參數(shù):
CLK_Peripheral 外設(shè)類型
可選值:
CLK_PERIPHERAL_I2C
CLK_PERIPHERAL_SPI
CLK_PERIPHERAL_UART1
CLK_PERIPHERAL_UART2
CLK_PERIPHERAL_UART3
CLK_PERIPHERAL_TIMER6
CLK_PERIPHERAL_TIMER4
CLK_PERIPHERAL_TIMER5
CLK_PERIPHERAL_TIMER2
CLK_PERIPHERAL_TIMER3
CLK_PERIPHERAL_TIMER1
CLK_PERIPHERAL_AWU
CLK_PERIPHERAL_ADC
CLK_PERIPHERAL_CAN
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, CLK_Source_TypeDef CLK_NewClock, FunctionalState
ITState, CLK_CurrentClockState_TypeDef CLK_CurrentClockState);
系統(tǒng)時(shí)鐘切換配置
參數(shù):
CLK_SwitchMode, 切換模式
可選值:
CLK_SWITCHMODE_MANUAL 手動切換
CLK_SWITCHMODE_AUTO 自動切換
CLK_NewClock,新的時(shí)鐘源
可選值:
CLK_SOURCE_HSI 內(nèi)部16MHz高速振蕩器
CLK_SOURCE_LSI 內(nèi)部128KHz低速振蕩器
CLK_SOURCE_HSE 外部時(shí)鐘
ITState,啟用或禁用時(shí)鐘切換中斷
可選值:
DISABLE 禁用
ENABLE 啟用
CLK_CurrentClockState,當(dāng)前使用的時(shí)鐘源在切換到新的時(shí)鐘源后關(guān)閉或繼續(xù)開啟。
可選值:
CLK_CURRENTCLOCKSTATE_DISABLE 關(guān)閉
CLK_CURRENTCLOCKSTATE_ENABLE 開啟
返回值:
如果切換成功返回SUCCESS,否則返回ERROR
//-----------------------------------------------------------------------------------------
void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler);
配置內(nèi)部高速振蕩器(HSI)的分頻器
參數(shù):
HSIPrescaler,分頻值
可選值:
CLK_PRESCALER_HSIDIV1 內(nèi)部高速時(shí)鐘 1 分頻
CLK_PRESCALER_HSIDIV2 內(nèi)部高速時(shí)鐘 2 分頻
CLK_PRESCALER_HSIDIV4 內(nèi)部高速時(shí)鐘 4 分頻
CLK_PRESCALER_HSIDIV8 內(nèi)部高速時(shí)鐘 8 分頻
CLK_PRESCALER_CPUDIV1 CPU時(shí)鐘 1 分頻
CLK_PRESCALER_CPUDIV2 CPU時(shí)鐘 2 分頻
CLK_PRESCALER_CPUDIV4 CPU時(shí)鐘 4 分頻
CLK_PRESCALER_CPUDIV8 CPU時(shí)鐘 8 分頻
CLK_PRESCALER_CPUDIV16 CPU時(shí)鐘 16 分頻
CLK_PRESCALER_CPUDIV32 CPU時(shí)鐘 32 分頻
CLK_PRESCALER_CPUDIV64 CPU時(shí)鐘 64 分頻
CLK_PRESCALER_CPUDIV128 CPU時(shí)鐘 128 分頻
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_CCOConfig(CLK_Output_TypeDef CLK_CCO);
配置指定時(shí)鐘輸出引腳(CCO)的時(shí)鐘
參數(shù):
CLK_CCO:
可選值:
CLK_OUTPUT_HSI 內(nèi)部高速振蕩器頻率16MHz/分頻值(HSIDIV)
CLK_OUTPUT_LSI 內(nèi)部低速振蕩器 128KHz
CLK_OUTPUT_HSE 外部振蕩器
CLK_OUTPUT_CPU CPU時(shí)鐘
CLK_OUTPUT_CPUDIV2 CPU時(shí)鐘 2 分頻
CLK_OUTPUT_CPUDIV4 CPU時(shí)鐘 4 分頻
CLK_OUTPUT_CPUDIV8 CPU時(shí)鐘 8 分頻
CLK_OUTPUT_CPUDIV16 CPU時(shí)鐘 16 分頻
CLK_OUTPUT_CPUDIV32 CPU時(shí)鐘 32 分頻
CLK_OUTPUT_CPUDIV64 CPU時(shí)鐘 64 分頻
CLK_OUTPUT_HSIRC fHSI
CLK_OUTPUT_MASTER fMASTER
CLK_OUTPUT_OTHERS fCPU
返回值:無
指定的時(shí)鐘輸出引腳必須通過配置寄存器Px_CR1對應(yīng)的位為1來設(shè)置為上拉輸入或推挽輸出模式。
//-----------------------------------------------------------------------------------------
void CLK_ITConfig(CLK_IT_TypeDef CLK_IT, FunctionalState NewState);
啟用或禁用指定的時(shí)鐘中斷
參數(shù):
CLK_IT,中斷源,中斷配置和標(biāo)志由軟件清零
可選值:
CLK_IT_CSSD 時(shí)鐘安全系統(tǒng)檢測標(biāo)志
CLK_IT_SWIF 時(shí)鐘切換中斷標(biāo)志
NewState: 新的狀態(tài)值
DISABLE 禁用
ENABLE 啟用
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_SYSCLKConfig(CLK_Prescaler_TypeDef CLK_Prescaler);
配置內(nèi)部高速振蕩器(HSI)和CPU時(shí)鐘分頻器
參數(shù):
CLK_Prescaler,指定HSI或CPU時(shí)鐘預(yù)分頻值
可選值:
CLK_PRESCALER_HSIDIV1 內(nèi)部高速振蕩器 1 分頻
CLK_PRESCALER_HSIDIV2 內(nèi)部高速振蕩器 2 分頻
CLK_PRESCALER_HSIDIV4 內(nèi)部高速振蕩器 4 分頻
CLK_PRESCALER_HSIDIV8 內(nèi)部高速振蕩器 8 分頻
CLK_PRESCALER_CPUDIV1 CPU時(shí)鐘 1 分頻
CLK_PRESCALER_CPUDIV2 CPU時(shí)鐘 2 分頻
CLK_PRESCALER_CPUDIV4 CPU時(shí)鐘 4 分頻
CLK_PRESCALER_CPUDIV8 CPU時(shí)鐘 8 分頻
CLK_PRESCALER_CPUDIV16 CPU時(shí)鐘 16 分頻
CLK_PRESCALER_CPUDIV32 CPU時(shí)鐘 32 分頻
CLK_PRESCALER_CPUDIV64 CPU時(shí)鐘 64 分頻
CLK_PRESCALER_CPUDIV128 CPU時(shí)鐘 128 分頻
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_SWIMConfig(CLK_SWIMDivider_TypeDef CLK_SWIMDivider);
配置SWIM時(shí)鐘分頻器
參數(shù):
CLK_SWIMDivider,SWIM時(shí)鐘分頻值
可選值:
CLK_SWIMDIVIDER_2 SWIM時(shí)鐘 2 分頻
CLK_SWIMDIVIDER_OTHER SWIM時(shí)鐘不分頻
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_CANConfig(CLK_CANDivider_TypeDef CLK_CANDivider);
配置CAN時(shí)鐘分頻器
參數(shù):
CLK_CANDivider,CAN時(shí)鐘分頻值
可選值:
CLK_CANDIVIDER_1 CAN時(shí)鐘頻率 = HSE/1
CLK_CANDIVIDER_2 CAN時(shí)鐘頻率 = HSE/2
CLK_CANDIVIDER_3 CAN時(shí)鐘頻率 = HSE/3
CLK_CANDIVIDER_4 CAN時(shí)鐘頻率 = HSE/4
CLK_CANDIVIDER_5 CAN時(shí)鐘頻率 = HSE/5
CLK_CANDIVIDER_6 CAN時(shí)鐘頻率 = HSE/6
CLK_CANDIVIDER_7 CAN時(shí)鐘頻率 = HSE/7
CLK_CANDIVIDER_8 CAN時(shí)鐘頻率 = HSE/8
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_ClockSecuritySystemEnabl
啟用時(shí)鐘安全系統(tǒng)。一旦啟用就不能禁用,直到下一次復(fù)位。
參數(shù):無
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_SYSCLKEmergencyClear(void);
重置時(shí)鐘切換忙(SWBSY)標(biāo)志,以復(fù)位時(shí)鐘切換過程。
如果由于某種原因時(shí)鐘切換沒有成功,軟件可通過清除標(biāo)志位SWBSY以復(fù)位當(dāng)前的切換操作,
使寄存器CLK_SWR恢復(fù)原值(原時(shí)鐘源)。
如果在同一時(shí)間軟件嘗試置位SWEN和復(fù)位SWBSY,復(fù)位SWBSY的動作優(yōu)先。
參數(shù):無
返回值:無
//-----------------------------------------------------------------------------------------
void CLK_AdjustHSICalibrationValu
修正內(nèi)部高速振蕩器頻率
參數(shù):
CLK_HSICalibrationValue,校準(zhǔn)值。
可選值:
CLK_HSITRIMVALUE_0 校準(zhǔn)值為 0
CLK_HSITRIMVALUE_1 校準(zhǔn)值為 1
CLK_HSITRIMVALUE_2 校準(zhǔn)值為 2
CLK_HSITRIMVALUE_3 校準(zhǔn)值為 3
CLK_HSITRIMVALUE_4 校準(zhǔn)值為 4
CLK_HSITRIMVALUE_5 校準(zhǔn)值為 5
CLK_HSITRIMVALUE_6 校準(zhǔn)值為 6
CLK_HSITRIMVALUE_7 校準(zhǔn)值為 7
返回值:無
注意:在大容量產(chǎn)品上,只有位2:0是可用的。
在中等容量或小容量產(chǎn)品上,位3:0或2:0是可用的,取決于選項(xiàng)字節(jié)的配置(參見數(shù)據(jù)手冊)。
//-----------------------------------------------------------------------------------------
u32 CLK_GetClockFreq(void);
獲得系統(tǒng)主時(shí)鐘頻率
參數(shù):無
返回值: 32位的主時(shí)鐘頻率
//-----------------------------------------------------------------------------------------
CLK_Source_TypeDef CLK_GetSYSCLKSource(void);
獲得系統(tǒng)時(shí)鐘源
參數(shù):無
返回值:
CLK_SOURCE_HSI 時(shí)鐘源為內(nèi)部高速振蕩器
CLK_SOURCE_LSI 時(shí)鐘源為內(nèi)部低速振蕩器
CLK_SOURCE_HSE 時(shí)鐘源為外部高速振蕩器
//-----------------------------------------------------------------------------------------
FlagStatus CLK_GetFlagStatus(CLK_Flag_TypeDef CLK_FLAG);
獲得指定的時(shí)鐘標(biāo)志的置位情況
參數(shù):
CLK_FLAG,要獲得的標(biāo)志
可選值:
CLK_FLAG_LSIRDY 內(nèi)部低速振蕩器就緒標(biāo)志
CLK_FLAG_HSIRDY 內(nèi)部高速振蕩器就緒標(biāo)志
CLK_FLAG_HSERDY 外部高速振蕩器就緒標(biāo)志
CLK_FLAG_SWIF 時(shí)鐘切換中斷標(biāo)志
CLK_FLAG_SWBSY 時(shí)鐘切換忙標(biāo)志
CLK_FLAG_CSSD 系統(tǒng)時(shí)鐘安全檢測標(biāo)志
CLK_FLAG_AUX 輔助振蕩器的開關(guān)狀態(tài),(如果輔助振蕩器(HSI/8)開,并做為當(dāng)前的主時(shí)鐘源)
CLK_FLAG_CCOBSY 可配置的時(shí)鐘輸出忙,用于指示所選的CCO時(shí)鐘源正處于切換狀態(tài)
CLK_FLAG_CCORDY 可配置的時(shí)鐘輸出就緒,用于指示所選的CCO時(shí)鐘源正處穩(wěn)定狀態(tài)
返回值:
RESET 復(fù)位狀態(tài)。
SET 置位狀態(tài)。
//-----------------------------------------------------------------------------------------
ITStatus CLK_GetITStatus(CLK_IT_TypeDef CLK_IT);
獲得指定的時(shí)鐘中斷啟用狀態(tài)
參數(shù):
CLK_IT,時(shí)鐘中斷類型
可選值:
CLK_IT_CSSD 系統(tǒng)時(shí)鐘安全檢測標(biāo)志
CLK_IT_SWIF 時(shí)鐘切換中斷標(biāo)志
返回值:
RESET 復(fù)位狀態(tài)。
SET 置位狀態(tài)。
//-----------------------------------------------------------------------------------------
void CLK_ClearITPendingBit(CLK_IT_TypeDef CLK_IT);
清除時(shí)鐘中斷標(biāo)志位
參數(shù):
CLK_IT,時(shí)鐘中斷標(biāo)志
可選值:
CLK_IT_CSSD 系統(tǒng)時(shí)鐘安全檢測標(biāo)志
CLK_IT_SWIF 時(shí)鐘切換中斷標(biāo)志
返回值:無
//-----------------------------------------------------------------------------------------