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

描述

MCU微课堂

CKS32F107xx电源控制介绍

第七十三期 2026.03.24

CKS32F107xx 电源系统

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

adc

图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所示。 

adc

图2 PVD原理示意图

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

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

adc

表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);

  }

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分