历史上的今天
返回首页

历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | STM8库编程笔记之时钟管理

2021-10-19 来源:eefocus

库函数学习笔记之

相关函数:

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

返回值:无

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


推荐阅读

史海拾趣

CALMIRCO公司的发展小趣事

CALMIRCO公司深知合作共赢的重要性,因此积极与上下游企业建立紧密的合作伙伴关系。公司与多家知名芯片制造商、电子设备生产商等建立了长期稳定的合作关系,共同推动产业链的发展。通过资源共享、技术互补等方式,CALMIRCO公司与合作伙伴实现了共赢发展,共同提升了行业竞争力。

爱普特半导体(APTSEMI)公司的发展小趣事

随着国产芯片产业的快速发展,人才短缺问题日益凸显。爱普特半导体深知人才是企业发展的核心资源,因此,公司积极构建高端半导体人才队伍。通过引进国内外优秀人才、加强内部培训、建立激励机制等多种措施,爱普特成功打造了一支技术过硬、经验丰富的研发团队。这支团队为公司的技术创新和产品研发提供了有力保障,推动了公司的快速发展。

Devar Inc公司的发展小趣事

可穿戴设备市场近年来持续增长,Devar Inc公司也积极布局这一领域。公司研发了一系列具有创新性的可穿戴设备,如智能手环、智能眼镜等。这些设备不仅具备健康监测、运动记录等基本功能,还集成了Devar的AI技术,能够为用户提供更加个性化的服务。例如,智能手环可以根据用户的运动习惯和健康数据,为用户提供定制化的运动计划和健康建议。

Charcroft Electronics Ltd公司的发展小趣事

随着产品线的不断丰富和技术实力的提升,Charcroft Electronics Ltd公司开始积极拓展国内外市场。公司加强与国际知名企业的合作,通过参加国际电子展会、举办技术研讨会等方式,提升品牌知名度和影响力。同时,公司还针对不同地区的市场需求,推出定制化的产品和服务,进一步巩固和扩大市场份额。

地博电子(DIBO)公司的发展小趣事

为了进一步拓展市场,地博电子在2016年成立了湖南地博光学材料有限公司,并建立了覆盖全国的营销网络。这一举措使得地博电子的产品能够更快速地触达目标客户,提高了市场占有率和品牌影响力。同时,全国营销网络的建立也为地博电子的未来发展提供了更广阔的空间。

DESIGNERSYSTEMS公司的发展小趣事

DESIGNERSYSTEMS公司深知,优质的服务是企业赢得客户的关键。他们始终坚持客户至上的原则,为客户提供从咨询、设计到生产、售后的一站式服务。无论客户遇到什么问题,DESIGNERSYSTEMS都能够迅速响应并提供有效的解决方案。这种优质的服务赢得了客户的广泛赞誉和口碑传播,为DESIGNERSYSTEMS在电子行业中树立了良好的形象。

问答坊 | AI 解惑

常用液位物位测量仪表原理和特点

常用于测量液位的液位计有连通器式、吹泡式、差压式、电容式等,测量物位的有超声波物位计和放射性物位计等。其原理和特点如下:     a.连通器式就是应用最普通的玻璃液位计,它的特点是结构简单、价廉、直观,适于现场使用,但易破损, ...…

查看全部问答>

AT89S51编程软件

AT89S51编程软件,希望对大家有用!…

查看全部问答>

DIY显卡:软件部分活动创意征集~~~

这个活动中版主已有主要部分:nand驱动、jpeg解码、usb-storage调试,目前需要完成的工作有 1、将以上部分整合 有了vga显示器,各种好玩的东西都可以编程~~~~~版主写了画点,设置光标功能,还可以加入扩展: 2、键盘接口 3、快速画线 4 ...…

查看全部问答>

基于小波变换的频谱细化分析方法

基于小波变换的频谱细化分析方法…

查看全部问答>

第一次调用驱动,interruptible_sleep_on过不去怎么办?

我在调试一个语音驱动,语音codec是cp1306 在open函数中我申请了DMA通道,在read/write函数中等待interruptible_sleep_on(&ssi_rwait); 在DMA完成中,wake_up_interruptible(&ssi_rwait); 结果我第一次调用read/write函数时候,程序就停在interr ...…

查看全部问答>

一致性测试的共性问题

一致性测试(compliance test)是PC行业为了满足PC的大规模生产所必须的、遵循相关电性能指标的step by step的测试。以上是我个人对一致性测试的定义。一致性测试的终极目的本不是为了产生测试报告,而是为了确保产品的一些关键接口的电性能指标满 ...…

查看全部问答>

AD采样经典的电路

有高手知道AD采样时候用的经典滤波电路的工作原理吗?…

查看全部问答>

stm8L151,152应该买什么样的编程器和调试器?

貌似STM8L151芯片大家用得不多啊,好多商家没货.也不知道为什么? 不知道用STM8L151,152应该买什么样的编程器和调试器?…

查看全部问答>

ADE7758数据手册中文初稿

ADE7758数据手册中文初稿,三相电能表计量芯片详细解说 [ 本帖最后由 aishuang 于 2011-7-17 17:06 编辑 ]…

查看全部问答>

昨天下午去参加了海康威视的研讨会

海康威视太垃圾了,说好的晚餐没有了。 …

查看全部问答>