STM32之时钟输出功能
很多时候,我们想让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之时钟输出功能相关推荐
- H桥驱动电机,STM32 PWM互补输出功能误用分析
如果排查的思路对你有帮助,请记住 消雨匆匆 or 大吊工. 码字和排查很累,仅此而已 硬件不是抄电路,拿烙铁,懂点软件,细致分析,找问题和破案搜集线索是一样的. 导航车设计项目中,一个新人设计了如下 ...
- 31、STM8 CCO时钟输出
文章目录 1.CCO时钟输出功能介绍 2.实验目的 3.代码实现 3.1.寄存器版 3.2.库函数版 1.CCO时钟输出功能介绍 STM8提供了一个可配置的时钟输出功能,用户可在外部管脚CCO上输 ...
- STM32的时钟系统RCC详细整理
一.综述: 1.时钟源 在STM32中,一共有5个时钟源,分别是HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz: ②HSE是高速外部时钟,可接石英/陶瓷谐 ...
- 【STM32】PWM 输出实验代码详解
文章目录 main.c pwm.c pwm.h STM32 的定时器除了 TIM6 和 7,其他的定时器都可以用来产生 PWM 输出. 高级定时器 TIM1 和 TIM8 可以同时产生多达 7 路的 ...
- STM32系统时钟默认设置
"我们一直都说STM32有一个非常复杂的时钟系统,然而在原子或者野火的例程中,只要涉及到时钟,我们却只能看到类似的库函数调用,如RCC_APB2PeriphClockCmd(RCC_APB2 ...
- STM32的时钟系统RCC详细整理(转)
一.综述: 1.时钟源 在 STM32 中,一共有 5 个时钟源,分别是 HSI . HSE . LSI . LSE . PLL . ①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz : ② ...
- pwm一个时间单位_详解STM32的PWM输出及频率和脉宽(占空比)的计算——寄存器配置六步曲!...
一.stm32的pwm输出引脚是使用的IO口的复用功能. 二.T2~T5这4个通用定时器均可输出4路PWM--CH1~CH4. 三.我们以tim3的CH1路pwm输出为例来进行图文讲解(其它类似),并 ...
- STM32的时钟配置——时钟树解析
此文章由于讲得较详细因此篇幅较长,请带着一点耐心去读,相信会有收获! 目录 STM32为什么要有复杂的时钟系统 详解STM32时钟系统 STM32有几个时钟源 关于时钟输出 软件配置时钟 STM32为 ...
- stm32 PWM互补输出
stm32高级定时器例子-stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体,用于定时器基础参数设置,与TIM_TimeBaseInit函数配合 ...
最新文章
- python实现客户端和服务器端传输图片
- Windows Phone 7 Image Controller: Zoom In, Zoom Out, and Rotate (WP 7 图像控制器:放大,缩小,旋转)...
- Oracle作业队列入门图文解说
- javaee 设计模式_JavaEE重新审视设计模式:装饰器
- macaca web(4)
- 纯虚函数--抽象类中的this到底指的是哪个子类实例呢
- Day 02 第二天课时总结
- SQL2008无法连接到(local),该账户当前被锁定,所以Sa用户登陆失败
- Links about 技术大牛Joseph Yiu ...姚文祥(Joseph Yiu)
- 第十一章:如何拆分项目目标?
- 解决git命令You must use a personal access token or SSH key的问题
- web前端(HTML的CSS样式和JavaScript)
- 天平游码读数例题_2019使用天平游码时的读数方法语文
- 实现对 2:3 或者3:2的图片进行1:1裁剪
- char(10)和nchar(10)的区别
- 一口气笑穿极简印度史,简到崩溃,笑到流泪(二)
- 爆肝一周,用Python在物联网设备上写了个智能语音助手
- 【MPC5744P】劳特巴赫调试器Trace32的使用方法
- DeerFU.管理系统隆重上市《免费版》
- Avnet EDI需求分析
热门文章
- proe常用c语言语句,Proe如何使用if条件语句?
- 基于LCC谐振补偿网络的无线充电技术的研究
- java 访问 domino_java程序远程访问Domino数据库简例
- java火车票售票系统,火车购票系统,系统实现了用户会员管理、火车车次管理、火车座位管理、系统公告管理、火车票退票、火车票换乘、换乘查询、直达查询、乘车人管理、订单管理、个人中心管理等
- ESP8266 阿里云物联网平台 (详细步骤)
- 国外2个在线web程序代码编辑网站
- 【网络安全】文件包含漏洞总结
- 02.数学建模的步骤
- 散列表ADT--分离链接法
- vue+echarts平面地图和飞线