跳过正文

ch32v00x_rcc.h

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

描述
#

该文件定义了CH32V00x系列微控制器复位与时钟控制(RCC)外设的所有常量、枚举、结构体及函数原型。RCC模块负责系统时钟源的选择、分频、PLL配置、外设时钟使能、时钟安全系统(CSS)管理以及复位标志的读取与清除。通过本库函数,开发者可灵活配置系统主频、AHB/APB总线分频、ADC时钟源、MCO输出时钟等关键参数,是系统初始化和低功耗管理的核心模块。所有时钟配置均需遵循芯片时序约束,例如HSE不能在作为系统时钟时被关闭,PLL不能在作为系统时钟时被禁用。

常量
#

HSE_configuration
#

外部高速晶振(HSE)配置选项,用于启用、关闭或旁路外部晶振。HSE是高精度时钟源,常用于系统主时钟或PLL输入。旁路模式允许使用外部时钟信号直接驱动芯片,适用于已有时钟源的系统。

名称 简述
RCC_HSE_OFF 0x00000000 关闭HSE振荡器
RCC_HSE_ON 0x00010000 开启HSE振荡器
RCC_HSE_Bypass 0x00040000 旁路HSE振荡器,使用外部时钟输入

以上所有值都强制转换为uint32_t

PLL_entry_clock_source
#

PLL输入时钟源选择,决定PLL的参考频率。必须在启用PLL前配置,且仅支持HSI或HSE的2倍频输入。选择HSE作为PLL源可获得更高精度和稳定性,适合对时钟精度要求高的应用。

名称 简述
RCC_PLLSource_HSI_MUL2 0x00000000 使用HSI(内部高速时钟)作为PLL输入,倍频2倍
RCC_PLLSource_HSE_MUL2 0x00010000 使用HSE(外部高速晶振)作为PLL输入,倍频2倍

以上所有值都强制转换为uint32_t

System_clock_source
#

系统时钟(SYSCLK)源选择,决定CPU运行频率的来源。系统时钟可由HSI、HSE或PLL提供,切换时需确保目标时钟已稳定,否则可能导致系统异常。

名称 简述
RCC_SYSCLKSource_HSI 0x00000000 选择HSI作为系统时钟源
RCC_SYSCLKSource_HSE 0x00000001 选择HSE作为系统时钟源
RCC_SYSCLKSource_PLLCLK 0x00000002 选择PLL输出作为系统时钟源

以上所有值都强制转换为uint32_t

AHB_clock_source
#

AHB总线时钟(HCLK)分频系数,控制AHB外设(如DMA、SRAM)的工作频率。分频值范围从1到256,需根据外设性能需求合理配置,避免过快导致数据错误或过慢影响性能。

名称 简述
RCC_SYSCLK_Div1 0x00000000 HCLK = SYSCLK
RCC_SYSCLK_Div2 0x00000010 HCLK = SYSCLK/2
RCC_SYSCLK_Div3 0x00000020 HCLK = SYSCLK/3
RCC_SYSCLK_Div4 0x00000030 HCLK = SYSCLK/4
RCC_SYSCLK_Div5 0x00000040 HCLK = SYSCLK/5
RCC_SYSCLK_Div6 0x00000050 HCLK = SYSCLK/6
RCC_SYSCLK_Div7 0x00000060 HCLK = SYSCLK/7
RCC_SYSCLK_Div8 0x00000070 HCLK = SYSCLK/8
RCC_SYSCLK_Div16 0x000000B0 HCLK = SYSCLK/16
RCC_SYSCLK_Div32 0x000000C0 HCLK = SYSCLK/32
RCC_SYSCLK_Div64 0x000000D0 HCLK = SYSCLK/64
RCC_SYSCLK_Div128 0x000000E0 HCLK = SYSCLK/128
RCC_SYSCLK_Div256 0x000000F0 HCLK = SYSCLK/256

以上所有值都强制转换为uint32_t

RCC_Interrupt_source
#

RCC中断源标识,用于使能或查询特定时钟就绪或故障中断。中断机制可实现无轮询的时钟状态监控,提升系统响应效率。

