[APM32F4]【技术分享】什么?APM32F411的MCO还能这样用

1 什么是MCO?

正式开始前先简单说一下啥是MCO(可能大家一头雾水),MCO:Main clock output,即主时钟输出功能。它在APM32F411上可以输出内部时钟、外部时钟、PLL时钟、或者主时钟的时钟信号输出到指定的引脚上。

2 MOC能用来干什么?

既然是输出主时钟,那MCO一般能用来做什么呢?

在我看来MCO一般可以用于以下方面:

1. 时钟监测:通过将系统时钟(SYSCLK)输出到MCO引脚,您可以监测和测量系统时钟的频率。这对于调试和验证系统时钟的正确性和稳定性非常有用。
2. 外部时钟源供应:MCO功能可以用于将时钟源(如PLL时钟或外部高速时钟)输出到MCO引脚,以供外部电路使用。这对于需要外部设备或外部模块的时钟信号的应用非常有用。

2.1 时钟检测

这个功能很好理解。

假设我们现在设置的系统时钟是60MHz,那我们怎么去确定确实是60MHz呢?是的,MCO提供了这个检查窗口,我们可以将系统时钟直接(或分频)输出出来,打上示波器,我们就可以看到是否有所异常啦。

还有另外的一些情况,极端的时候我们使用串口或其他对输入时钟敏感的外设(大部分是通信外设),串口时不时会通信异常,会出现一些杂波?这个时候我们去检查软件,发现并没有什么异常,那我们此时设置MCO输出时钟,可以监控时钟是否在某些时候会有所异常,从而导致串口的通信波形变形。

专业点来描述就是:通过监测系统时钟的频率,可以验证系统时钟是否符合我们预期的要求,并检查任何时钟漂移、抖动或其他问题。如果监测到时钟频率与预期不符,可以进一步评估和调整系统的时钟源和相关配置,以确保系统的时钟稳定性和准确性。

2.2 外部时钟源供应

这个功能也十分简单。

假设我们的板子上需要外接一个传感器或者通信设备,它需要提供一个外部时钟才能正常工作,按正常来说我们是硬件给它一个晶振,但现在我们选项的APM32F411有MCO功能了,诶就可以省掉这个晶振咯(省点成本,量大就是几百万O(∩_∩)O)。

3 APM32F411的MCO

3.1 MCO时钟树

通过查阅APM32F411的手册,我们可以看到其MCO的时钟树:

 



MCO功能可以输出不同类型的时钟信号,包括:

- 系统时钟(SYSCLK):即微控制器的主时钟,通常来自内部RC振荡器、外部晶体振荡器或外部时钟源。
- HSI时钟:即内部高速RC振荡器的时钟信号。
- HSE时钟:即外部高速晶体振荡器的时钟信号。
- PLL1时钟:即锁相环的输出时钟信号,可以通过配置PLL的输入源和分频系数来获得所需的时钟频率。
- PLL2时钟:即音频接口(I2S)的使用的内部时钟。

3.2 MCO引脚

其用户手册6.3.7章节指明,其MCO引脚有两,一个是MCO1(PA8)、一个是 MCO2(PC9)

 



3.3 MCO寄存器

控制MCO输出的主要寄存器在RCM_CFG章节,控制这MCO输出的时钟及其相关的分配。

 



3.4 MCO配置代码

配置APM32F411的MCO输出(使用PA8做输出)可以参考如下步骤:

1. 启用GPIOA时钟,以便可以配置PA8引脚。
2. 配置MCO输出引脚的驱动能力。
3. 配置PA8引脚为复用功能:MCO。
4. 配置MCO时钟源和分频系数。

基本的参考代码如下:

复制
/* Enable GPIOA Periph Clock */

RCM_EnableAHB1PeriphClock(RCM_AHB1_PERIPH_GPIOA);



/* GPIOA initialization */

GPIO_ConfigStructInit(&GPIO_ConfigStruct);

GPIO_ConfigStruct.pin = GPIO_PIN_8;

GPIO_ConfigStruct.mode = GPIO_MODE_AF;

GPIO_ConfigStruct.speed = GPIO_SPEED_100MHz;

GPIO_Config(GPIOA, &GPIO_ConfigStruct);

GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_8, GPIO_AF_MCO);



RCM_ConfigMCO1(RCM_MCO1_SEL_PLLCLK,RCM_MCO1_DIV_5);



4 使用MCO注意事项

1. 由于GPIO的频率受限,我的建议是输出的MCO频率不要过高,以防输出波形变形
2. 在做“外部时钟源供应”这个使用场景需要考虑模块使用的频率范围,若模块使用的频率跟APM32F411的MCO输出频率无法对应上,建议不要使用MCO输出给模块进行时钟源供应。

5 APM32F411 的MCO输出情况

下图分别是APM32F411MCO 输出20MHz、33.33MHz、50MHz、100MHz的情况。

 


具体代码可参考极海官方提供的:APM32F4xx_SDK_V1.4\Examples\RCM\RCM_ClockConfig。。
---------------------
作者:kai迪皮
链接:https://bbs.21ic.com/icview-3349508-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值