RISC-V MCU应用教程之RCC

简介

CH32V103系列是以青稞V3A处理器为核心的32位通用MCU,该处理器是基于RISC-V开源指令集设计。片上集成了时钟安全机制、多级电源管理、通用DMA控制器。此系列具有1路USB2.0主机/设备接口、多通道12位ADC转换模块、多通道TouchKey、多组定时器、多路IIC/USART/SPI接口等丰富的外设资源。

本章教程为MCO时钟输出,主要通过CH32V103 PA8引脚对外提供时钟,相当于一个有源晶振。

1、RCC简介及相关函数介绍
RCC:复位与时钟控制器(Reset Clock Controller)缩写。控制器根据电源区域的划分以及应用中的外设功耗管理考虑,提供了不同的复位形式以及可配置的时钟树结构。控制器提bbbbbbbbbbbbb供了3种复位形式:电源复位、系统复位和后备区域复位。三种不同的时钟源可被用来驱动系统时钟(SYSCLK),包括HSE振荡器时钟、HSI振荡器时钟、PLL时钟。

MCO是microcontroller clock output的缩写,是微控制器时钟输出引脚,在 CH32V103系列中由PA8复用所得,主要作用是可以对外提供时钟,相当于一个有源晶振。MCO的时钟来源可以是:PLLCLK/2、HSI、HSE、SYSCLK,具体选哪个由时钟配置寄存器0的位 26-24:MCO[2:0]决定。除了对外提供时钟这个作用之外,我们还可以通过示波器监控MCO引脚的时钟输出来验证我们的系统时钟配置是否正确。

关于CH32V103 RCC具体信息,可参考CH32V103应用手册。CH32V103 RCC标准库函数具体内容如下:

 

1.1、void RCC_DeInit(void)
功 能:将RCC时钟配置重置为默认重置状态。
输 入:无

1.2、void RCC_HSEConfig(uint32_t RCC_HSE)
功 能:配置外部高速振荡器(HSE)。
输 入:RCC_HSE:RCC_HSE_OFF:HSE振荡器关闭。RCC_HSE_ON:HSE振荡器打开。RCC_HSE_Bypass:外部时钟绕过HSE振荡器。

1.3、ErrorStatus RCC_WaitForHSEStartUp(void)
功 能:等待HSE启动。
输 入:无

1.4、void RCC_AdjustHSICalibrationValue(uint8_t HSICalibrationValue)
功 能:调整内部高速振荡器(HSI)校准值。
输 入:HSICalibrationValue:指定校准微调值。

1.5、void RCC_HSICmd(FunctionalState NewState)
功 能:启用或禁用内部高速振荡器(HSI)。
输 入:NewState:启用或禁用。

1.6、void RCC_PLLConfig(uint32_t RCC_PLLSource, uint32_t RCC_PLLMul)
功 能:配置PLL时钟源和倍增因子。
输 入:RCC_PLLSource:指定PLL入口时钟源。RCC_PLLMul:指定PLL乘法因子。

1.7、void RCC_PLLCmd(FunctionalState NewState)
功 能:启用或禁用PLL。
输 入:NewState:启用或禁用。

1.8、void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
功 能:配置系统时钟(SYSCLK)。
输 入:RCC_SYSCLKSource:指定用作系统时钟的时钟源。

1.9、uint8_t RCC_GetSYSCLKSource(void)
功 能:返回用作系统时钟的时钟源。
输 入:无

1.10、void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
功 能:配置AHB时钟(HCLK)。
输 入:RCC_SYSCLK:定义AHB时钟分频器。此时钟源于系统时钟(SYSCLK)。

1.11、void RCC_PCLK1Config(uint32_t RCC_HCLK)
功 能:配置低速APB时钟(PCLK1)。
输 入:RCC_HCLK:定义APB1时钟分频器。该时钟源于AHB时钟(HCLK)。

