stm8s配置外部时钟详解及配置步骤

接口/时钟/PLL

49人已加入

描述

  配置STM8外部时钟(寄存器)步骤:

  1.设置外部时钟寄存器CLK_ECKR是对其写0xB4

  2.设置外部时钟分频,CLK_CKDIVR低三位是外部时钟分频系数设置

  3.使能外部时钟向CLK_ECKR写0x01

  void CLK_Init(void)

  {

  CLK_CMSR =0xB4; //使能外置高速晶体振荡器

  CLK_CKDIVR =0x03; //设置外部时钟分频

  CLK_ECKR = 0X01; //使能外部时钟寄存器

  }

  使能外部时钟后的寄存器

  STM8S

  相关函数:

  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

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分