外汇资讯

中科芯CKS32F107XX系列MCU的电源控制介绍

2026-03-26 | 分类: 外汇资讯 | 查看: 4795

MCU微课堂

CKS32F107xx电源控制介绍

第七十三期 2026.03.24

CKS32F107xx 电源系统

CKS32F107xx的工作电压(VDD)为2.0~3.6V,通过内置的电压调节器提供内核所需的1.5V电源,图1为电源系统框架。

cfab29ca-272b-11f1-90a1-92fbcf53809c.png

图1 电源系统框架

1.模拟部分供电

供电管脚是 VDDA、VSSA,主要是给 ADC温度传感器、Reset电路、PLL 模块供电,一般情况 VDDA 和 VDD 直连,VSSA 和 VSS 直连。

管脚数量100脚及以上的封装,可以外接高精度电压源作为 ADC 的参考基准源,输入管脚是 VREF+ 和 VREF-。一般情况 VREF+ 接输入外部电压源,VREF- 和 VSSA 直连。VDDA 电压范围2.4V-3.6V,VREF+ 电压范围 2.4V-VDDA。

2.数字部分供电

供电管脚是 VDD、VSS,主要是给外设电路、储存电路、ARM 内核电路等模块供电;VDD 电压范围:2.0V-3.6V。

3.备份区域供电

供电管脚是 VBAT,主要给 RTC、LSE、备份区寄存器、备份区 SRAM 供电,VBAT 可以外接电池,也可以直连 VDD,VBAT 电压范围是:1.8V-3.6V。

CKS32F107xx PVD 系统

1.CKS32F107VCT6 PVD介绍

PVD的英文全称是:Programmable Voltage Detector,即可编程电压检测器。

其原理是预先软件代码设定一个参考电压值,PVD模块监测供电电压的变化,当芯片的供电电压VDD高于或低于该基准电压时便产生PVD中断,如图2所示。

图2 PVD原理示意图

在实际应用场景中,如果出现设备电源电压异常下降或掉电的情况,PVD 检测机制可以做一些紧急的处理,比如:保存重要的用户数据、记录运行时间、或者紧急通知其他平台等等。

通过写入控制寄存器(PWR_CR)中的PLS[2:0]位用来设定PVD阈值。

d0c3317c-272b-11f1-90a1-92fbcf53809c.png

表1 PVD阈值设定表

2.CKS32F107VCT6 PVD 代码配置

void PVD_Init ( void )

{

EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE);

//打开 PWR、BKP 模块时钟

/* Configure EXTI Line to generate an interrupt on falling edge */

EXTI_ClearITPendingBit(EXTI_Line16);

EXTI_InitStructure.EXTI_Line = EXTI_Line16; //设置中断向量,PVD 中断向量对应 EXTI_Line16;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //设置 PVD 中断极性,上升沿、下降沿;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

/* NVIC configuration */

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); //设置中断优先级分组为组1

NVIC_InitStructure.NVIC_IRQChannel = PVD_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

/* Configure the PVD Level to 2.9V */

PWR_PVDLevelConfig(PWR_PVDLevel_2V9); //设定PVD阈值 2.9V;

/* Enable the PVD Output */

PWR_PVDCmd(ENABLE); //使能 PVD 模块;

}

void PVD_IRQHandler(void)

{

if(EXTI_GetITStatus(EXTI_Line16) != RESET)

{

/* Toggle LED1 */

LED2=!LED2; //做一些应急处理

/* Clear the Key Button EXTI line pending bit */

EXTI_ClearITPendingBit(EXTI_Line16);

}

}

关键词: