配置STM8外部時鐘(寄存器)步驟:
1.設置外部時鐘寄存器CLK_ECKR是對其寫0xB4
2.設置外部時鐘分頻,CLK_CKDIVR低三位是外部時鐘分頻系數設置
3.使能外部時鐘向CLK_ECKR寫0x01
void CLK_Init(void)
{
CLK_CMSR =0xB4; //使能外置高速晶體振蕩器
CLK_CKDIVR =0x03; //設置外部時鐘分頻
CLK_ECKR = 0X01; //使能外部時鐘寄存器
}
使能外部時鐘后的寄存器
相關函數:
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_ClockSecuritySystemEnable(void);
void CLK_SYSCLKEmergencyClear(void);
void CLK_AdjustHSICalibrationValue(CLK_HSITrimValue_TypeDef CLK_HSICalibrationValue);
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);
恢復相關的時鐘寄存器到默認值
參數:無
返回值:無
注意:
當要復位CCOR寄存器時,如果CCOEN位被置位,則需要先復位CCOEN位,然后再復位CCOSEL位,復位CCOEN位和復位CCOSEL位的操作必須連續。
這個理解不知對不對,是根據庫函數的幫助來理解的,但測試結果,無論CCOEN是否置位,調用后都能恢復CCOR寄存器。
void CLK_HSECmd(FunctionalState NewState);
啟用或禁用外部高速振蕩器(HSE)
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
void CLK_HSICmd(FunctionalState NewState);
啟用或禁用內部高速振蕩器(HSI 16MHz)
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
void CLK_LSICmd(FunctionalState NewState);
啟用或禁用內部低速振蕩器(LSI 128KHz)
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
void CLK_CCOCmd(FunctionalState NewState);
啟用或禁用可配置的時鐘輸出功能
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
void CLK_ClockSwitchCmd(FunctionalState NewState);
手動啟動或關閉時鐘切換
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
void CLK_FastHaltWakeUpCmd(FunctionalState NewState);
使能或禁止從停機模式(Halt)或活躍停機模式(Active Halt)中快速喚醒。
停機模式(Halt):CPU和片上設備完全停止工作,定時喚醒單元AWU也停止,僅由外部中斷及復位喚醒。
活躍停機模式(Active Halt):保留一個定時喚醒單元AWU工作,CPU和片上設備全停止工作,AWU和外部中斷及復位均可喚醒
使能后內部高速振蕩器(HSI)會自動打開,且作為主時鐘源(fMASTER)(CKM=SWI=HSI),然后從停機模式(Halt)或活躍停機模式(Active Halt)中
快速喚醒。
返回值:無
void CLK_SlowActiveHaltWakeUpCmd(FunctionalState NewState);
啟用或禁止活躍停機模式下的電壓調節器
但是這個函數并沒有字面上的喚醒功能。但是跟自動喚醒(AWU)功能有關。
一旦MCU進入活躍停機模式時,主電壓調節器將默認關閉(DISABLE),從而喚醒時間將比較長,所以這個函數就為了在快速喚醒與低功耗之間選
擇。
參數:
NewState: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
如果為了能快速從活躍停機模式中喚醒,進入活躍停機前則調用CLK_SlowActiveHaltWakeUpCmd(ENABLE);但功耗較大。
如果進入活躍停機模式前沒有調用CLK_SlowActiveHaltWakeUpCmd(ENABLE);或調用了CLK_SlowActiveHaltWakeUpCmd(DISABLE);即默認的情況下
,喚醒時間比較長,但功耗較低。
關于AWU(自動喚醒功能的詳細說明請查看手冊)
void CLK_PeripheralClockConfig(CLK_Peripheral_TypeDef CLK_Peripheral, FunctionalState NewState);
啟用或禁用指定的外設時鐘,默認所有的外設時鐘都是啟用的。
參數:
CLK_Peripheral 外設類型
可選值:
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: 新的狀態值
DISABLE 禁用
ENABLE 啟用
返回值:無
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, CLK_Source_TypeDef CLK_NewClock, FunctionalState
ITState, CLK_CurrentClockState_TypeDef CLK_CurrentClockState);
系統時鐘切換配置
參數:
CLK_SwitchMode, 切換模式
可選值:
CLK_SWITCHMODE_MANUAL 手動切換
CLK_SWITCHMODE_AUTO 自動切換
CLK_NewClock,新的時鐘源
可選值:
CLK_SOURCE_HSI 內部16MHz高速振蕩器
CLK_SOURCE_LSI 內部128KHz低速振蕩器
CLK_SOURCE_HSE 外部時鐘
ITState,啟用或禁用時鐘切換中斷
可選值:
DISABLE 禁用
ENABLE 啟用
CLK_CurrentClockState,當前使用的時鐘源在切換到新的時鐘源后關閉或繼續開啟。
可選值:
CLK_CURRENTCLOCKSTATE_DISABLE 關閉
CLK_CURRENTCLOCKSTATE_ENABLE 開啟
返回值:
如果切換成功返回SUCCESS,否則返回ERROR
評論
查看更多