STM8库编程笔记之时钟管理

发布者:梦中徐来最新更新时间:2016-11-07 来源: eefocus关键字:STM8  库编程  时钟管理 手机看文章 扫描二维码
随时随地手机看文章
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 时钟切换中断标志

返回值:无

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

关键字:STM8  库编程  时钟管理 引用地址:STM8库编程笔记之时钟管理

上一篇:STM8L外部中断为何死循环 寄存器操作
下一篇:SM8954A单片机在步进电机控制中的应用

推荐阅读最新更新时间:2024-03-16 15:19

STM8 内部flash
举例 typedef enum { FLASH_MEMTYPE_PROG = (u8)0x00, /*! Program memory */ FLASH_MEMTYPE_DATA = (u8)0x01 /*! Data EEPROM memory */ } FLASH_MemType_TypeDef; int main() { u32 addr = 0x4000; CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); while(1) { FLASH_Unlock(FLASH_MEMTYPE_DATA); //根据MemType填写
[单片机]
<font color='red'>STM8</font> 内部flash
利用STM8的PWM输入捕获测红外码程序
实例说明: 1、本实例是利用STM8单片机定时器TIM1的PWM输入捕获模式测量红外遥控码。 2、红外遥控码格式为NEC红外编码。 3、红外接收信号输入接PC1(TIM1输入通道1)。 4、采用外部晶振16M。 5、采用IAR FOR STM8开发环境。 6、程序代码如下: //-------------------------------------------------------------------- #include iostm8s105s4.h #define uchar unsigned char #define uint unsigned int uchar IrRecSte
[单片机]
STM8 CAN外部时钟控制寄存器
STM8 CAN外部时钟控制寄存器(CLK_CANCCR) 地址偏移值:0x0B 复位值:0x00 位7:3 保留。始终为0。 位2:0 CANDIV :外部CAN时钟分频值 由软件写入,用于指定外部CAN时钟的分频值。详情请参见章节23.9 000:外部CAN时钟=fHSE/1(复位值) 001:外部CAN时钟=fHSE/2 010:外部CAN时钟=fMASTER/4 … 111:外部CAN时钟=fMASTER/8
[单片机]
<font color='red'>STM8</font> CAN外部<font color='red'>时钟</font>控制寄存器
STM8学习笔记(一) 建立第一个工程
按照所学教程(青风电子)建立第一STM8工程,出现如下错误。 出现:Fatal Error : cannot open source file stm8s_gpio.h D:stm8testdriverled.h 16 找不到头文件。 解决:修改头文件路径。原路径为: 原路径为: $PROJ_DIR$..libinc $PROJ_DIR$..libsrc $PROJ_DIR$..user $PROJ_DIR$..\driver 修改为:$PROJ_DIR$..libinc $PROJ_DIR$libsrc $PROJ_DIR$user $PROJ_DIR$driver 因为我将工程文件建立在整个工程文件
[单片机]
<font color='red'>STM8</font>学习笔记(一) 建立第一个工程
STM8定时器实现精准延时(阻塞)
定时器选择: stm8定时器与stm32定时器略有不同,stm32定时器是24位--16,777,216,按照72M时钟8分频计算,周期达到1.86s左右,而stm8定时器是16/8--位65535/255,自身时钟为16M,即使16分频周期也远小于1s。 当前选择TIM2定时器,1分频,最大周期65536/16 约等于 4096us。 初始化 void TIM_Delay_Init() { /* 自动重装载值范围TIM4为0~255,TIM2为0~65535*/ TIM2_TimeBaseInit(TIM2_PRESCALER_1,65535); //65535*(1/16)≈4095us TIM2_Cmd(
[单片机]
STM8 全局配置寄存器(CFG_GCR)
激活级别 用户可通过对CFG_GCR寄存器中的AL位编程来配置MCU的激活级别。如何使用该位请参考 10.4活动等级/低功耗模式的控制。 禁用SWIM 在STM8 MCU复位后的默认情况下,SWIM引脚被配置为可以通过SWIM协议和外部工具通讯来对CPU 调试或对FLASH/EEPROM编程。当CFG_GCR寄存器的SWD位被置1时,SWIM引脚被配置为 普通I/O口。 全局配置寄存器(CFG_GCR)描述 地址偏移值:0x00 复位值:0x00 全局配置寄存器映射及复位值 CFG_GCR在STM8地址空间的映射如表2。 (表2:STM8 CFG_GCR寄存器映射)
[单片机]
<font color='red'>STM8</font> 全局配置寄存器(CFG_GCR)
STM8S学习笔记之四(STM8 time1)
这几天一直纠结于使用STM8库还是用底层寄存器写程序,用了用IAR和库的搭配,方便时肯定的,但是呢,鉴于我现在工作使用的就是STM32的单片机+STM32库,考虑再三,我还是用底层吧,这样两个就可以互补了,既不会太依赖于库,又对寄存器的操作有更深的了解。。只是都是相通的,是的,相通的。。 以下是从技术手册上粘贴的: TIM1由一个16位的自动装载计数器组成,它由一个可编程的预分频器驱动。 本章中使用i来代表1、2、3、4,分别对应于四个不同的捕获/比较通道。 高级控制定时器适用于许多不同的用途: ●基本的定时 ●测量输入信号的脉冲宽度(输入捕获) ●产生输出波形(输出比较
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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