当前位置: 首页 > article >正文

stm8s单片机(三)时钟系统与时钟切换

一个单片机系统要正常运行应包括四个部分: 电源,晶振,复位电路,下载电路。
晶振就是时钟。
stm8有四种时钟源

  1. HSE (High Speed External clock signal)
  2. HSE user-ext (High Speed External clock signal user external)
  3. HSI (High Speed Internal clock signal)
  4. LSI (Low Speed Internal clock signal )

HSE

由外部晶振产生,输入占空比50%的方波,三角波,正弦波,频率1~24MHZ

HSI

HSI信号由内部16MHz RC 振荡器与一个可编程分频器产生

LSI

128kHz LSI RC 时钟,低功耗,低成本的可选主时钟源

时钟安全CCS

当CPU使用HSE作为时钟源时,当HSE失效时会自动切换到HSI。

相关API

/**
  * @brief  Starts or Stops manually the clock switch execution.
  * @par Full description:
  * NewState parameter set the SWEN.
  * @param   NewState new state of SWEN, value accepted ENABLE, DISABLE.
  * @retval None
  */
void CLK_ClockSwitchCmd(FunctionalState NewState);
/**
  * @brief  configures the Switch from one clock to another
  * @param   CLK_SwitchMode select the clock switch mode.
  * It can be set of the values of @ref CLK_SwitchMode_TypeDef
  * @param   CLK_NewClock choice of the future clock.
  * It can be set of the values of @ref CLK_Source_TypeDef
  * @param   NewState Enable or Disable the Clock Switch interrupt.
  * @param   CLK_CurrentClockState current clock to switch OFF or to keep ON.
  * It can be set of the values of @ref CLK_CurrentClockState_TypeDef
  * @note LSI selected as master clock source only if LSI_EN option bit is set.
  * @retval ErrorStatus this shows the clock switch status (ERROR/SUCCESS).
  */
ErrorStatus CLK_ClockSwitchConfig(CLK_SwitchMode_TypeDef CLK_SwitchMode, CLK_Source_TypeDef CLK_NewClock, FunctionalState ITState, CLK_CurrentClockState_TypeDef CLK_CurrentClockState);

切换的步骤

A时钟源切换到B时钟源

  1. B 时钟起振
  2. 等待B时钟就绪
  3. 使能时钟切换
  4. 配置时钟切换B
  5. 等待系统不忙
  6. 关闭切换
  7. 关闭时钟源A

例子

/*******************************************************************************
**函数名称:void ClockSwitch_HSE()
**功能描述:将系统时钟切换到外部高速晶振时钟
**入口参数:无
**输出:无
*******************************************************************************/
void ClockSwitch_HSE(void)
{
  //启用外部高速晶振,外部晶振1-16MHz
 
  CLK_HSECmd(ENABLE);//使能HSE起振
  while(CLK_GetFlagStatus(CLK_FLAG_HSERDY)== RESET);  //等待HSE准备就绪
  CLK_ClockSwitchCmd(ENABLE);   //使能时钟切换
  CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO ,    //
                CLK_SOURCE_HSE ,            //选择外部16M晶振作为系统时钟源
                DISABLE ,                   //不开启时钟切换中断
                CLK_CURRENTCLOCKSTATE_ENABLE //振荡器使能
                );
  
  while(CLK_GetFlagStatus(CLK_FLAG_SWBSY) != RESET);
  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);   //如果切换成功,则设置CPU时钟为1分频,让外部16M时钟作为系统时钟
  
  CLK_ClockSwitchCmd(DISABLE);     //关闭切换
  
  CLK_HSICmd(DISABLE);    //关闭内部高速HSI
}
/*******************************************************************************
**函数名称:void ClockSwitch_LSI()
**功能描述:将系统时钟切换到内部低速晶振时钟
**入口参数:无
**输出:无
*******************************************************************************/
void ClockSwitch_LSI(void)
{
  //启用内部低速晶振,128KHz
 
  CLK_LSICmd(ENABLE);//使能LSI起振
  while(CLK_GetFlagStatus(CLK_FLAG_LSIRDY)== RESET);  //等待LSI准备就绪
  CLK_ClockSwitchCmd(ENABLE);   //使能时钟切换
  CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO ,    //
                CLK_SOURCE_LSI ,            //选择内部低速振荡器128K振作为系统时钟源
                DISABLE ,                   //不开启时钟切换中断
                CLK_CURRENTCLOCKSTATE_ENABLE //振荡器使能
                );
  
  while(CLK_GetFlagStatus(CLK_FLAG_SWBSY) != RESET);
  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);   //如果切换成功,则设置CPU时钟为1分频,让128KHZ时钟作为系统时钟
  
  CLK_ClockSwitchCmd(DISABLE);     //关闭切换
  
  CLK_HSICmd(DISABLE);    //关闭内部高速HSI
}

http://www.kler.cn/a/519425.html

相关文章:

  • 深度学习项目--基于LSTM的糖尿病预测探究(pytorch实现)
  • 从曾国藩的经历看如何打破成长中的瓶颈
  • 【电磁兼容】CE 传导骚扰
  • 0164__【GNU】gcc -O编译选项 -Og -O0 -O1 -O2 -O3 -Os
  • css-设置元素的溢出行为为可见overflow: visible;
  • 深度学习算法:从基础到实践
  • 【工具】CountUp.js
  • 国产编辑器EverEdit - 目录树
  • SSH代理實用指南
  • 【Matlab高端绘图SCI绘图模板】第003期 绘制面积填充图
  • 【AI非常道】二零二五年一月,AI非常道
  • 数据结构——概念与时间空间复杂度
  • 【Java】面试中遇到的两个排序
  • 策略模式 - 策略模式的使用
  • 【Leetcode刷题记录】18.四数之和
  • HTML5和CSS3拔高
  • mysql数据库启动出现Plugin ‘FEEDBACK‘ is disabled.问题解决记录
  • 08.OSPF 特殊区域及其他特性
  • 嵌入式音视频开发——视频篇(一)
  • 【10】如何辨别IOS AP镜像
  • Ubuntu安装GitLab
  • 解锁FPGA的故障免疫密码
  • 【软件设计师中级】-笔记缩减版本-程序设计语言基础
  • 小马模拟器-第三方全街机游戏模拟器
  • MinIO的安装与使用
  • Linux下的编译工具 —— gcc、g++