很多时候,我们想让ARM发出固定频率的脉冲,作为另一个芯片的时钟时,有两个方法一个是定时器或者时钟输出功能,利用定时器输出会吃中断源并且不利于发出高频率脉冲,所以选择第二个方法对应时钟源的时钟,并且可以进行分频之后再输出。

STM32F4手册说明:
时钟输出功能
共有两个微控制器时钟输出 (MCO) 引脚:
 MCO1
用户可通过可配置的预分配器(从 1 到 5)向 MCO1 引脚 (PA8) 输出四个不同的时钟源:
— HSI 时钟
— LSE 时钟
— HSE 时钟
— PLL 时钟
所需的时钟源通过 RCC  时钟配置寄存器 (RCC_CFGR) 中的 MCO1PRE[2:0] 和 MCO1[1:0]
位选择。
 MCO2
用户可通过可配置的预分配器(从 1 到 5)向 MCO2 引脚 (PC9) 输出四个不同的时钟源:
— HSE 时钟
— PLL 时钟
— 系统时钟 (SYSCLK)
— PLLI2S 时钟
所需的时钟源通过 RCC  时钟配置寄存器 (RCC_CFGR) 中的 MCO2PRE[2:0] 和 MCO2
位选择。
对于不同的 MCO 引脚,必须将相应的 GPIO 端口在复用功能模式下进行设置。
MCO 输出时钟不得超过 100 MHz(最大 I/O 速度)。

如图所示;

比较简单:直接说具体配置示例仅用MCO1进行示例
配置取主时钟168MHz再进行5分频后输出
void MCO1_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_ClockSecuritySystemCmd(ENABLE);
 
    /* Enable GPIOs clocks */
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_MCO);//打开引脚复用功能
         
    /* Configure MCO (PA8) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;  //UP
    GPIO_Init(GPIOA, &GPIO_InitStructure);
//输出时钟
    RCC_MCO1Config(RCC_MCO1Source_PLLCLK, RCC_MCO1Div_5);
}

如上初始化过后,引脚就可以输出响应的时钟了。

库函数中RCC_MCO1Config()解释如下

形参1:填入要选择的时钟源
RCC_MCO1Source_HSI
 RCC_MCO1Source_LSE
RCC_MCO1Source_HSE
RCC_MCO1Source_PLLCLK
从时钟树上很容易看出该每个时钟源
形参2:分频系数
RCC_MCO1Div_1
 RCC_MCO1Div_2
RCC_MCO1Div_3
RCC_MCO1Div_4
RCC_MCO1Div_5
分别是对时钟源进行1-5分频之后输出的时钟

/*

* @brief  Selects the clock source to output on MCO1 pin(PA8).
  * @note   PA8 should be configured in alternate function mode.
  * @param  RCC_MCO1Source: specifies the clock source to output.
  *          This parameter can be one of the following values:
  *            @arg RCC_MCO1Source_HSI: HSI clock selected as MCO1 source
  *            @arg RCC_MCO1Source_LSE: LSE clock selected as MCO1 source
  *            @arg RCC_MCO1Source_HSE: HSE clock selected as MCO1 source
  *            @arg RCC_MCO1Source_PLLCLK: main PLL clock selected as MCO1 source
  * @param  RCC_MCO1Div: specifies the MCO1 prescaler.
  *          This parameter can be one of the following values:
  *            @arg RCC_MCO1Div_1: no division applied to MCO1 clock
  *            @arg RCC_MCO1Div_2: division by 2 applied to MCO1 clock
  *            @arg RCC_MCO1Div_3: division by 3 applied to MCO1 clock
  *            @arg RCC_MCO1Div_4: division by 4 applied to MCO1 clock
  *            @arg RCC_MCO1Div_5: division by 5 applied to MCO1 clock
  * @retval None
  */
void RCC_MCO1Config(uint32_t RCC_MCO1Source, uint32_t RCC_MCO1Div)
{
  uint32_t tmpreg = 0;
  
  /* Check the parameters */
  assert_param(IS_RCC_MCO1SOURCE(RCC_MCO1Source));
  assert_param(IS_RCC_MCO1DIV(RCC_MCO1Div));

tmpreg = RCC->CFGR;

/* Clear MCO1[1:0] and MCO1PRE[2:0] bits */
  tmpreg &= CFGR_MCO1_RESET_MASK;

/* Select MCO1 clock source and prescaler */
  tmpreg |= RCC_MCO1Source | RCC_MCO1Div;

/* Store the new value */
  RCC->CFGR = tmpreg;  
}

