当前位置:首页 > 单片机 > 单片机
[导读]STM8库函数学习笔记之时钟管理相关函数:void CLK_DeInit(void); void CLK_HSECmd(FunctionalState NewState); void CLK_HSICmd(FunctionalState NewState); void CLK_LSICmd(FunctionalState NewState); void CL

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

相关函数:

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 时钟切换中断标志

返回值:无

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

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

ST公司的STM8AF5286是用于汽车的8位MCU,配置了多达128KB闪存,数据EEPROM,10位ADC,计时器,LIN,CAN,USART,SPI,I2C等接口,工作电压3-5.5V,

关键字: st stm8

你知道STM8 Nucleo开发板吗?意法半导体新推出的两款STM8* Nucleo开发板,让8位开发社区也能体验到STM32 * Nucleo系列开发板久经验证的易用性和可扩展功能。

关键字: Nucleo stm8 意法

折腾了两天了,一直没解决问题。短路计算机这边的串口收和发,自收自发一切正常,这说明计算机这边的串口没问题。短路stm8s的收和发,自收自发也正常,那就是stm8s这边的串口也没问题。怀疑是波特率误差比

关键字: stm8 串口通信

前一段时间画了一个CC1101收发小板子,但是一直没有成功,最后发现把27nH的电感焊接成了27uH,最终导致失败.现在更换之后可以覆盖我们公司所有的角落,已经够用了.下面是STM8程序CC1101.

关键字: cc1101 stm8 433无线模块

发布至今已十年,STM8将华丽转身,延续传奇。

关键字: 8位 MCU stm8 意法半导体 技术专访

由于STM8L101属于低功耗产品,所以设备刚上电时,其外设时钟都是关闭的。因此,使用相应外设时,需要先开启相应的外设时钟.

关键字: stm8l101 时钟管理

在使用MDK5编译STM32时,新增的.c文件需要添加到 include Paths 处,否则编译时会报错。使用STM8时,用的是IAR,新增的.c文件需要添加头文件路径到 options->c/c++ Compi...

关键字: stm8 错误

在讲PWM之前,大家先做以下5个实验。1、LED1循环亮300ms,灭700ms;2、LED1循环亮30ms,灭70ms;3、LED1循环亮3ms,灭7ms;4、循环以下步骤1)LED1循环亮3ms,灭7ms;执行一百次...

关键字: stm8 单片机 机器人

最近希望恢复性学习一下STM8的相关知识,于是我选择了从头开始写温湿度传感器DHT11驱动代码的方式。其中遇到一些问题,也有一些收获,希望会帮助到遇到类似问题的朋友,也希望不足之处得到大家的指导 首先介绍一下

关键字: dht11 stm8 温湿度传感器
关闭