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

【沁恒蓝牙mesh】CH58x 将RTC时钟切换为LSE外部低速时钟

本文主要记录了【沁恒蓝牙mesh】CH58x 如何将RTC时钟切换为外部时钟

  • 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎
  • 📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:沁恒蓝牙mesh二次开发
    🍁
  • 💬格言:写文档啊不是写文章,重要的还是直白!🔥

1. 硬件设计

  • ·X32MO X32MI引脚外接32M时钟,作为MCU系统运行的高速时钟
  • PA11 PA10引脚外接 32.768K 时钟

关于 CH58X·时钟计算可参考我的博文:
【沁恒蓝牙mesh】CH58x系统时钟配置与计算
在这里插入图片描述

2. 软件配置

软件默认使用的是 系统内部时钟

void HAL_TimeInit(void)
{
#if(CLK_OSC32K)
    sys_safe_access_enable();
    R8_CK32K_CONFIG &= ~(RB_CLK_OSC32K_XT | RB_CLK_XT32K_PON);
    sys_safe_access_enable();
    R8_CK32K_CONFIG |= RB_CLK_INT32K_PON;
    sys_safe_access_disable();
    Lib_Calibration_LSI();
#else
    sys_safe_access_enable();
    R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
    sys_safe_access_disable();
#endif
    RTC_InitTime(2020, 1, 1, 0, 0, 0); //RTC时钟初始化当前时间
    TMOS_TimerInit(0);
}

3. 切换RTC时钟为LSE外部时钟

配置流程参考官方手册:
在这里插入图片描述

// 首先不要将PA10 PA11引脚配置为输出
sys_safe_access_enable();
//                    切换LSE           内部32K使能                开启外部晶振         
R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON |     RB_CLK_XT32K_PON;
sys_safe_access_enable();
R16_CLK_SYS_CFG |= RB_CLK_SYS_MOD;   // 32k 作为 HCLK
sys_safe_access_disable();
#include "CH58x_common.h"

void DebugInit(void)
{
    GPIOA_SetBits(GPIO_Pin_9);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeOut_PP_5mA);
    UART1_DefInit();
}
__HIGH_CODE
void test1(void){
//外部32K,需要屏蔽PA10/PA11的IO翻转(32K晶振引脚)
    sys_safe_access_enable();
    R8_CK32K_CONFIG |= RB_CLK_OSC32K_XT | RB_CLK_INT32K_PON | RB_CLK_XT32K_PON;
    sys_safe_access_enable();
    R16_CLK_SYS_CFG |= RB_CLK_SYS_MOD;
    sys_safe_access_disable();
}

__HIGH_CODE
int main()
{
    uint8_t      i;
    SetSysClock(CLK_SOURCE_PLL_60MHz);
    GPIOB_ModeCfg(GPIO_Pin_4,  GPIO_ModeOut_PP_5mA);   //设置模式 输出
    GPIOB_SetBits(GPIO_Pin_4);
    //GPIOA_ModeCfg(GPIO_Pin_10 | GPIO_Pin_11,  GPIO_ModeOut_PP_5mA); //设置模式 输出,验证内部32k作为主频时,外部32k是不工作的。
    //GPIOA_ResetBits(GPIO_Pin_10);
    //GPIOA_SetBits(GPIO_Pin_11);
    mDelaymS(3000);     //等待60M稳定
    test1();
    while(1);
}


参考:

CH573F 使用LSI时如何关闭外部晶振


http://www.kler.cn/news/148016.html

相关文章:

  • 中年人怎么发展?持续发展?
  • 牛客 算法 HJ103 Redraiment的走法 golang语言实现
  • 【brpc学习实践九】mbvar及bvar可观测
  • Web语言基础课程期末代做
  • 【git】pip install git+https://github.com/xxx/xxx替换成本地下载编译安装解决网络超时问题
  • 【开源】基于Vue和SpringBoot的企业项目合同信息系统
  • 【实验】配置用户通过IPv6方式上网
  • uni-app图片上传
  • idea打开.class文件没有反编译
  • “SRP模型+”多技术融合在生态环境脆弱性评价模型构建、时空格局演变分析与RSEI 指数的生态质量评价及拓展应用
  • Redis 面试题——持久化
  • Leetcode 2939. Maximum Xor Product
  • 问答知识库快速构建技术解析及行业实践
  • springsecurity6配置三
  • [Java][单列集合+数组遍历方法]通过Lambda表达式简化匿名内部类遍历数组学习体会
  • Python常见基础数据结构
  • 门店管理系统小程序作用是什么
  • 【git】工作中常用的命令
  • linux复习笔记05(小滴课堂)
  • FPGA模块——AD高速转换模块(并行输出转换的数据)
  • SpringBootWeb案例_01
  • RBAC(Role-Based Access Control,基于角色的访问控制)
  • 0040__浅析websocket和http的区别
  • 【解决方案】基于边缘计算技术的安科瑞综合管廊能效管理平台
  • 数据结构-01-数组
  • Node——Node.js简介
  • Python编程进阶:掌握描述符与装饰器的神奇妙用
  • 通过 python 脚本迁移 Redis 数据
  • python 输出日志到文件,删除过期文件
  • Linux 中的 ls 命令使用教程