[APM32E0] 极海B站技术微课MCO外设学习笔记

[复制链接]
 楼主| lemonboard 发表于 2025-6-7 12:52 | 显示全部楼层 |阅读模式
@Gfan 参加活动
极海B站有工程师笔记经验分享,项目案例等短视频,是平时工作之中碎片时间用于提高自己技术的好去处。今天学习极海B站的APM32技术微课栏目的MCO课程《【APM32技术微课 | 第24 讲】APM32的MCO,你知道吗》链接如下:https://www.bilibili.com/video/BV1bk9sYfEdb/
MCO,main clock output的简称,主时钟输出功能。该功能外设可以将片内时钟、外部时钟、PLL时钟或主时钟信号连接到指定引脚之上。
MCO功能的典型应用有二:
  • 时钟监测
    通过MCO引脚输出系统时钟,从而可以进行监测和测量。
    调试和验证系统时钟的正确性和稳定性。
  • 外部时钟源输出
    MCO可为外部设备提供时钟信号。
    省去额外的晶振,降低成本。

上述两点是非常实用的两点。我平时在首次配置MCU PLL时钟时,会通过示波器观察输出频率,以确定我的配置是否正确,有效。
APM32技术课MCO典型应用.jpg

在极海B站技术微课上,指导老师使用APM32F411为例进行了代码分享,我查看了我尚在邮寄中的APM32E030 SDK的示例工程,极海SDK已经做了兼容设计。虽然讲解的是APM 32F411, 但适用APM32全系列。MCO实验的示例参考极海官网的APM32E030_SDK V1.0.2(20250603发布),在此附上源代码:

  1. /*!
  2. * [url=home.php?mod=space&uid=247401]@brief[/url]       Selects clock ouput source
  3. *
  4. * @param       cocClock:  specifies the clock source to output
  5. *                         This parameter can be one of the following values:
  6. *                         [url=home.php?mod=space&uid=2817080]@ARG[/url] RCM_COC_NO_CLOCK:     No clock selected.
  7. *                         @arg RCM_COC_HSI14:        HSI14 oscillator clock selected.
  8. *                         @arg RCM_COC_LSI:          LSI oscillator clock selected.
  9. *                         @arg RCM_COC_LSE:          LSE oscillator clock selected.
  10. *                         @arg RCM_COC_SYSCLK:       System clock selected.
  11. *                         @arg RCM_COC_HSI:          HSI oscillator clock selected.
  12. *                         @arg RCM_COC_HSE:          HSE oscillator clock selected.
  13. *                         @arg RCM_COC_PLLCLK_DIV_2: PLL clock divided by 2 selected.
  14. *
  15. * @retval      None
  16. */
  17. void RCM_ConfigCOC(RCM_COCCLK_T cocClock)
  18. {
  19.     RCM->CFG1_B.MCOSEL = cocClock;
  20. }

  21. /*!
  22. * @brief       Clock output init
  23. *
  24. * @param       None
  25. *
  26. * @retval      None
  27. *
  28. */
  29. void ClockOutputInit()
  30. {
  31.     GPIO_Config_T gpioconfig;

  32.     /* Connect RCM Clock output */
  33.     GPIO_ConfigPinAF(GPIOA, GPIO_PIN_SOURCE_8, GPIO_AF_PIN0);
  34.     gpioconfig.mode    =  GPIO_MODE_AF;
  35.     gpioconfig.outtype =  GPIO_OUT_TYPE_PP;
  36.     gpioconfig.pin     =  GPIO_PIN_8;
  37.     gpioconfig.pupd    =  GPIO_PUPD_NO;
  38.     gpioconfig.speed   =  GPIO_SPEED_50MHz;
  39.     GPIO_Config(GPIOA, &gpioconfig);

  40.     /* set SYSCLK as COC source */
  41.     RCM_ConfigCOC(RCM_COC_SYSCLK);
  42. }
至于实验效果,待我收到APM32E030后,定为大家奉上。




Gfan 发表于 2025-6-9 09:29 | 显示全部楼层
感谢大佬分享~~板子在路上ing,火速送达中,期待后续分享咱们板子的上手体验呀
jobszheng 发表于 2025-6-9 14:22 | 显示全部楼层
楼主,您这帖子的核心是分享技术,还是要开发板啊
CloudKiss 发表于 2025-6-9 15:59 | 显示全部楼层
这样观测MCU的主时钟状态方便多了
风暴之眸 发表于 2025-6-9 19:17 | 显示全部楼层
MCO主要还是用于时钟分频输出。
可以完全利用MCU内部的PLL来实现目的频率的输出
 楼主| lemonboard 发表于 2025-6-10 23:03 | 显示全部楼层
Gfan 发表于 2025-6-9 09:29
感谢大佬分享~~板子在路上ing,火速送达中,期待后续分享咱们板子的上手体验呀 ...

我的帖子被版主 限时高亮 了。
谢谢版主的认可!
阳光爆裂 发表于 2025-6-11 11:06 | 显示全部楼层
MCO的作用明显。不过,要注意不要超过GPIO的翻转率50MHz
霜之闪耀 发表于 2025-6-12 09:48 | 显示全部楼层
MCO引脚的输出,是不是可以直接连接其它外设的时钟输入。
在硬件电路设计上面,还有特别注意的地方吗?
心跳回响 发表于 2025-6-12 20:11 | 显示全部楼层
有了上课的感觉。
要写学习笔记啊
海洋凝视 发表于 2025-6-13 10:11 | 显示全部楼层
要是系统跑飞的话,这个MCO还有时钟输出吗?
雾里闲逛 发表于 2025-6-18 17:10 | 显示全部楼层
如果我主时钟选择了PLL路由,MCO的输出还可以输出HSE的频率吗?
神秘低语 发表于 2025-6-25 17:44 | 显示全部楼层
这个频率的输出我看配置只能是SysPLL的二分一?
比如可以是 1/4的分频吗?
永恒回声 发表于 2025-6-28 16:23 | 显示全部楼层
这个频率输出主要应用在哪些场景下啊?
梦之一瞥 发表于 2025-6-28 22:22 | 显示全部楼层
使用这个功能,是不是可以节省外设模块的一个晶振器件呀!
GalaxyStroll 发表于 2025-6-28 23:03 | 显示全部楼层
这个频率输出只能固定引脚。在PCB布局的时候,局限性非常明显。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

206

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

206

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部