我尝试在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的定义并没有真正帮助我 谢谢
答案 0 :(得分: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
答案 1 :(得分:0)
对于libopencm3,它也是头文件的问题。 对于MCO,应为其获取时钟的配置位位于[27:24]位置的时钟配置寄存器(RCC_CFGR)中(至少对于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);