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

发布者:Harmonious88最新更新时间:2015-12-21 来源: eefocus关键字: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,当前使用的时钟源在切换到新的时钟源后关闭或继续开启。 [page]
可选值: 
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  时钟切换中断标志

返回值:无

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

关键字:STM8  库函数  时钟管理 引用地址:STM8库函数学习笔记之时钟管理

上一篇:STM8学习笔记——初步认识
下一篇:STM8库函数学习笔记之ADC

推荐阅读最新更新时间:2024-03-16 14:40

STM8 4线驱动1602乱码
近段时间用STM8驱动1602,采用4线方式,首次上电出现乱码,现在网上找到解决方法,做此总结。 网上大佬分析,出现乱码原因是在单片机发送0x28初始化时,高4位发送就已经完成初始化,低4位发送导致出现乱码,需要延时后再初始化可解决。这位大佬提供的方法确实可以解决问题,但感觉问题应该不在这,具体原因还没得出。 #include iostm8s105k4.h #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef
[单片机]
stm8的GPIO引脚模式
GPIO_Mode_In_FL_No_IT 浮空输入无中断 GPIO_Mode_In_PU_No_IT 上拉输入无中断 GPIO_Mode_In_FL_IT 浮空输入有中断 GPIO_Mode_In_PU_IT 上拉输入有中断 GPIO_Mode_Out_OD_Low_Fast 开漏-输出低-高速 Output open-drain, low level, 10MHz GPIO_Mode_Out_PP_Low_Fast 推挽-输出低-高速 Output push-pull, low level, 10MHz GPIO_Mode_Out_OD_Low_Slow 开漏-输出低-低速 Output open
[单片机]
Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出
摘要: c标准库的printf是输出给显示器的,将printf函数进行修改,使其输出重定向至串口,就能实现目的。printf函数调用fputc函数完成实质输出单一字符的工作,因此将fputc函数修改使之完成串口单字符发送工作即可。 注: 本文方法性内容主要来自《Keil MDK环境下使用printf函数的解决方法》与《STM32串口使用Printf()函数问题》。除使用c标准库外,还可以使用keil mdk提供的microLib,在STM32串口使用Printf()函数问题》一文有介绍,另外,该文同时也提到如果使用c标准库函数,则要避免链接使用半主机模式的函数,retarge.c文件中的#pragma import(__use
[单片机]
STM32入门系列-使用库函数点亮LED软硬件分析
电路图分析 首先找来单片机的原理图,根据原理图进行相关的设计工作。 例如在上图中相同网络标号表示它们是连接在一起的,因此D1发光二极管阴极是连接在STM32的PC0管脚上,D2指示灯阴极连接在PC1管脚上,其他LED管脚以此类推。如果要使D1指示灯亮,只需要控制PC0管脚输出低电平, 如果要使D1指示灯灭,只需控制PC0输出高电平。如果你们使用的是其他板子,连接LED的管脚和极性不一样,那么只需要在程序中修改对应的GPIO管脚和输出电平状态即可,原理是一样的。 要点亮D1发光二极管,也就是让STM32的PC0管脚输出一个低电平。 库函数支持文件 如果采用的是库函数开发,需要复制创建好的库函数模板,在此模板上进行程序开发
[单片机]
STM32入门系列-使用<font color='red'>库函数</font>点亮LED软硬件分析
STM8 SPI简介 主要特征
SPI简介 串行外设接口(SPI)允许芯片与其他设备以半/全双工、同步、串行方式通信。此接口可以被配置成主模式,并为从设备提供通信时钟(SCK)。接口还能以多主配置方式工作。 STM8的SPI可用于多种用途,包括带或不带第三根双向数据线的双线单工同步传输,还可使用CRC校验来进行可靠通信。 SPI主要特征 3线全双工同步传输 带或不带第三根双向数据线的双线单工同步传输 8或16位传输帧格式选择 主或从操作 8个主模式频率(最大为fMASTER/2) 从模式频率(最大为fPCLK/2) 快速通信:最大SPI速度达到10MHz 主模式和从模式下均可以由软件或硬件进行NSS管理 可编程的时钟极性和相位 可编程的数
[单片机]
STM8单片机ADC应用(IAR)
STM8片上集成了10位逐次比较型模数转换器,在开发板上有个电位器接到了AIN3,但没有可以显示数据的LED数码管或LCD液晶显示屏,怎么办呢?可以把AD采集数据通过UART发送到电脑上显示。 #i nclude iostm8s207sb.h void CLK_init(void) { CLK_CKDIVR = 0x08; // 16M内部RC经2分频后系统时钟为8M } void GPIO_init(void) { PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出 PD_CR1 = 0x08; // 设置PD3为推挽输出 P
[单片机]
STM8等低端单片机打印各种格式数据
#include “stm8l15x.h” #include “delay.h” #include “stdarg.h” #include “stdio.h” //定义LED与按键接口 #define LED_GPIO_PORT GPIOC #define LED_GPIO_PINS GPIO_Pin_4 #define KEY_GPIO_PORT GPIOD #define KEY_GPIO_PINS GPIO_Pin_4 uint8_t HexTable ={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’}; void USART1_S
[单片机]
高加速度条件下的时钟管理设计
引言 在高加速度环境下,由于石英晶体振荡器本身的机械特性,它在100000g的情况下,自身就有损坏的可能。而硅振荡器启动一致和快速,不像RC电路那样易受到性能欠佳问题的阻扰。标准的硅片制造和组装技术意味着,硅振荡器本身不受冲击和震动影响,也没有磨损问题。 为了降低晶振的加速度敏感度,已经开展了大量的研究工作,提出了各种改进和补偿的方法,概括起来分为两类:无源法和有源法。 无源法有选用新切型晶体、改进品体结构安装和加工工艺、双晶体配对,以及振动隔离措施等。有源法是将振动效应通过传感器、放大器反馈到振荡电路或晶体上去,包括控制变容管补偿法和控制晶体极化效应补偿法,还有通过单片机控制其电压来调节晶振的频率。而以上这些方法
[电源管理]
高加速度条件下的<font color='red'>时钟</font>源<font color='red'>管理</font>设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved