MCU微课堂
CKS32F107xx电源控制介绍
第七十三期 2026.03.24
CKS32F107xx 电源系统
CKS32F107xx的工作电压(VDD)为2.0~3.6V,通过内置的电压调节器提供内核所需的1.5V电源,图1为电源系统框架。

图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阈值。

表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);
}
}
全部0条评论
快来发表一下你的评论吧 !