CW32L083不同主频功耗测试

news2024/12/23 22:51:38

本文主要介绍CWL083VCT6芯片在不同主频下的功耗测试方法和测试结果。

1.HSIOSC时钟

HSIOSC 时钟由内部 RC 振荡器产生,不需要外部电路,比 HSE 时钟的成本低,启动速度快。HSIOSC 时钟频率固定为 48MHz,频率精度低于 HSE 时钟。RC 振荡器输出时钟的频率受芯片加工过程、工作电压、环境温度等因素影响,CW32L083 提供了 HSIOSC 时钟频率校准功能,用户可通过设置内置高频时钟控制寄存器 SYSCTRL_HSI 的 TRIM 位域值来校准 HSIOSC 时钟频率,HSIOSC 内部高速 RC 振荡器在芯片上电后,默认处于开启状态,用户可通过设置系统控制寄存器的 SYSCTRL_CR1 的HSIEN 位域为 0 来关闭。如用户停止并重新启动了 HSIOSC 振荡器,可通过内置高频时钟控制寄存器 SYSCTRL_HSI的 STABLE 标志位来确定 HSI 时钟是否稳定,STABLE 标志为 1 表示 HSIOSC 时钟已稳定,为 0 则表示 HSIOSC 时钟还未稳定。

HSIOSC 时钟经过分频后输出 HSI 时钟,分频系数通过内置高频时钟控制寄存器 SYSCTRL_HSI 的 DIV 位域设置,有效分频系数为 1、2、4、6、8、10、12、14、16,上电后默认值为 6,所以 HSI 时钟默认频率为 8MHz。

2.PLL时钟

CW32L083 内部集成锁相环 PLL 电路,可对输入时钟源进行锁相倍频输出 PLL 时钟。用户可通过内置锁相环控制寄存器 SYSCTRL_PLL 的 SOURCE 位域选择 PLL 的输入参考时钟源,如下表所示

锁相环倍频系数通过内置锁相环控制寄存器 SYSCTRL_PLL 的 MUL 位域进行设置,可设置范围为 2 ~ 12,默认值 为 8。为保证锁相环的锁定收敛速度及输出时钟相噪性能,用户需根据实际的输入参考时钟频率和输出时钟频率分别设置 SYSCTRL_PLL.FREQIN 和 SYSCTRL_PLL.FREQOUT 位域的值。

 

 

 

PLL 默认处于关闭状态,通过设置系统控制寄存器 SYSCTRL_CR1 的 PLLEN 位域为 1 来启动。PLL 启动后,芯片 内部时钟监控模块检测到一定数量的 PLL 时钟信号,则认为 PLL 时钟已稳定。检测时钟数量可通过内置锁相环控制寄存器 SYSCTRL_PLL 的 WAITCYCLE 位域进行设置,通过内置锁相环控制寄存器 SYSCTRL_PLL 的 STABLE 标志位,可确定 PLL 时钟是否稳定,STABLE 标志为 1 表 示 PLL 时钟已稳定,为 0 则表示 PLL 时钟还未稳定。

修改 PLL 参数流程如下: 

步骤 1:设置 SYSCTRL_CR1.PLLEN 为 0,关闭 PLL; 

步骤 2:等待 SYSCTRL_PLL.STABLE 标志被系统硬件清零; 

步骤 3:更改 PLL 的参数; 

步骤 4:设置 SYSCTRL_CR1.PLLEN 为 1,启动 PLL; 

步骤 5:等待 SYSCTRL_PLL.STABLE 标志被系统硬件置 1,标识 PLL 时钟已稳定。

3.实例演示

通过按键KEY1中断调节运行主频(4M/12M/24M/48M/64M),LCD显示对应数字。

(1)初始化GPIO

void GPIO_Configuration(void)

{

    GPIO_InitTypeDef GPIO_InitStruct = {0};

__RCC_GPIOA_CLK_ENABLE();

    GPIO_InitStruct.IT = GPIO_IT_FALLING; //KEY1 -- PA04     

    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

    GPIO_InitStruct.Pins = GPIO_PIN_4;

    GPIO_Init(CW_GPIOA, &GPIO_InitStruct);

    GPIO_ConfigFilter(CW_GPIOA, bv4, GPIO_FLTCLK_LSI);

}

(2)GPIO中断控制函数

void GPIOA_IRQHandlerCallback(void)

{

if(CW_GPIOA->ISR_f.PIN4)

    {

        GPIOA_INTFLAG_CLR(bv4);

        Key1Count++;

switch(Key1Count)

        {

            case 1:

                CW_LCD->RAM0 = 0x0603;//4

RCC_HSI_Enable(RCC_HSIOSC_DIV12);

RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 4MHz

RCC_PLL_Disable(); //关闭PLL

                break;

            case 2:

                CW_LCD->RAM0 = 0x030e0005;//12

RCC_HSI_Enable(RCC_HSIOSC_DIV4);

                break;

            case 3:

                CW_LCD->RAM0 = 0x0603030e;//24

RCC_HSI_Enable(RCC_HSIOSC_DIV2);

                break;

            case 4:

                CW_LCD->RAM0 = 0x0f0f0603;//48

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 8MHz

RCC_PLL_Disable(); //关闭PLL

FLASH_SetLatency(FLASH_Latency_2); 

//频率大于24M需要配置FlashWait=2

CW_SYSCTRL->AHBEN_f.FLASH = 0; //关闭FLASH时钟

RCC_HSI_Enable(RCC_HSIOSC_DIV1);

RCC_SysClk_Switch(RCC_SYSCLKSRC_HSI); //切换系统时钟到HSI 48MHz

                break;

            case 5:

                CW_LCD->RAM0 = 0x0603050f;//64

RCC_HSI_Enable(RCC_HSIOSC_DIV6);

RCC_PLL_Enable(RCC_PLLSOURCE_HSI, 8000000, RCC_PLL_MUL_8); 

//开启PLL,PLL源为HSI 8MHz

                FLASH_SetLatency(FLASH_Latency_3); 

//频率大于48M需要配置FlashWait=3

CW_SYSCTRL->AHBEN_f.FLASH = 0; //关闭FLASH时钟

                RCC_SysClk_Switch(RCC_SYSCLKSRC_PLL); //切换系统时钟到PLL

                break;

            case 6:

                CW_LCD->RAM0 = 0;

                CW_LCD->RAM1 = 0;

                CW_LCD->RAM8 = 0;

                CW_LCD->RAM9 = 0;

                Key1Count = 0;

                break;

        }

    }

}

(3)初始化LCD

void LCD_Configuration(void)

{

    LCD_InitTypeDef LCD_InitStruct = {0};

    LCD_InitStruct.LCD_Bias = LCD_Bias_1_3;

    LCD_InitStruct.LCD_ClockSource = LCD_CLOCK_SOURCE_LSI;

    LCD_InitStruct.LCD_Duty = LCD_Duty_1_4;

    LCD_InitStruct.LCD_ScanFreq = LCD_SCAN_FREQ_256HZ;

    LCD_InitStruct.LCD_VoltageSource = LCD_VoltageSource_Internal;

    __RCC_LCD_CLK_ENABLE();

    RCC_LSI_Enable(); //启动LSI为LCD提供时钟

LCD_Init(&LCD_InitStruct); //基本配置

LCD_COMConfig(LCD_COM0 | LCD_COM1 | LCD_COM2 | LCD_COM3, ENABLE); //SEG    

LCD_SEG0to23Config(LCD_SEG0 | LCD_SEG1 | LCD_SEG2 | LCD_SEG3 | LCD_SEG4 | LCD_SEG5 | LCD_SEG6 | LCD_SEG7, ENABLE);

LCD_SEG32to55Config(LCD_SEG32 | LCD_SEG33 | LCD_SEG34 | LCD_SEG35 | LCD_SEG36 | LCD_SEG37 | LCD_SEG38 | LCD_SEG39, ENABLE);

LCD_ContrastConfig(LCD_Contrast_Level_2); //显示对比度,仅内部电阻模式时有效

LCD_DriveVoltageConfig(LCD_INRS_LEVEL_0); //功耗最小

CW_LCD->RAM0 = 0x0f0f;

LCD_Cmd(ENABLE);

}

(4)配置嵌套的矢量中断控制器

void NVIC_Configuration(void)

{

    __disable_irq();

    NVIC_SetPriority(GPIOA_IRQn, 0);

    NVIC_EnableIRQ(GPIOA_IRQn);

    __enable_irq();

}        

(5)主函数

int32_t main(void)

{

RCC_HSI_Enable(RCC_HSIOSC_DIV6);    

GPIO_Configuration();

    LCD_Configuration();

    NVIC_Configuration();

    while(1){}

}  

4.测试结果

将电流表串接在单板J23跳线上,单板上电,默认主频为8MHz然后通过KEY1按键,控制主频在4 MHz -12 MHz -24 MHz -48 MHz -64 MHz之间进行切换,记录不同主频下的电流值,如下:

 

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

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

相关文章

《计算机系统与网络安全》 第二章 计算机网络基础与TCPIP协议安全性

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

苹果app用发布证书打包后怎么装手机测试

一、背景 iOS 的开发证书打包后可以通过爱思助手安装到手机上测试,但发布 (Production) 证书是不允许安装在手机上的。而在实际开发过程中,尽管通过开发证书测试过了,iOS生产包仍然可能会出现一些问题,需对生产包也进行测试。 而…

【Stable diffusion教程】AutoDL云部署超详细步骤说明【外婆都会】

1 AutoDL云端部署操作流程 1.1 登录/注册 官网:https://www.autodl.com/home,点击右上角登录/注册。此处我已经注册了 如果你是学生的话,注册完之后,进入控制台,在右上角点一下学生认证,然后你就可以享受…

23.6.24

1、grep:查找字符串 grep 字符串 文件名 -w:按单词查找 -R:实现递归查找,主要用于路径是目录的情况 -i:不区分大小写 -n:显示行号 grep -w "^ubuntu" /etc/passwd ---->查找以ubuntu单词作为开头位置的所在行 grep -w "ubuntu$"…

html简单实现b站评论回车发布

头像&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wi…

Linux系统:进程概念

文章目录 1 操作系统1.1 概念1.2设计操作系统的目的 2进程2.1 进程是什么2.2 如何管理进程2.2查看进程2.3 程序中获取自己的pid2.4 创建一个进程2.5 进程状态2.6 进程优先级2.6.1为什么要有优先级2.6.2 什么是优先级2.6.3 linux下优先级的做法 2.8 其他概念 3进程地址空间3.1 初…

基于Docker环境下的Jenkins搭建及使用

目录 前言&#xff1a; Docker下安装Jenkins 启动Jenkins Jenkins插件下载 配置Jenkins 修改Jenkins时间 配置Python3环境 配置HTML报告/Allure报告 Allure报告配置 简单使用-实例构建 参数化构建 构建后操作 配置成功 控制台输出 Allure报告查看 HTML报告查看 前言&#xff1a…

macOS上下载安装Kibana并连接ES

下载Kibana 执行以下命令进行&#xff0c;版本号根据你所用的ES版本选择&#xff0c;比如我的是7.10.0 curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-darwin-x86_64.tar.gz解压安装Kibana tar -zxvf kibana-7.10.0-darwin-x86_64.tar.gz进行config…

Visual modflow Flex地下水数值模拟

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理 [1] 直接模型建模的操…

【信号】信号处理与进程通信:快速上手

目录 0. 信号概述 1. 产生信号的方式&#xff1a; 1.1 当用户按某些终端键时&#xff0c;将产生信号。 1.2 硬件异常将产生信号。 1.3 软件异常将产生信号。 1.4 调用kill函数将发送信号。 1.5 运行kill命令将发送信号。 2. 信号的默认&#xff08;缺省&#xff09;处理…

用for循环----输出0-999的水仙数

