接口/时钟/PLL
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
全部0条评论
快来发表一下你的评论吧 !