1.12、void RCC_ITConfig(uint8_t RCC_IT, FunctionalState NewState)
功 能:启用或禁用指定的RCC中断。
输 入:NewState:启用或禁用。

1.13、void RCC_USBCLKConfig(uint32_t RCC_USBCLKSource)
功 能:配置USB时钟(USBCLK)。
输 入:RCC_USBCLKSource:指定USB时钟源。该时钟源于锁相环输出。

1.14、void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
功 能:配置ADC时钟(ADCCLK)。
输 入:RCC_PCLK2:定义ADC时钟分频器。该时钟源于APB2时钟(PCLK2)。

1.15、void RCC_LSEConfig(uint8_t RCC_LSE)
功 能:配置外部低速振荡器(LSE)。
输 入:RCC_LSE:指定LSE的新状态。

1.16、void RCC_LSICmd(FunctionalState NewState)
功 能:启用或禁用内部低速振荡器(LSI)。
输 入:NewState:启用或禁用。

1.17、void RCC_RTCCLKConfig(uint32_t RCC_RTCCLKSource)
功 能:一旦选择了RTC时钟,除非重置备份域,否则无法更改。
输 入:RCC_RTCCLKSource:指定RTC时钟源。

1.18、void RCC_RTCCLKCmd(FunctionalState NewState)
功 能:只有在使用RCC_RTCCLKConfig函数选择了RTC时钟之后,才能使用此函数。
输 入:NewState:启用或禁用。

1.19、void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
功 能:返回不同片内时钟的频率。
输 入:RCC_Clocks:指向将保存时钟频率的RCC_ClocksTypeDef结构的指针。

1.20、void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState)
功 能:启用或禁用AHB外围时钟。
输 入:RCC_AHBPeriph:指定AHB外围设备以关闭其时钟。NewState:启用或禁用。

1.21、void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
功 能:启用或禁用高速APB(APB2)外围时钟。
输 入:RCC_APB2Periph:指定APB2外围设备来关闭其时钟。NewState:启用或禁用。

1.22、void RCC_APB2PeriphResetCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
功 能:强制或解除高速APB(APB2)外围设备复位。
输 入:RCC_APB2Periph:指定要重置的APB2外围设备。NewState:启用或禁用。

1.23、void RCC_BackupResetCmd(FunctionalState NewState)
功 能:强制或释放备份域重置。
输 入:NewState:启用或禁用。

1.24、void RCC_ClockSecuritySystemCmd(FunctionalState NewState)
功 能:启用或禁用时钟安全系统。
输 入:NewState:启用或禁用。

1.25、void RCC_MCOConfig(uint8_t RCC_MCO)
功 能:选择要在MCO引脚上输出的时钟源。
输 入:RCC_MCO:指定要输出的时钟源。

1.26、FlagStatus RCC_GetFlagStatus(uint8_t RCC_FLAG)
功 能:检查是否设置了指定的RCC标志。
输 入:RCC_FLAG:指定要检查的标志。

1.27、void RCC_ClearFlag(void)
功 能:清除RCC重置标志。
输 入:无

1.28、ITStatus RCC_GetITStatus(uint8_t RCC_IT)
功 能:检查指定的RCC中断是否发生。
输 入:RCC_IT:指定要检查的RCC中断源。

1.29、void RCC_ClearITPendingBit(uint8_t RCC_IT)
功 能:清除RCC的中断挂起位。
输 入:RCC_IT:指定要清除的中断挂起位。

以上函数在程序中直接调用即可。

2、硬件设计
RCC为单片机内部资源,无需进行硬件连接。

3、软件设计
本章教程将PA8复用为MCO引脚对外提供时钟输出,并通过示波器验证系统始终是否正确。其具体程序如下:

 

4、下载验证
将编译好的程序下载到开发板并复位,利用示波器检测MCO引脚PA8时钟输出频率

 

posted @   Zhu_zzzzzz  阅读(169)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?
点击右上角即可分享
微信分享提示