1

我尝试在我的 STM32f103 上配置我的 MCO 输出,仅使用 STD periph lib。

这是我的代码:

    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

这三种可能性都不适用于我的代码。此代码是在互联网上找到的。你知道我应该在哪里找到正确的参数吗?RCC_MCOSource 的定义并没有真正帮助我谢谢

4

2 回答 2

1

我在文件 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  
于 2017-09-10T18:11:32.667 回答
0

对于 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);
于 2019-01-21T00:30:33.433 回答