跳过正文

ch32v00x_pwr.h

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 14: 本文

描述
#

该文件包含电源管理(PWR)固件库的所有函数原型、常量定义和寄存器操作接口,用于配置低功耗模式、电源电压检测(PVD)、自动唤醒(AWU)等功能。该库专为CH32V00x系列微控制器设计,通过操作PWR外设寄存器实现系统功耗优化,适用于电池供电、待机唤醒、电压监控等应用场景。所有常量均以PWR_为前缀,确保命名空间清晰,避免与其它外设冲突。

常量
#

PVD_detection_level
#

电源电压检测(PVD)阈值电平配置,用于设定当电源电压低于指定阈值时触发中断或标志的电压等级。该功能常用于系统监控,防止在电压过低时发生异常行为(如数据丢失或逻辑错误)。实际阈值对应芯片内部比较器的校准值,用户可通过宏定义直接选择标准电压点,无需手动计算寄存器位。

名称 简述
PWR_PVDLevel_MODE0 0x00000000 PVD检测电平设置为模式0
PWR_PVDLevel_MODE1 0x00000020 PVD检测电平设置为模式1
PWR_PVDLevel_MODE2 0x00000040 PVD检测电平设置为模式2
PWR_PVDLevel_MODE3 0x00000060 PVD检测电平设置为模式3
PWR_PVDLevel_MODE4 0x00000080 PVD检测电平设置为模式4
PWR_PVDLevel_MODE5 0x000000A0 PVD检测电平设置为模式5
PWR_PVDLevel_MODE6 0x000000C0 PVD检测电平设置为模式6
PWR_PVDLevel_MODE7 0x000000E0 PVD检测电平设置为模式7
PWR_PVDLevel_2V9 PWR_PVDLevel_MODE0 2.9V检测阈值(推荐用于3.3V系统)
PWR_PVDLevel_3V1 PWR_PVDLevel_MODE1 3.1V检测阈值
PWR_PVDLevel_3V3 PWR_PVDLevel_MODE2 3.3V检测阈值(典型工作电压)
PWR_PVDLevel_3V5 PWR_PVDLevel_MODE3 3.5V检测阈值
PWR_PVDLevel_3V7 PWR_PVDLevel_MODE4 3.7V检测阈值
PWR_PVDLevel_3V9 PWR_PVDLevel_MODE5 3.9V检测阈值
PWR_PVDLevel_4V1 PWR_PVDLevel_MODE6 4.1V检测阈值
PWR_PVDLevel_4V4 PWR_PVDLevel_MODE7 4.4V检测阈值

以上所有值均强制转换为uint32_t,并写入PWR_CTLR寄存器的[6:4]位(PLS字段),实现电压阈值选择。

PWR_AWU_Prescaler
#

自动唤醒单元(AWU)的时钟预分频系数,用于控制AWU计数器的时钟源(LSI)分频倍数,从而决定唤醒周期的长短。LSI(低速内部时钟)典型频率为40kHz,通过不同分频可实现从毫秒级到数秒级的精确唤醒间隔,适用于低功耗定时唤醒、周期性采样等场景。

名称 简述
PWR_AWU_Prescaler_1 0x00000000 AWU计数器时钟 = LSI/1
PWR_AWU_Prescaler_2 0x00000002 AWU计数器时钟 = LSI/2
PWR_AWU_Prescaler_4 0x00000003 AWU计数器时钟 = LSI/4
PWR_AWU_Prescaler_8 0x00000004 AWU计数器时钟 = LSI/8
PWR_AWU_Prescaler_16 0x00000005 AWU计数器时钟 = LSI/16
PWR_AWU_Prescaler_32 0x00000006 AWU计数器时钟 = LSI/32
PWR_AWU_Prescaler_64 0x00000007 AWU计数器时钟 = LSI/64
PWR_AWU_Prescaler_128 0x00000008 AWU计数器时钟 = LSI/128
PWR_AWU_Prescaler_256 0x00000009 AWU计数器时钟 = LSI/256
PWR_AWU_Prescaler_512 0x0000000A AWU计数器时钟 = LSI/512
PWR_AWU_Prescaler_1024 0x0000000B AWU计数器时钟 = LSI/1024
PWR_AWU_Prescaler_2048 0x0000000C AWU计数器时钟 = LSI/2048
PWR_AWU_Prescaler_4096 0x0000000D AWU计数器时钟 = LSI/4096
PWR_AWU_Prescaler_10240 0x0000000E AWU计数器时钟 = LSI/10240
PWR_AWU_Prescaler_61440 0x0000000F AWU计数器时钟 = LSI/61440