名称 简述
RCC_IT_LSIRDY 0x01 LSI时钟就绪中断
RCC_IT_HSIRDY 0x04 HSI时钟就绪中断
RCC_IT_HSERDY 0x08 HSE时钟就绪中断
RCC_IT_PLLRDY 0x10 PLL时钟就绪中断
RCC_IT_CSS 0x80 时钟安全系统(CSS)故障中断

以上所有值都强制转换为uint8_t

ADC_clock_source
#

ADC时钟(ADCCLK)分频系数,由APB2时钟(PCLK2)分频得到。ADC采样精度对时钟稳定性敏感,建议使用较低分频比以保证采样时间充足。

名称 简述
RCC_PCLK2_Div2 0x00000000 ADCCLK = PCLK2/2
RCC_PCLK2_Div4 0x00004000 ADCCLK = PCLK2/4
RCC_PCLK2_Div6 0x00008000 ADCCLK = PCLK2/6
RCC_PCLK2_Div8 0x0000C000 ADCCLK = PCLK2/8
RCC_PCLK2_Div12 0x0000A000 ADCCLK = PCLK2/12
RCC_PCLK2_Div16 0x0000E000 ADCCLK = PCLK2/16
RCC_PCLK2_Div24 0x0000A800 ADCCLK = PCLK2/24
RCC_PCLK2_Div32 0x0000E800 ADCCLK = PCLK2/32
RCC_PCLK2_Div48 0x0000B000 ADCCLK = PCLK2/48
RCC_PCLK2_Div64 0x0000F000 ADCCLK = PCLK2/64
RCC_PCLK2_Div96 0x0000B800 ADCCLK = PCLK2/96
RCC_PCLK2_Div128 0x0000F800 ADCCLK = PCLK2/128

以上所有值都强制转换为uint32_t

AHB_peripheral
#

AHB总线外设时钟使能位掩码,用于控制DMA1和SRAM的时钟开关。SRAM时钟仅在睡眠模式下可安全关闭,否则可能导致数据丢失。

名称 简述
RCC_AHBPeriph_DMA1 0x00000001 DMA1外设时钟
RCC_AHBPeriph_SRAM 0x00000004 SRAM存储器时钟

以上所有值都强制转换为uint32_t

APB2_peripheral
#

高速APB2总线外设时钟使能位掩码,覆盖AFIO、GPIO、ADC、TIM1、SPI1、USART1等关键外设。APB2时钟频率通常与HCLK相同,用于高速外设。

名称 简述
RCC_APB2Periph_AFIO 0x00000001 复用功能I/O时钟
RCC_APB2Periph_GPIOA 0x00000004 GPIOA端口时钟
RCC_APB2Periph_GPIOC 0x00000010 GPIOC端口时钟
RCC_APB2Periph_GPIOD 0x00000020 GPIOD端口时钟
RCC_APB2Periph_ADC1 0x00000200 ADC1模数转换器时钟
RCC_APB2Periph_TIM1 0x00000800 TIM1高级定时器时钟
RCC_APB2Periph_SPI1 0x00001000 SPI1串行外设接口时钟
RCC_APB2Periph_USART1 0x00004000 USART1通用同步/异步收发器时钟

以上所有值都强制转换为uint32_t

APB1_peripheral
#

低速APB1总线外设时钟使能位掩码,覆盖TIM2、WWDG、I2C1、PWR等常用外设。APB1时钟频率通常为HCLK的1/2或更低,适用于低速通信和控制。

名称 简述
RCC_APB1Periph_TIM2 0x00000001 TIM2通用定时器时钟
RCC_APB1Periph_WWDG 0x00000800 窗口看门狗时钟
RCC_APB1Periph_I2C1 0x00200000 I2C1串行通信接口时钟
RCC_APB1Periph_PWR 0x10000000 电源控制时钟

以上所有值都强制转换为uint32_t

Clock_source_to_output_on_MCO_pin
#

MCO(微控制器时钟输出)引脚时钟源选择,用于将内部时钟信号输出到外部引脚,便于示波器测量或同步外部设备。

名称 简述
RCC_MCO_NoClock 0x00 MCO引脚无时钟输出
RCC_MCO_SYSCLK 0x04 输出系统时钟(SYSCLK)
RCC_MCO_HSI 0x05 输出HSI内部时钟
RCC_MCO_HSE 0x06 输出HSE外部晶振时钟
RCC_MCO_PLLCLK 0x07 输出PLL时钟