=======================================================

如有不对之处望指出。一起学习共同进步

邮箱:fifteenpeng@163.com

——十五

STM32之时钟输出功能相关推荐

  1. H桥驱动电机,STM32 PWM互补输出功能误用分析

    如果排查的思路对你有帮助,请记住 消雨匆匆 or  大吊工. 码字和排查很累,仅此而已 硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的. 导航车设计项目中,一个新人设计了如下 ...

  2. 31、STM8 CCO时钟输出

    文章目录 1.CCO时钟输出功能介绍 2.实验目的 3.代码实现 3.1.寄存器版 3.2.库函数版 1.CCO时钟输出功能介绍   STM8提供了一个可配置的时钟输出功能,用户可在外部管脚CCO上输 ...

  3. STM32的时钟系统RCC详细整理

    一.综述: 1.时钟源 在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz: ②HSE是高速外部时钟,可接石英/陶瓷谐 ...

  4. 【STM32】PWM 输出实验代码详解

    文章目录 main.c pwm.c pwm.h STM32 的定时器除了 TIM6 和 7,其他的定时器都可以用来产生 PWM 输出. 高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 ...

  5. STM32系统时钟默认设置

    "我们一直都说STM32有一个非常复杂的时钟系统,然而在原子或者野火的例程中,只要涉及到时钟,我们却只能看到类似的库函数调用,如RCC_APB2PeriphClockCmd(RCC_APB2 ...

  6. STM32的时钟系统RCC详细整理(转)

    一.综述: 1.时钟源 在 STM32 中,一共有 5 个时钟源,分别是 HSI . HSE . LSI . LSE . PLL . ①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz : ② ...

  7. pwm一个时间单位_详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!...

    一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并 ...

  8. STM32的时钟配置——时钟树解析

    此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...

  9. stm32 PWM互补输出

    stm32高级定时器例子-stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体,用于定时器基础参数设置,与TIM_TimeBaseInit函数配合 ...

最新文章

  1. python实现客户端和服务器端传输图片
  2. Windows Phone 7 Image Controller: Zoom In, Zoom Out, and Rotate (WP 7 图像控制器:放大,缩小,旋转)...
  3. Oracle作业队列入门图文解说
  4. javaee 设计模式_JavaEE重新审视设计模式:装饰器
  5. macaca web(4)
  6. 纯虚函数--抽象类中的this到底指的是哪个子类实例呢
  7. Day 02 第二天课时总结
  8. SQL2008无法连接到(local),该账户当前被锁定,所以Sa用户登陆失败
  9. Links about 技术大牛Joseph Yiu ...姚文祥(Joseph Yiu)
  10. 第十一章:如何拆分项目目标?
  11. 解决git命令You must use a personal access token or SSH key的问题
  12. web前端(HTML的CSS样式和JavaScript)
  13. 天平游码读数例题_2019使用天平游码时的读数方法语文
  14. 实现对 2:3 或者3:2的图片进行1:1裁剪
  15. char(10)和nchar(10)的区别
  16. 一口气笑穿极简印度史,简到崩溃,笑到流泪(二)
  17. 爆肝一周,用Python在物联网设备上写了个智能语音助手
  18. 【MPC5744P】劳特巴赫调试器Trace32的使用方法
  19. DeerFU.管理系统隆重上市《免费版》
  20. Avnet EDI需求分析

热门文章

  1. proe常用c语言语句,Proe如何使用if条件语句?
  2. 基于LCC谐振补偿网络的无线充电技术的研究
  3. java 访问 domino_java程序远程访问Domino数据库简例
  4. java火车票售票系统,火车购票系统,系统实现了用户会员管理、火车车次管理、火车座位管理、系统公告管理、火车票退票、火车票换乘、换乘查询、直达查询、乘车人管理、订单管理、个人中心管理等
  5. ESP8266 阿里云物联网平台 (详细步骤)
  6. 国外2个在线web程序代码编辑网站
  7. 【网络安全】文件包含漏洞总结
  8. 02.数学建模的步骤
  9. 散列表ADT--分离链接法
  10. vue+echarts平面地图和飞线