以上所有值均强制转换为uint32_t,写入AWUPSC寄存器的[3:0]位,实现分频配置。

STOP_mode_entry
#

进入待机(STANDBY)模式时使用的唤醒指令选择。该配置决定系统在进入低功耗待机后,是通过等待中断(WFI)还是等待事件(WFE)来恢复运行。WFI更适用于常规中断唤醒,WFE则适合与事件(如外部引脚变化、RTC闹钟等)配合使用,提升唤醒响应的灵活性。

名称 简述
PWR_STANDBYEntry_WFI 0x01 使用WFI指令进入待机模式
PWR_STANDBYEntry_WFE 0x02 使用WFE指令进入待机模式

PWR_Flag
#

PWR外设状态标志位,用于查询电源管理模块的当前状态。目前仅定义一个标志位,用于检测PVD的输出状态,可配合中断或轮询机制实现电压异常告警。

名称 简述
PWR_FLAG_PVDO 0x00000004 PVD输出标志位(在CSR寄存器中)

以上所有值均强制转换为uint32_t,用于与PWR_CSR寄存器进行位掩码比较。

枚举
#

结构体
#

函数
#

PWR_DeInit
#

void PWR_DeInit(void)
将PWR外设的所有寄存器恢复为复位默认值。通过复位APB1总线上的PWR模块实现,而非逐位写入,确保所有配置(PVD、AWU、待机模式等)被彻底清除,适用于系统初始化或异常恢复场景。

参数:

返回值:

实现原理:调用RCC_APB1PeriphResetCmd()对PWR模块进行软复位,先使能复位再关闭,等效于硬件上电复位。


PWR_PVDCmd
#

void PWR_PVDCmd(FunctionalState NewState)
启用或禁用电源电压检测(PVD)功能。当启用时,芯片会持续监控VDD电压,当电压低于设定阈值时,PVD_FLAG被置位,可触发中断或用于软件判断。禁用后,PVD功能关闭,节省少量功耗。

参数:

名称 类型 简述
NewState FunctionalState ENABLE(启用)或 DISABLE(禁用)

返回值:

该函数直接操作PWR_CTLR寄存器的第4位(PVDEN),是低功耗系统中实现电压保护的关键接口。


PWR_PVDLevelConfig
#

void PWR_PVDLevelConfig(uint32_t PWR_PVDLevel)
配置PVD的电压检测阈值。根据传入的PWR_PVDLevel_*常量,设置PWR_CTLR寄存器中的PLS[6:4]字段,从而选择8个预设电压等级之一。建议根据系统工作电压范围选择合适阈值,例如3.3V系统推荐使用PWR_PVDLevel_3V1PWR_PVDLevel_3V3

参数:

名称 类型 简述
PWR_PVDLevel uint32_t PWR_PVDLevel_MODE0PWR_PVDLevel_MODE7中选择一个阈值

返回值:

该函数先清除PLS字段,再写入新值,避免误配置。注意:配置后需确保PVD已启用(调用PWR_PVDCmd(ENABLE))才生效。


PWR_AutoWakeUpCmd
#

void PWR_AutoWakeUpCmd(FunctionalState NewState)
启用或禁用自动唤醒(AWU)功能。启用后,AWU计数器将基于LSI时钟递减,当计数器归零时触发唤醒事件,使系统从待机或停机模式中恢复。适用于周期性唤醒采集传感器数据、维持通信心跳等低功耗应用。

参数:

名称 类型 简述
NewState FunctionalState ENABLE(启用)或 DISABLE(禁用)

返回值:

实际操作为设置PWR_AWUCSR寄存器的第1位(AWUEN),需配合PWR_AWU_SetPrescaler()PWR_AWU_SetWindowValue()完成完整配置。


PWR_AWU_SetPrescaler
#

void PWR_AWU_SetPrescaler(uint32_t AWU_Prescaler)
设置AWU计数器的时钟预分频系数,决定唤醒周期的长度。LSI时钟(约40kHz)经分频后作为AWU的计数源,分频值越大,唤醒间隔越长。例如,使用PWR_AWU_Prescaler_61440时,唤醒周期约为1.6秒(40kHz / 61440 ≈ 0.65Hz)。

参数:

名称 类型 简述
AWU_Prescaler uint32_t PWR_AWU_Prescaler_1PWR_AWU_Prescaler_61440中选择一个分频值

返回值:

该函数读取AWUPSC寄存器,保留其他位,仅修改[3:0]位(分频码),确保不干扰其他配置。


PWR_AWU_SetWindowValue
#

void PWR_AWU_SetWindowValue(uint8_t WindowValue)
设置AWU的窗口比较值,用于控制唤醒事件的触发时机。当AWU计数器递减至该值时,会触发唤醒事件。该值必须小于0x3F(63),通常设置为计数器最大值的一半,以实现对称唤醒周期。若设置为0,则在计数器归零时立即唤醒。

参数:

名称 类型 简述
WindowValue uint8_t 窗口比较值,范围063(0x000x3F)

返回值:

该值写入AWUWR寄存器的[5:0]位,用于与AWU计数器进行比较,实现“窗口唤醒”功能,适用于需要精确时间窗口的应用。


PWR_EnterSTANDBYMode
#

void PWR_EnterSTANDBYMode(uint8_t PWR_STANDBYEntry)
使系统进入待机(STANDBY)模式,此时除备份域和唤醒电路外,所有时钟和电源均被关闭,功耗降至最低(通常<1μA)。唤醒源包括外部复位、WKUP引脚、RTC闹钟或AWU事件。该函数通过设置PDDS位并执行WFI/WFE指令实现低功耗跳转。

参数:

名称 类型 简述
PWR_STANDBYEntry uint8_t PWR_STANDBYEntry_WFI(等待中断)或 PWR_STANDBYEntry_WFE(等待事件)

返回值:

该函数会清除PWR_CTLR的PDDS位,再重新设置为1,确保待机模式被正确激活。同时,通过修改SCB->SCR寄存器的DEEPSLEEP位,使CPU进入深度睡眠,配合WFI/WFE实现系统级低功耗。注意:该函数执行后程序不会返回,除非被唤醒。


PWR_GetFlagStatus
#

FlagStatus PWR_GetFlagStatus(uint32_t PWR_FLAG)
查询PWR外设的状态标志位,用于判断是否发生特定事件(如PVD电压阈值触发)。仅支持查询PWR_FLAG_PVDO,其他标志位未定义。该函数常用于中断服务程序或主循环中轮询电源状态。

参数:

名称 类型 简述
PWR_FLAG uint32_t 仅支持PWR_FLAG_PVDO

返回值:
SET(标志置位)或 RESET(标志未置位)

该函数读取PWR_CSR寄存器的PVDO位(第2位),并返回其状态。读取后标志位不会自动清除,需通过软件或硬件复位清除。

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 14: 本文

相关文章

ch32v00x.h

该文件是 CH32V003 微控制器的外设访问层头文件,定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象,使开发者可通过结构体指针直接访问寄存器,或通过位掩码配置外设功能。本文件不包含函数原型,仅提供寄存器定义与常量,是所有外设驱动开发的基础。

ch32v00x_adc.h

该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC(模数转换器)支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式,适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置,所有常量均以 uint32_t 或 uint8_t 类型定义,确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格,支持初始化、启动、中断、校准、偏移设置等完整功能链,适用于工业控制、传感器接口、电源管理等嵌入式应用。

ch32v00x_dma.h

该文件定义了 CH32V00x 系列微控制器 DMA(直接存储器访问)外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输,适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道,每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式,极大提升系统并发处理能力。