以上所有值都强制转换为uint8_t

RCC_Flag
#

RCC状态标志位,用于检测各种时钟就绪、复位源和故障状态。标志位由硬件自动置位,需通过RCC_ClearFlag()清除复位相关标志。

名称 简述
RCC_FLAG_HSIRDY 0x21 HSI时钟就绪标志
RCC_FLAG_HSERDY 0x31 HSE时钟就绪标志
RCC_FLAG_PLLRDY 0x39 PLL时钟就绪标志
RCC_FLAG_LSIRDY 0x61 LSI时钟就绪标志
RCC_FLAG_PINRST 0x7A 外部复位引脚触发复位
RCC_FLAG_PORRST 0x7B 上电/掉电复位
RCC_FLAG_SFTRST 0x7C 软件复位
RCC_FLAG_IWDGRST 0x7D 独立看门狗复位
RCC_FLAG_WWDGRST 0x7E 窗口看门狗复位
RCC_FLAG_LPWRRST 0x7F 低功耗复位

以上所有值都强制转换为uint8_t

SysTick_clock_source
#

SysTick定时器时钟源选择,决定系统滴答定时器的计数频率。通常用于操作系统调度或延时函数,建议使用HCLK以获得精确时间基准。

名称 简述
SysTick_CLKSource_HCLK_Div8 0xFFFFFFFB SysTick时钟 = HCLK/8
SysTick_CLKSource_HCLK 0x00000004 SysTick时钟 = HCLK

以上所有值都强制转换为uint32_t

枚举
#

结构体
#

RCC_ClocksTypeDef
#

RCC时钟频率信息结构体,用于通过RCC_GetClocksFreq()函数获取系统各时钟的实际运行频率。该结构体在初始化后由函数自动填充,可用于动态调整系统性能或功耗策略。

名称 类型 简述
SYSCLK_Frequency uint32_t 系统时钟(CPU主频)频率,单位Hz
HCLK_Frequency uint32_t AHB总线时钟频率,单位Hz
PCLK1_Frequency uint32_t APB1总线时钟频率,单位Hz
PCLK2_Frequency uint32_t APB2总线时钟频率,单位Hz
ADCCLK_Frequency uint32_t ADC转换时钟频率,单位Hz

函数
#

RCC_DeInit
#

void RCC_DeInit(void)
将RCC寄存器恢复为上电复位后的默认状态,包括关闭所有时钟源、禁用PLL、清除中断标志。常用于系统初始化或异常恢复流程,确保时钟配置处于已知安全状态。

参数:

返回值:

RCC_HSEConfig
#

void RCC_HSEConfig(uint32_t RCC_HSE)
配置外部高速晶振(HSE)的工作模式。支持关闭、开启或旁路模式。调用前需确保HSE未被用作系统时钟或PLL输入,否则配置无效。开启HSE后需调用RCC_WaitForHSEStartUp()等待稳定。

参数:

名称 类型 简述
RCC_HSE uint32_t HSE配置选项,取值为RCC_HSE_OFFRCC_HSE_ONRCC_HSE_Bypass

返回值:

RCC_WaitForHSEStartUp
#

ErrorStatus RCC_WaitForHSEStartUp(void)
等待HSE振荡器稳定并进入就绪状态。该函数轮询RCC_FLAG_HSERDY标志,超时后返回状态。必须在启用HSE后调用,否则可能因时钟未就绪导致后续配置失败。

参数:

返回值:

说明
READY HSE已稳定,可安全使用
NoREADY 超时仍未稳定,可能晶振故障或连接异常

RCC_AdjustHSICalibrationValue
#

void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
微调内部高速振荡器(HSI)的校准值,以补偿温度、电压变化引起的频率偏差。校准值范围0~0x1F,出厂默认为0x10。建议在系统启动后根据实测频率进行微调。

参数:

名称 类型 简述
HSICalibrationValue uint8_t 校准值,范围031(0x000x1F)

返回值:

RCC_HSICmd
#

void RCC_HSICmd(FunctionalState NewState)
启用或禁用内部高速振荡器(HSI)。HSI是系统默认时钟源,常用于上电初始阶段或低功耗模式。禁用HSI前需确保系统时钟已切换至其他源。

