stm8s003_切换时钟流程分析、配置外部晶振(库函数调用)

news2025/1/10 16:15:42

1、stm8s003的时钟

复位后,默认使用内部高速时钟HSI(16MHz)的8分频,也就是2MHz.

代码开始运行,也就是运行到main函数,我们就可以修改时钟源为外部晶振。

2、切换时钟流程分析,参考官方应用手册

9.2.2,介绍了主时钟切换的流程,分为自动切换和手动切换,这里只看自动切换。

1)开启切换时钟源使能;

2)选择目标时钟源,也就是外部晶振,这一步是写到CLK_SWR,S代表选择,并不是真正的切换时钟源;

        此时SWBSY硬件置位,虽然外部晶振开启,但是旧的时钟源仍然运行;

3)等待外部晶振稳定;

4)第四步是自动硬件自动切换的,在SWBSY硬件清零之后,刚才CLK_SWR的值被硬件写入CLK_CMSR,系统切换到外部晶振;

再补充一个流程图,可以看得更清楚:

3、代码

我使用的是库函数,调用CLK_ClockSwitchConfig一句话就行。

这个函数内部我也进去看了,步骤都有,等待稳定的超时是0x491(十进制1169)个时钟周期,并且可以选择是否关掉旧的时钟;

    clk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
    if (clk_return_status != SUCCESS){          //SUCCESS or ERROR
        //开启失败的一些操作
    }

4、CLK_ClockSwitchConfig最后一个参数,是否关闭旧的时钟

疑问,如果外部晶振开启失败了,又关闭了旧的时钟,会不会不能往下运行?

验证:把外部晶振取下,模拟开启失败的情况。

现象:不管是关闭旧时钟CLK_CURRENTCLOCKSTATE_DISABLE,还是不关闭旧时钟CLK_CURRENTCLOCKSTATE_ENABLE,程序都能继续往下执行,并且时钟频率为旧的时钟频率。

注:如果在开启外部晶振前,把内部时钟的分频调成1(16MHz),那么外部晶振开启失败后时钟频率还是16MHz;

设置这个用处就是,可以先把内部时钟频率调成和外部一样的,比如分频2调成8MHz,这样即使外部晶振没有起振,程序也不会有较大的影响(可以留一个信息让自己知道外部晶振是没有成功开启的);

验证代码如下:

