iot-fan

联系: iotfan123#163.com
注意:
1,本博客之内容来源于网上收集以及相关技术人员提供,如果有侵犯到您的权益,请电邮我沟通;
2,本博客之内容乃分享,交流,学习,研究之目的,作者不对内容的真实性,有效性,及时性负责,也不对因本博客的任何内容导致的任何后果负责;
3,本博客之内容禁止转发到CSDN网站,转到别的网站请保留出处.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

1前言

1.1 文章约定

  • RTC 为可低功耗下运行的定时器
  • 32K晶体 芯片外部RTC时钟源,通常是32.768Khz的晶体
  • 32KRC 表示芯片内部的RTC时钟源,可校准到32.000Khz,亦或者32.768Khz
  • CLK_OSC32K 为WCH的蓝牙工程中,RTC的时钟源的宏定义

2适用的芯片

  • ch579/ch578/ch577
  • ch573/ch571/ch58x/ch59x
  • ch32v208/ch32f208

3在ch573/ch58x_gen1平台上

CLK_OSC32K RTC时钟源 RTC时钟频率 TMOS时钟源 BLE时钟源 动态低功耗(注1) 备注
0x00 32K晶体 32.768KHZ RTC RTC 可以
0x01 32KRC(校准到32KHZ) 32KHZ RTC RTC 可以 不建议BLE主机使用
0x02 32KRC(校准到32.768K) 32.768KHZ RTC RTC 可以 不建议BLE主机使用
0x80 32K晶体 32.768KHZ RTC 高频时钟(注2) 不可以
0x81 32KRC(校准到32KHZ) 32KHZ RTC 高频时钟 不可以
0x82 32KRC(校准到32.768K) 32.768KHZ RTC 高频时钟 不可以
  • 注1:所谓动态低功耗,即为在蓝牙运行的同时可以高频次的进行睡眠唤醒自行调度,这依赖低功耗下的高精度定时器
  • 注2:当BLE时钟源为高频时钟时,对tmos的时钟没有特别要求情况下,可以禁用内部RC的校准代码来节省一定的flash和ram空间

4在ch32v208/ch32f208/ch59x/ch58x_gen2平台上

4.1 CLK_OSC32K的说明

CLK_OSC32K RTC时钟源 RTC时钟频率 TMOS时钟源 BLE时钟源 动态低功耗 备注
0x00 32K晶体 16.384KHZ RTC RTC 可以
0x01 32KRC(校准到32KHZ) 16KHZ RTC RTC 可以 不建议BLE主机使用
0x02 32KRC(校准到32.768K) 16.384KHZ RTC RTC 可以 不建议BLE主机使用
\ (注1) \ \ 高频时钟 高频时钟 不可以
  • 注1:ch32v208/ch32f208的蓝牙在不开启动态低功耗情况下,可以完全脱离低频时钟运行,RTC可以完全由用户控制,详见4.2

4.2 TMOS和BLE完全不用RTC

1,蓝牙和tmos的时钟可以完全不用rtc:
先把宏改成 CLK_OSC32K = 0,选0不开启内部低频RC的定时校准
2,然后可以完全注释掉RTC.c 里HAL_TimeInit函数里面的RTC部分的代码

void HAL_TimeInit(void)
{
   //此之前的代码可以完全注释掉

   //TMOS_TimerInit( RTC_GetCounter );
   //传入NULL,使用HSE做BLE和tmos的时钟,不可做动态低功耗
   TMOS_TimerInit( NULL );
}

5在ch579/ch578平台上

CLK_OSC32K RTC时钟源 RTC时钟频率 TMOS时钟源 BLE时钟源 动态低功耗 备注
0x00 外部低频时钟 32.768KHZ RTC RTC 可以
0x01 内部RC(校准到32KHZ) 32KHZ RTC RTC 可以 不建议BLE主机使用
0x02 内部RC(校准到32.768K) 32.768KHZ RTC RTC 可以 不建议BLE主机使用

6配合抢占式操作系统运行

  • 是能HAL_SLEEP=TRUE, 利用睡眠函数和RTC中断进行上下文切换
posted on 2023-08-04 09:57  iot-fan  阅读(613)  评论(0编辑  收藏  举报