参数:

名称 类型 简述
NewState FunctionalState ENABLE(开启)或DISABLE(关闭)

返回值:

RCC_PLLConfig
#

void RCC_PLLConfig(uint32_t RCC_PLLSource)
配置PLL的输入源(HSI或HSE)并启用2倍频。必须在启用PLL前调用,且仅支持2倍频。配置后需调用RCC_PLLCmd(ENABLE)激活PLL。

参数:

名称 类型 简述
RCC_PLLSource uint32_t PLL输入源,取值为RCC_PLLSource_HSI_MUL2RCC_PLLSource_HSE_MUL2

返回值:

RCC_PLLCmd
#

void RCC_PLLCmd(FunctionalState NewState)
启用或禁用PLL。PLL不能在作为系统时钟时被禁用,否则会导致系统崩溃。建议在切换系统时钟源后再禁用PLL以释放功耗。

参数:

名称 类型 简述
NewState FunctionalState ENABLE(开启)或DISABLE(关闭)

返回值:

RCC_SYSCLKConfig
#

void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
切换系统时钟源(SYSCLK)。支持HSI、HSE、PLL三种源。切换时需确保目标时钟已稳定,否则可能引发系统异常。函数内部会根据PLL源自动调整HSI校准值以优化性能。

参数:

名称 类型 简述
RCC_SYSCLKSource uint32_t 系统时钟源,取值为RCC_SYSCLKSource_HSIRCC_SYSCLKSource_HSERCC_SYSCLKSource_PLLCLK

返回值:

RCC_GetSYSCLKSource
#

uint8_t RCC_GetSYSCLKSource(void)
读取当前系统时钟源。返回值为寄存器CFGR0SWS字段的值,用于确认时钟切换是否成功。

参数:

返回值:

说明
0x00 HSI为当前系统时钟
0x04 HSE为当前系统时钟
0x08 PLL为当前系统时钟

RCC_HCLKConfig
#

void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
配置AHB总线时钟(HCLK)分频系数。分频值影响DMA、SRAM等高速外设性能。建议根据外设最大工作频率设置,避免超频。

参数:

名称 类型 简述
RCC_SYSCLK uint32_t AHB分频系数,取值为RCC_SYSCLK_Div1RCC_SYSCLK_Div256

返回值:

RCC_ITConfig
#

void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
使能或禁用RCC中断源。支持LSI、HSI、HSE、PLL就绪中断和CSS故障中断。中断触发后可通过RCC_GetITStatus()查询。

参数:

名称 类型 简述
RCC_IT uint8_t 中断源,取值为RCC_IT_LSIRDYRCC_IT_HSIRDYRCC_IT_HSERDYRCC_IT_PLLRDYRCC_IT_CSS
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_ADCCLKConfig
#

void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
配置ADC时钟(ADCCLK)分频系数。ADCCLK由PCLK2分频得到,建议选择≤12分频以保证采样精度。过高的分频可能导致转换时间不足。

参数:

名称 类型 简述
RCC_PCLK2 uint32_t ADC分频系数,取值为RCC_PCLK2_Div2RCC_PCLK2_Div128

返回值:

RCC_LSICmd
#

void RCC_LSICmd(FunctionalState NewState)
启用或禁用内部低速振荡器(LSI)。LSI常用于独立看门狗(IWDG)或RTC低功耗时钟。禁用LSI前需确保IWDG未运行,否则会触发复位。

参数:

名称 类型 简述
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_GetClocksFreq
#

void RCC_GetClocksFreq(RCC_ClocksTypeDef *RCC_Clocks)
获取系统各时钟的实际频率值。该函数基于寄存器配置和预定义常量(如HSI_VALUEHSE_VALUE)计算频率,结果可能因晶振实际频率偏差而略有误差。

参数:

名称 类型 简述
RCC_Clocks RCC_ClocksTypeDef * 指向结构体的指针,函数将填充各时钟频率值

返回值:

RCC_AHBPeriphClockCmd
#

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
使能或禁用AHB总线外设时钟。仅支持DMA1和SRAM。SRAM时钟仅在睡眠模式下可安全关闭,否则可能造成数据丢失。

