STM32之如何将时钟脉冲映射到IO输出

8 篇文章 0 订阅
5 篇文章 0 订阅
本文介绍了如何通过STM32单片机的MCO功能,将时钟脉冲映射到GPIO输出,以验证晶振精度。以STM32F030C8T6为例,详细解析了源码实现,并提醒了在使用过程中关于API选择和预编译条件设置的注意事项。
摘要由CSDN通过智能技术生成

写在前面

有时为了验证晶振的精度,一种方式就是直接测量晶振的引脚的脉冲频率,这种方式的成本和测试条件都比较高,另一种方式就是经过单片机处理后经普通IO口输出,这种方式只要有普通的频率计或者示波器即可验证。
测试MCU:STM32F030C8T6
原理分析STM32F030C8T6或其他系列的单片机有一个功能叫MCO: Microcontroller clock output,可以将以下时钟输出到特定的GPIOA->Pin8:详见stm32f0xx_rcc.hRCC_MCO_Clock_Source
在这里插入图片描述

源码

stm32F0

void MCO_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	// RCC_ClockSecuritySystemCmd(ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_0);
	/* 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;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	RCC_MCOConfig(RCC_MCOSource_HSE, RCC_MCOPrescaler_16);
    while (1)
    {
        ;
    }
}

stm32F1

void MCO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    // RCC_ClockSecuritySystemCmd(ENABLE);
    RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    // GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_0);
    /* Configure MCO (PA8) */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    RCC_MCOConfig(RCC_MCO_PLLCLK_Div2);
    while (1)
    {
        ;
    }
}

注意事项

  1. APIvoid RCC_MCOConfig(uint8_t RCC_MCOSource, uint32_t RCC_MCOPrescaler)的形参RCC_MCOPrescalerSTM32F030x8系列中无效。
  2. MCO功能的输出似乎与IO口的配置的GPIO_Speed无关,测试过程,配置RCC_MCOSourceRCC_MCOSource_PLLCLK时,即倍频后的时钟72MHz(板子上的外部晶振12MHz),IO口也可以正常输出72MHz频率的脉冲
  3. 一开始没注意编译器的预编译条件的配置,没选择正确的型号,造成API的调用错误,一直打不出脉冲,需要注意在如下图中配置好该预编译条件,仔细看源码也是可以发现问题的在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值