void main(void)
{
    u8 i;
    ErrorStatus clk_return_status;  
      
    /* Initialize I/Os in Output Mode */
    GPIO_Init(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS, GPIO_MODE_OUT_PP_LOW_FAST); 
 
    //默认8分频,内部2MHz,翻转10次,慢速
    for(i=0;i<10;i++){
        /* Toggles LEDs */
        GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
        Delay(0xffff);  
    }
    GPIO_WriteHigh(LED_GPIO_PORT,LED_GPIO_PINS);
  
    //2分频,内部8MHz
    CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
    for(i=0;i<10;i++){
        /* Toggles LEDs */
        GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
        Delay(0xffff);  
    }
    GPIO_WriteHigh(LED_GPIO_PORT,LED_GPIO_PINS); 
  
    //开启外部8MHz晶振
    clk_return_status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
    if (clk_return_status != SUCCESS){          //SUCCESS or ERROR
        //开启失败,常亮一会提示
        GPIO_WriteLow(LED_GPIO_PORT,LED_GPIO_PINS);
        for(i=0;i<30;i++){
            Delay(0xffff);
        }
    }  
    
    while (1){   
        GPIO_WriteReverse(LED_GPIO_PORT, (GPIO_Pin_TypeDef)LED_GPIO_PINS);
        Delay(0xffff);         
    } 
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/786244.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想拯救者Y9000X 2023 i9+32G+RTX4070,真香!

拯点新品&#xff01;i932GRTX4070,真香&#xff01; 联想拯救者Y9000X 2023搭载16英寸专业超竞屏&#xff0c;机身最薄处仅为17.6mm&#xff0c;轻盈即刻随行&#xff0c;让你开黑随时开始&#xff01; 高刷新率&#xff0c;高分辨率&#xff0c;广色域&#xff0c;高亮度。强…

如何有效跟踪你的计费时间?

对于自由职业者、小型企业和远程团队来说&#xff0c;时间跟踪是必需的。了解自己在单个项目或任务上投入了多少时间&#xff0c;可以帮助他们有效管理资源和优化工作流程。 然而&#xff0c;在向客户收费时&#xff0c;时间跟踪多了一层复杂性&#xff1a;不仅需要跟踪所花费…

【论文阅读】DEPIMPACT:反向传播系统依赖对攻击调查的影响(USENIX-2022)

Fang P, Gao P, Liu C, et al. Back-Propagating System Dependency Impact for Attack Investigation[C]//31st USENIX Security Symposium (USENIX Security 22). 2022: 2461-2478. 攻击调查、关键边、入口点 开源&#xff1a;GitHub - usenixsub/DepImpact 目录 1. 摘要2. 引…

re学习(23)BUUCTF 刮开有奖(中间变量的获取)

INT_PTR __stdcall DialogFunc(HWND hDlg, UINT a2, WPARAM a3, LPARAM a4) {const char *v4; // esiconst char *v5; // ediint v7[2]; // [esp8h] [ebp-20030h] BYREF 虽然看名称不连续&#xff0c;但是通过看偏移地址&#xff0c;可知&#xff0c;这些变量在内存中是连续的&…

3.python设计模式【工厂模式】

1.简单工厂模式 内容&#xff1a;不直接向客户端暴露对象创建的实现细节&#xff0c;而是通过一个工厂类来负责创建产品的实例。角色&#xff1a; 工厂角色&#xff08;creator&#xff09;抽象产品角色&#xff08;product&#xff09;具体产品角色 UML图 &#xff1a; 举个例…

Go基础快速入门

目录 一、变量相关基础语法 1、变量的定义以及赋值 2、变量的交换 3、匿名变量 4、变量的作用域 二、常量 三、基本数据类型 1、常见数据类型 2、数据类型的转换 四、运算符 五、函数 函数高级用法 函数也是一个类型 函数也是一个变量&#xff0c;也可以赋值 高…

视频监控汇聚平台EasyCVR视频监控录像的3种方式介绍

视频监控综合管理平台EasyCVR可以实现海量资源的接入、汇聚、计算、存储、处理等&#xff0c;平台具备轻量化接入能力&#xff0c;可支持多协议方式接入&#xff0c;包括主流标准协议GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Eho…

STM32MP157驱动开发——按键驱动(tasklet)

文章目录 “tasklet”机制&#xff1a;内核函数定义 tasklet使能/ 禁止 tasklet调度 tasklet删除 tasklet tasklet软中断方式的按键驱动程序(stm32mp157)tasklet使用方法&#xff1a;button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “tasklet”机制&#xff1a; …

谁说dubbo接口只能Java调用,我用Python也能轻松稿定

由于公司使用基于Java语言的Dubbo技术栈&#xff0c;而本人对Python技术栈更为熟悉。为了使不懂JAVA代码的同学也能进行Dubbo接口层的测试&#xff0c;总结一个通过python实现dubbo接口调用的实现方案。 01、实现原理 根据Dubbo官方文档中提到的&#xff1a;dubbo可以通过tel…

裂缝处理优化策略

裂缝缺陷检测:检测道路中的裂缝,无项目背景 数据:分为两类,正常、裂缝 方案介绍 数据预处理 将原始数据标签处理为两类,正常和裂缝原始图片均为320*480,使用的显卡为2080,内存足够,不进行图片大小调整模型后处理 二分类使用softmax处理,使用最大值作为结果分类效…

操作系统第五章 错题整理

5.1 设备控制器也就是IO控制器 A对于一些简单的IO设备 控制他也许用不到IO寄存器 B 只是设备控制器与CPU&#xff08;主机&#xff09;交互的接口 D 只是 接口 C 对IO控制器所接收到的CPU的信息进行译码 并送到外设中 IO逻辑是个芯片 数据通路是逻辑上的 实际上还是通过总线 …

SpringBoot复习:(2)Tomcat容器是怎么启动的?

SpringApplication的run方法包含如下代码&#xff1a; 其中调用的refreshContext代码如下&#xff1a; 其中调用的refresh方法片段如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的super.refresh方法代码如下&#xff1a; public void refresh() th…

STM32CUBUMX配置RS485(中断接收)--保姆级教程

———————————————————————————————————— ⏩ 大家好哇&#xff01;我是小光&#xff0c;嵌入式爱好者&#xff0c;一个想要成为系统架构师的大三学生。 ⏩最近在开发一个STM32H723ZGT6的板子&#xff0c;使用STM32CUBEMX做了很多驱动&#x…

python selenium爬虫自动登录实例

拷贝地址&#xff1a;python selenium爬虫自动登录实例_python selenium登录_Ustiniano的博客-CSDN博客 一、概述 我们要先安装selenium这个库&#xff0c;使用pip install selenium 命令安装&#xff0c;selenium这个库相当于机器模仿人的行为去点击浏览器上的元素&#xff0…

24 ==比较的是地址在.equals比较的是内容

public class Demo1 {public static void main(String[] args) {byte[] arr {97,98,99};String s1 new String(arr);String s2 new String(arr);System.out.println(s1s2);System.out.println(s1.equals(s2));} }

pgvector 源码分析

简介 pgvector 库是一种用于计算向量距离的库&#xff0c;它的核心是提供了聚类索引&#xff0c;棸类索引使用的算法是 kmeans&#xff08;相对于 kmeans 最主要的区别是初始化起点的位置&#xff09;。 pgvector 索引的存储结构 meta page → list page → entry page inse…

vue2和vue3关于class类的绑定以及style的绑定的区别

本篇为个人笔记 1.对于class类的绑定的区别 vue2:对于vue2而言&#xff0c;所有类的绑定都是基于对象{}来进行的 例如&#xff1a;单个类绑定 <div :class"{active:isActive}"></div> 多个类绑定&#xff1a; <div :class"{active,hasError…

CNN(卷积神经网络)的实现过程详解

概要 在图像处理领域&#xff0c;CNN(卷积神经网络)处于绝对统治地位&#xff0c;但对于CNN具体是如何用神经网络实现的&#xff0c;能找到的介绍要么是一大堆数学公式&#xff0c;要么是大段晦涩的文字说明&#xff0c;读起来很是辛苦&#xff0c;想写好一片完整的而且有深度的…

【java安全】RMI

文章目录 【java安全】RMI前言RMI的组成RMI实现Server0x01 编写一个远程接口0x02 实现该远程接口0x03 Registry注册远程对象 Client 小疑问RMI攻击 【java安全】RMI 前言 RMI全称为&#xff1a;Remote Method Invocation 远程方法调用&#xff0c;是java独立的一种机制。 RM…

软件检测报告CMA/CNAS标识加盖和不加盖的区别在哪?

在生活中&#xff0c;我们经常会听到CMA(中国计量认证)和CNAS(中国合格评定国家认可委员会)这两个标识&#xff0c;尤其在软件检测领域更是如此。那么&#xff0c;软件检测报告CMA/CNAS标识加盖和不加盖有哪些区别呢CMA和CNAS认可的软件测评机构又有什么样的好处呢?本文将为您…