首页 > 其他分享 >check_crystal_oscillator_size_in_the_code

check_crystal_oscillator_size_in_the_code

时间:2023-04-23 21:55:26浏览次数:50  
标签:code RTC rtc ticks oscillator ESP32S3 晶振 crystal 时钟

img# 如何在代码里面查看晶振的大小

目录

概述

不同晶振的类型,大小有所不同,它们适合的使用场合也有所不同。主系统时钟一般会使用大一点的晶振,这样通过倍频之后,可以轻松得到想要的主频。RTC 时钟一般使用 32.768 K 晶振。

RTC的晶振频率为什么是32768Hz?
① RTC时间是以振荡频率来计算的。故它不是一个时间器而是一个计数器。而一般的计数器都是16位的。又因为时间的准确性很重要,故震荡次数越低,时间的准确性越低。所以必定是个高次数。215 = 32768 。
② 32768 Hz = 215 即分频15次后为1Hz,周期 = 1s。
③ 经过工程师的经验总结32768 Hz,时钟最准确。
④ 规范和统一。

方案

  1. 在使用 esp32-s3deep-sleep 时,发现它默认低功耗时使用的是内部 150K 的晶振 ,这个晶振的误差比较大,不满足项目想要的 RTC 精度。于是就想要切换到外部 32.768K 的晶振上面去。

  2. 在 esp-idf 里面使用 idf.py menuconfig 进行配置。主要配置以下两个选项:

    // 定时器时钟配置
    - ESP32S3_TIME_SYSCALL_USE_RTC_FRC1 (selected)
      - ESP32S3_TIME_SYSCALL_USE_RTC
      - ESP32S3_TIME_SYSCALL_USE_FRC1
      - ESP32S3_TIME_SYSCALL_USE_NONE
          
     //时钟源配置
      - ESP32S3_RTC_CLK_SRC_INT_RC
      - ESP32S3_RTC_CLK_SRC_EXT_CRYS (selected)
      - ESP32S3_RTC_CLK_SRC_EXT_OSC
      - ESP32S3_RTC_CLK_SRC_INT_8MD256
    

  3. 代码判断晶振大小,这个主要是判断他在一个周期(1 秒)内会产生多少个 tick

    #include "soc/rtc.h"
    
    const uint64_t rtc_this_ticks_1 = rtc_time_get();
    vTaskDelay(1000 / portTICK_PERIOD_MS);
    const uint64_t rtc_this_ticks_2 = rtc_time_get();
    uint64_t rtc_this_ticks_3 =rtc_this_ticks_2 -rtc_this_ticks_1;
    printf(" %d \n", (uint32_t)(rtc_this_ticks_3&0xFFFFFFFF));
    
    // 如果是 32.768K 的话,那么打印出来就应该是 32768
    

  1. esp32-s3deep-sleep 模式,如果要使用外部 32.768K 晶振, 只能使用 RTC 慢速时钟,不能使用 RTC 快速时钟。

参考文章

  1. SOC RTC时钟——为什么实时时钟的晶振都是32.768KHZ呢?

标签:code,RTC,rtc,ticks,oscillator,ESP32S3,晶振,crystal,时钟
From: https://www.cnblogs.com/Spin-jump/p/17347883.html

相关文章

  • codeforces 559C Gerald and Giant Chess(dp+组合数学)
    题目链接:codeforces559C题目大意:给出一个h*r的矩阵,从左上角走到右下角,中间有一些点不能经过,问不同的路径有多少种?题目分析:首先我们考虑一个n*m的矩阵,从左上角只能向右或向下走能走到右下角的方案数,也就是C(n+m,n),就是一共要走n+m次,选出n次横着走。那么我们定义dp[i]表示在前不经......
  • codeforces 545C C. Woodcutters(dp+二分)
    题目链接:codeforces545C题目大意:给出一些树的位置和高度,每棵树可以砍倒,覆盖[xi−hi,xi]或者覆盖[xi,xi+hi],或者不砍倒,问最多砍倒多少棵树?题目分析:我们记录dp[i]表示选取到i棵树的时候用的最短的区间长度。每次枚举每棵树,二分到最大的不超过当前树位置的个数,然后利用当前树的信息......
  • codeforces 4D D. Mysterious Present(dp)
    题目连接:codeforces4D题目大意:给出n个信封,这n个信封有长和宽,给出卡片的尺寸,求取能够装入卡片的最长的序列,序列满足后一个的长和宽一定大于前一个,求最长的这个序列的长度,并且给出一组可行解。题目分析:一看这种题目就是dp的题目,状态定义dp[i]为以i结尾的序列的最大的长度,并且利用一......
  • codeforces 2B B. The least round way(dp+数论)
    题目链接:codeforces2B题目大意:给出一个n*n的矩阵,从左上角走到右下角,只能向右或向下走,问路径上的数之积末尾0最少的方案是什么。题目分析:首先我们要做两个预处理,处理出每个位置上的数包含多少个2的质因子和多少个5这个质因子然后我们统计路径上弄到最少的2的方案数和最少的5的方案......
  • codeforces 126B B. Password(kmp+dp)
    题目链接:codeforces126B题目大意:给出一个字符串,找出一个子串既是它的前缀,也是它的后缀,还是一个非后缀也非前缀的子串。题目分析:本来挺简单的一个题,最开始想复杂了,还用了后缀数组,醉了。这个题主要用的是kmp的next数组,首先我们要了解next数组的定义,next[i]表示以i为末尾的子串的后缀......
  • codeforces 118D D. Caesar's Legions(dp)
    题目链接:codeforces118D题目大意:给出n1个1,n2个2,给出k1和k2代表连续的1和2的最大长度,问能够构造的合法的不同串的数量。题目分析:能够递推,所以想到能够利用dp做。首先我们定义状态,dp[i][j][k][2]代表以1或2结尾,结尾相同的元素的数量为k,1的总数是j的当前序列长度为i的串的数量。首先......
  • codeforces 264B B. Good Sequences(dp+数论)
    题目链接:codeforces264B题目大意:给出n个数,利用这n个数构造一个好的序列,好的序列是单调增的,而且序列中相邻的两个元素都不互质,问最长的好序列的长度是多少。题目分析:首先我们定义状态dp[i]表示当前的数进行构造的序列末尾的数的质因数包含i的时候的最长的情况。然后我们从小到大枚......
  • codeforces 159D D. Palindrome pairs( manacher+dp )
    题目链接:codeforces159D题目大意:给出一个字符出,求取这个字符串中互相不覆盖的两个回文子串的对数。题目分析:首先能够用manacher模板,因为这个算法处理的字符串的长度式奇数,所以我们首先将原字符串拓展,也就是用一个没有出现过的子串填充到每两个字符之间,首位也要添加,这样处理后得到......
  • codeforces 359B B. Permutation(简单构造)
    题目链接:codeforces359B题目大意:给出n和k,要求构造一个长度为2*n的排列,满足如下的式子:∑i=1n|a2∗i−1−a2∗i|−|∑i=1na2∗i−1−a2∗i|=2∗k题目分析:首先最终构造的2*k一定是小于n的偶数,如果我们直接放入自然数的排列,结果是0,我们将2*i-1和2*i分为一组,每次调换组内位置(每组只能......
  • codeforces 505B B. Mr. Kitayuta's Colorful Graph(bfs)
    题目链接:codeforces505B题目大意:给出一个有向图,边有不同的颜色,任意给出查询,查询两点能够只通过一种颜色连通的颜色的种类数。题目分析:根据不同颜色建边,bfs即可,队列维护可用的点。AC代码:#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<alg......