STM32输出MCO配置

STM32 Output MCO configuration

我尝试在我的 STM32f103 上配置我的 MCO 输出,仅使用 STD 外设库。

这是我的代码:

    void OutputMCO() {
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

/* Output clock on MCO pin ---------------------------------------------*/

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// pick one of the clocks to spew
//RCC_MCOConfig(RCC_MCOSource_SYSCLK); // Put on MCO pin the: System clock selected
//RCC_MCOConfig(RCC_MCOSource_HSE); // Put on MCO pin the: freq. of external crystal
//RCC_MCOConfig(RCC_MCOSource_PLLCLK_Div2); // Put on MCO pin the: System clock selected
}

我这里有个问题:

// pick one of the clocks to spew
//RCC_MCOConfig(RCC_MCOSource_SYSCLK); // Put on MCO pin the: System clock selected
//RCC_MCOConfig(RCC_MCOSource_HSE); // Put on MCO pin the: freq. of external crystal
//RCC_MCOConfig(RCC_MCOSource_PLLCLK_Div2); // Put on MCO pin the: System clock selected
3 种可能性中的

None 正在处理我的代码。这段代码是在网上找到的。你知道我应该在哪里找到正确的参数吗? RCC_MCOSource 的定义并没有真正帮助我 谢谢

我在文件 stm32f10x_rcc 中找到了解决方案:

#define RCC_MCO_NoClock                  ((uint8_t)0x00)
#define RCC_MCO_SYSCLK                   ((uint8_t)0x04)
#define RCC_MCO_HSI                      ((uint8_t)0x05)
#define RCC_MCO_HSE                      ((uint8_t)0x06)
#define RCC_MCO_PLLCLK_Div2  

libopencm3 也是头文件的问题。 MCO 应为其获取时钟的配置位位于时钟配置寄存器 (RCC_CFGR) 的 [27:24] 位置(至少对于 STM32f0 系列)。

如果您现在尝试像下面这样将 MCO 配置为 SYSCLK,它不会工作。

RCC_CFGR = (RCC_CFGR & ~RCC_CFGR_MCO_MASK) | RCC_CFGR_MCO_SYSCLK;

如果您查看库文件 rcc.h,您会发现一行:

#define RCC_CFGR_MCO_SYSCLK         4

所以你写的是位位置 2 而不是 26。

解法:

RCC_CFGR = (RCC_CFGR & ~(RCC_CFGR_MCO_MASK << 24)) | (RCC_CFGR_MCO_SYSCLK << 24);