输出0-999的水仙数 水仙算法&#xff1a;一个数它各位的立方和&#xff0c; 例如&#xff1a;1531*1*15*5*53*3*3 提示&#xff1a;for循环&#xff0c;求余数(%)取整&#xff08;/&#xff09;运算符。 答案&#xff1a; 代码如下&#xff1a; #include <stdio.h> …

物理备份xtrabackup

物理备份xtrabackup Xtrabackup 是一个开源的免费的热备工具&#xff0c;在 Xtrabackup 包中主要有 Xtrabackup 和innobackupex 两个工具。其中Xtrabackup 只能备份 InnoDB 和 XtraDB 两种引擎; innobackupex则是封装了Xtrabackup&#xff0c;同时增加了备份MyISAM引擎的功能。…

STM32开发——智能小车(循迹、避障、测速)

目录 1.循迹小车 1.1CubeMX配置 1.2函数代码 2.避障小车 3.小车测速 1.循迹小车 需求&#xff1a;用左右轮实现PWM调速、红外传感器获取道路信息改变方向。 左边红外D0——PB12 右边红外D0——PB13 1.1CubeMX配置 1.2函数代码 motor.c代码 #include "gpio.h"…

TCP三挥四握

TCP三挥四握 TCP最关键的三个步骤&#xff1a;建立连接、数据传输、释放连接&#xff0c;这里的三次握手实现的是服务端和客户端建立连接&#xff1b;四次握手实现的是服务端和客户端释放连接。 三次握手&#xff1a; 建立数据连接 TCP连接需要三次握手的原因&#xff1a; 三次…

【Free】基于主从博弈的主动配电网阻塞管理

目录 1 主要内容 程序亮点 2 部分代码 3 程序结果 4 下载链接 1 主要内容 《基于主从博弈的主动配电网阻塞管理》文献介绍&#xff1a;主要采用一种配电网节点边际电价统一出清的主从博弈双层调度框架。上层框架解决用户在负荷聚合商引导下的用电成本最小化问题&#xff0…

力扣题库刷题笔记18--四数之和

1、题目如下&#xff1a; 2、个人Python代码实现&#xff1a; 首先看到这题就会想到两种方式&#xff0c;一是四层循环暴力破解&#xff0c;二就是基于前面的三数之和外面加加一层嵌套。 先看一下暴力破解&#xff1a; 这里可以看到&#xff0c;当数据量足够大时&#xff0c;依…

Openresty原理概念篇(十)为什么 lua-resty-core 性能更高一些

一 为什么 lua-resty-core 性能更高一些 ① 回顾 lua-resty-core和lua-nginx-module各自都有哪些API? --> 看下面两个仓库的文档 lua-nginx-module lua-resty-core 下面&#xff1a;一起看下Lua C API和FFI 的实现有何不同之处,这样可以对它们的性能有个直观认识…

14. python从入门到精通——GUI编程

目录 常用的GUI框架 wxPython&#xff1a;比较常用 PyQt6&#xff1a;比较常用 Kivy Flexx Tkinter 安装PyQt5 要开发PyQt5程序需要安装三个模块&#xff1a; 安装命令&#xff1a; 安装 安装命令&#xff1a; window安装&#xff1a; PyCharm软件安装&#xff1a…

Android跳转具体应用权限管理,三种方式

背景&#xff1a;Android越来越安全合规&#xff0c;在应用里&#xff0c;需要给用户所有可选择和取消的明确方式。 比如&#xff1a;设置了权限&#xff0c;也要给用户关闭权限的入口。被要求在应用的设置里&#xff0c;提供权限管理入口。 解决方式有三&#xff1a; 方式一…

ansible实训-Day2(ansible基本问题及部署安装)

一、前言 该篇是对ansible实训第二天内容的归纳总结&#xff0c;主要包括ansible的一些基本问题以及ansible的部署安装。 二、理论部分 Q1&#xff1a;什么是ansible Ansible是一种自动化IT工具&#xff0c;它可以帮助管理和自动化IT基础架构。使用Ansible&#xff0c;管理员…