STM8库函数学习笔记之时钟管理

    技术2022-05-19  24

    STM8库函数学习笔记之时钟管理

    作者:BH7KQK 日期:2010.12.31

    相关函数:

    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 

    //-----------------------------------------------------------------------------------------

    void CLK_HSIPrescalerConfig(CLK_Prescaler_TypeDef HSIPrescaler);

    配置内部高速振荡器(HSI)的分频器

    参数: HSIPrescaler,分频值 可选值: CLK_PRESCALER_HSIDIV1 内部高速时钟 1 分频 CLK_PRESCALER_HSIDIV2 内部高速时钟 2 分频 CLK_PRESCALER_HSIDIV4 内部高速时钟 4 分频 CLK_PRESCALER_HSIDIV8  内部高速时钟 8 分频 CLK_PRESCALER_CPUDIV1  CPU时钟 1 分频 CLK_PRESCALER_CPUDIV2  CPU时钟 2 分频 CLK_PRESCALER_CPUDIV4  CPU时钟 4 分频 CLK_PRESCALER_CPUDIV8  CPU时钟 8 分频 CLK_PRESCALER_CPUDIV16 CPU时钟 16 分频 CLK_PRESCALER_CPUDIV32 CPU时钟 32 分频 CLK_PRESCALER_CPUDIV64 CPU时钟 64 分频 CLK_PRESCALER_CPUDIV128 CPU时钟 128 分频

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_CCOConfig(CLK_Output_TypeDef CLK_CCO);

    配置指定时钟输出引脚(CCO)的时钟

    参数: CLK_CCO: 可选值: CLK_OUTPUT_HSI  内部高速振荡器频率16MHz/分频值(HSIDIV) CLK_OUTPUT_LSI  内部低速振荡器 128KHz CLK_OUTPUT_HSE  外部振荡器 CLK_OUTPUT_CPU  CPU时钟 CLK_OUTPUT_CPUDIV2  CPU时钟 2 分频 CLK_OUTPUT_CPUDIV4  CPU时钟 4 分频 CLK_OUTPUT_CPUDIV8  CPU时钟 8 分频 CLK_OUTPUT_CPUDIV16  CPU时钟 16 分频 CLK_OUTPUT_CPUDIV32  CPU时钟 32 分频 CLK_OUTPUT_CPUDIV64  CPU时钟 64 分频 CLK_OUTPUT_HSIRC   fHSI CLK_OUTPUT_MASTER  fMASTER CLK_OUTPUT_OTHERS  fCPU

    返回值:无

    指定的时钟输出引脚必须通过配置寄存器Px_CR1对应的位为1来设置为上拉输入或推挽输出模式。

    //-----------------------------------------------------------------------------------------

    void CLK_ITConfig(CLK_IT_TypeDef CLK_IT, FunctionalState NewState);

    启用或禁用指定的时钟中断

    参数: CLK_IT,中断源,中断配置和标志由软件清零 可选值: CLK_IT_CSSD  时钟安全系统检测标志 CLK_IT_SWIF  时钟切换中断标志

    NewState: 新的状态值 DISABLE 禁用 ENABLE 启用

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_SYSCLKConfig(CLK_Prescaler_TypeDef CLK_Prescaler);

    配置内部高速振荡器(HSI)和CPU时钟分频器

    参数: CLK_Prescaler,指定HSI或CPU时钟预分频值 可选值: CLK_PRESCALER_HSIDIV1  内部高速振荡器 1 分频 CLK_PRESCALER_HSIDIV2  内部高速振荡器 2 分频 CLK_PRESCALER_HSIDIV4  内部高速振荡器 4 分频 CLK_PRESCALER_HSIDIV8  内部高速振荡器 8 分频 CLK_PRESCALER_CPUDIV1  CPU时钟 1 分频 CLK_PRESCALER_CPUDIV2  CPU时钟 2 分频 CLK_PRESCALER_CPUDIV4  CPU时钟 4 分频 CLK_PRESCALER_CPUDIV8  CPU时钟 8 分频 CLK_PRESCALER_CPUDIV16  CPU时钟 16 分频 CLK_PRESCALER_CPUDIV32  CPU时钟 32 分频 CLK_PRESCALER_CPUDIV64  CPU时钟 64 分频 CLK_PRESCALER_CPUDIV128  CPU时钟 128 分频

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_SWIMConfig(CLK_SWIMDivider_TypeDef CLK_SWIMDivider);

    配置SWIM时钟分频器

    参数: CLK_SWIMDivider,SWIM时钟分频值 可选值: CLK_SWIMDIVIDER_2  SWIM时钟 2 分频 CLK_SWIMDIVIDER_OTHER  SWIM时钟不分频

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_CANConfig(CLK_CANDivider_TypeDef CLK_CANDivider);

    配置CAN时钟分频器

    参数:

    CLK_CANDivider,CAN时钟分频值 可选值: CLK_CANDIVIDER_1  CAN时钟频率 = HSE/1  CLK_CANDIVIDER_2  CAN时钟频率 = HSE/2  CLK_CANDIVIDER_3  CAN时钟频率 = HSE/3  CLK_CANDIVIDER_4  CAN时钟频率 = HSE/4  CLK_CANDIVIDER_5  CAN时钟频率 = HSE/5  CLK_CANDIVIDER_6  CAN时钟频率 = HSE/6  CLK_CANDIVIDER_7  CAN时钟频率 = HSE/7  CLK_CANDIVIDER_8  CAN时钟频率 = HSE/8 返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_ClockSecuritySystemEnable(void);

    启用时钟安全系统。一旦启用就不能禁用,直到下一次复位。

    参数:无

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_SYSCLKEmergencyClear(void);

    重置时钟切换忙(SWBSY)标志,以复位时钟切换过程。 如果由于某种原因时钟切换没有成功,软件可通过清除标志位SWBSY以复位当前的切换操作, 使寄存器CLK_SWR恢复原值(原时钟源)。 如果在同一时间软件尝试置位SWEN和复位SWBSY,复位SWBSY的动作优先。

    参数:无

    返回值:无

    //-----------------------------------------------------------------------------------------

    void CLK_AdjustHSICalibrationValue(CLK_HSITrimValue_TypeDef CLK_HSICalibrationValue);

    修正内部高速振荡器频率

    参数:

    CLK_HSICalibrationValue,校准值。 可选值: CLK_HSITRIMVALUE_0  校准值为 0  CLK_HSITRIMVALUE_1  校准值为 1  CLK_HSITRIMVALUE_2  校准值为 2  CLK_HSITRIMVALUE_3  校准值为 3  CLK_HSITRIMVALUE_4  校准值为 4  CLK_HSITRIMVALUE_5  校准值为 5  CLK_HSITRIMVALUE_6  校准值为 6  CLK_HSITRIMVALUE_7  校准值为 7 返回值:无

    注意:在大容量产品上,只有位2:0是可用的。 在中等容量或小容量产品上,位3:0或2:0是可用的,取决于选项字节的配置(参见数据手册)。

    //-----------------------------------------------------------------------------------------

    u32 CLK_GetClockFreq(void);

    获得系统主时钟频率

    参数:无

    返回值: 32位的主时钟频率

    //-----------------------------------------------------------------------------------------

    CLK_Source_TypeDef CLK_GetSYSCLKSource(void);

    获得系统时钟源

    参数:无

    返回值: CLK_SOURCE_HSI  时钟源为内部高速振荡器  CLK_SOURCE_LSI  时钟源为内部低速振荡器  CLK_SOURCE_HSE  时钟源为外部高速振荡器 

    //-----------------------------------------------------------------------------------------

    FlagStatus CLK_GetFlagStatus(CLK_Flag_TypeDef CLK_FLAG);

    获得指定的时钟标志的置位情况

    参数:

    CLK_FLAG,要获得的标志 可选值: CLK_FLAG_LSIRDY  内部低速振荡器就绪标志 CLK_FLAG_HSIRDY  内部高速振荡器就绪标志 CLK_FLAG_HSERDY  外部高速振荡器就绪标志 CLK_FLAG_SWIF    时钟切换中断标志 CLK_FLAG_SWBSY   时钟切换忙标志 CLK_FLAG_CSSD    系统时钟安全检测标志 CLK_FLAG_AUX     辅助振荡器的开关状态,(如果辅助振荡器(HSI/8)开,并做为当前的主时钟源) CLK_FLAG_CCOBSY  可配置的时钟输出忙,用于指示所选的CCO时钟源正处于切换状态 CLK_FLAG_CCORDY  可配置的时钟输出就绪,用于指示所选的CCO时钟源正处稳定状态

    返回值: RESET 复位状态。 SET   置位状态。

    //-----------------------------------------------------------------------------------------

    ITStatus CLK_GetITStatus(CLK_IT_TypeDef CLK_IT);

    获得指定的时钟中断启用状态

    参数: CLK_IT,时钟中断类型 可选值: CLK_IT_CSSD  系统时钟安全检测标志 CLK_IT_SWIF  时钟切换中断标志

    返回值: RESET 复位状态。 SET   置位状态。

    //-----------------------------------------------------------------------------------------

    void CLK_ClearITPendingBit(CLK_IT_TypeDef CLK_IT);

    清除时钟中断标志位

    参数: CLK_IT,时钟中断标志 可选值: CLK_IT_CSSD  系统时钟安全检测标志 CLK_IT_SWIF  时钟切换中断标志

    返回值:无

    //-----------------------------------------------------------------------------------------


    最新回复(0)