本帖最后由 WuKaiLi 于 2022-4-29 15:24 编辑
#技术资源# #申请原创#
最近收获了一块APM32F407IG MINI板,在调试的过程中需要看到使用的一些时钟频率,如系统时钟,内部晶振时钟。我想到MCU一般都有相应的时钟输出功能(MCU Clock Out)。我觉得APM32F407也会有,所以查阅了一下它的手册,并将其配置出来了。本贴记录一下该过程。 1 MCU Clock Out功能概述果不其然,在其6.3.4时钟树章节提及了其时钟输出功能,而且还分为MCO1/MCO2。 file://E:\02Work\Typora%20note\APM32F407%20%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F%E8%BE%93%E5%87%BA\image-20220429145147153.png?lastModify=1651216697 根据手册描述,APM32F407有两个微控制器时钟输出引脚, MCO1(PA8)和 MCO2(PC9), 当端口(PA8、 PC9)的相应的 GPIO 端口被配置为对应复用功能时,可通过配置RCM_CFG(时钟配置寄存器) 中的 MCOxSEL 位和 MCOxPSC 位, 选择时钟信号输出到 MCO 引脚。 我们提炼一下若将MCO1输出相应的时钟我们需要知道的关键信息: a. PA8配置为对应复用功能 b.配置RCM_CFG(时钟配置寄存器) 中的 MCOxSEL 位和 MCOxPSC 下面一个章节将对实现MCO1输出HSI时钟。 2 MCU Clock Out代码实现a.首先使能MCO1端口PA8的端口时钟 /** Enable GPIOA Periph Clock */
RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);
b.配置PA8引脚为复用模式 /** GPIOA initialization */
GPIO_ConfigStructInit(&GPIO_ConfigStruct);
GPIO_ConfigStruct.pin = GPIO_PIN_8;
GPIO_ConfigStruct.mode = GPIO_MODE_AF;
GPIO_ConfigStruct.speed = GPIO_SPEED_50MHz;
GPIO_Config(GPIOA, &GPIO_ConfigStruct);
c.配置PA8复用模式为MCO1 GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_8, GPIO_AF_MCO);
d.配置MCO1输出时钟源及分频值 /** MCO Out HSI 16MHz */
RCM_ConfigMCO1(RCM_MCO1_SEL_HSICLK,RCM_MCO1_DIV_1);
综上,便是我们使用MCO1输出APM32F407的HSICLK的核心代码了。完整工程请查阅附件哦。 3 基础补充在APM32F407中,整个系统的时钟源有: HSECLK、 LSECLK、 HSICLK、 LSICLK、 PLL1 和 PLL2。 a. HSECLK是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 b. LSECLK是低速外部时钟,接频率为32.768kHz的石英晶体 c. HSI是高速内部时钟,RC振荡器,频率为16MHz。 d. LSICLK是低速内部时钟,RC振荡器,频率为40kHz。 e. PLL1 和 PLL2为锁相环倍频输出,一般由 HSICLK 或 HSECLK 振荡器作为它们的时钟源。
|