参数:

名称 类型 简述
RCC_AHBPeriph uint32_t AHB外设,取值为RCC_AHBPeriph_DMA1RCC_AHBPeriph_SRAM
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_APB2PeriphClockCmd
#

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
使能或禁用APB2总线外设时钟。APB2外设包括GPIO、ADC、TIM1等高速外设,必须在使用前使能时钟。

参数:

名称 类型 简述
RCC_APB2Periph uint32_t APB2外设,取值为RCC_APB2Periph_AFIORCC_APB2Periph_GPIOA
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_APB1PeriphClockCmd
#

void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
使能或禁用APB1总线外设时钟。APB1外设包括TIM2、I2C1、WWDG等低速外设,使用前必须使能时钟。

参数:

名称 类型 简述
RCC_APB1Periph uint32_t APB1外设,取值为RCC_APB1Periph_TIM2RCC_APB1Periph_I2C1
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_APB2PeriphResetCmd
#

void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
对APB2外设执行复位操作。复位后外设寄存器恢复默认值,常用于初始化或异常恢复。复位期间外设不可用。

参数:

名称 类型 简述
RCC_APB2Periph uint32_t APB2外设,取值同RCC_APB2PeriphClockCmd
NewState FunctionalState ENABLE(复位)或DISABLE(释放复位)

返回值:

RCC_APB1PeriphResetCmd
#

void RCC_APB1PeriphResetCmd(uint32_t RCC_APB1Periph, FunctionalState NewState)
对APB1外设执行复位操作。复位后外设寄存器恢复默认值,常用于初始化或异常恢复。

参数:

名称 类型 简述
RCC_APB1Periph uint32_t APB1外设,取值同RCC_APB1PeriphClockCmd
NewState FunctionalState ENABLE(复位)或DISABLE(释放复位)

返回值:

RCC_ClockSecuritySystemCmd
#

void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
启用或禁用时钟安全系统(CSS)。CSS在检测到HSE失效时自动切换至HSI并触发中断,防止系统因时钟丢失而失控。建议在使用HSE或PLL时始终启用。

参数:

名称 类型 简述
NewState FunctionalState ENABLEDISABLE

返回值:

RCC_MCOConfig
#

void RCC_MCOConfig(uint8_t RCC_MCO)
配置MCO引脚输出的时钟源。MCO可用于调试或同步外部设备,输出频率等于所选源频率(无分频)。输出引脚需在GPIO中配置为复用推挽模式。

参数:

名称 类型 简述
RCC_MCO uint8_t MCO时钟源,取值为RCC_MCO_NoClockRCC_MCO_PLLCLK

返回值:

RCC_GetFlagStatus
#

FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
查询RCC状态标志位。用于检测时钟是否就绪、复位源类型等。标志位由硬件自动置位,需手动清除复位相关标志。

参数:

名称 类型 简述
RCC_FLAG uint8_t 要查询的标志,取值为RCC_FLAG_HSIRDY

返回值:

说明
SET 标志被置位
RESET 标志未置位

RCC_ClearFlag
#

void RCC_ClearFlag(void)
清除所有复位标志(PINRST、PORRST、SFTRST、IWDGRST、WWDGRST、LPWRRST)。调用后标志位被清零,仅在复位后需调用一次,避免误清。

参数:

返回值:

RCC_GetITStatus
#

ITStatus RCC_GetITStatus(uint8_t RCC_IT)
查询RCC中断是否发生。用于中断服务程序中判断具体中断源,如PLL就绪或CSS故障。

参数:

名称 类型 简述
RCC_IT uint8_t 要查询的中断源,取值为RCC_IT_LSIRDY

返回值:

说明
SET 中断已触发
RESET 中断未触发

RCC_ClearITPendingBit
#

void RCC_ClearITPendingBit(uint8_t RCC_IT)
清除指定RCC中断的挂起位。必须在中断服务程序中调用,否则中断会持续触发。仅支持LSIRDY、HSIRDY、HSERDY、PLLRDY、CSS。

参数:

名称 类型 简述
RCC_IT uint8_t 要清除的中断源,取值为RCC_IT_LSIRDY

返回值:

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

相关文章

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 通道,每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式,极大提升系统并发处理能力。