我的颈 发表于 2015-12-22 11:27:54

STM32F410RB NUCLEO 时钟为什么会很准????

我使用的是STM32F410RBNUCLEO
板子上没有板载 晶振
使用的是内部的16MHz RC振荡器
通过锁相环 倍频到 100MHz
我使用MCO1输出PLL
MCO1 5分频
然后使用分析仪抓取得到20.00MHz
我的疑问是为什么会这么准?

RC不是有偏差?
不是有温漂?
求解释?:o
谢谢!:)

https://www.stmcu.org.cn/module/forum/data/attachment/forum/201512/21/172014rk4jffj666wl64ik.png




moyanming2013 发表于 2015-12-22 12:12:49

基本都是用的STLINK上的8MHz晶振。

风子 发表于 2015-12-22 13:02:52

STLINK 的MCO输出精准的 8M 给MCU用,跟外部晶振一样,,你这不是用的内部吧

我的颈 发表于 2015-12-22 14:02:26

风子 发表于 2015-12-22 13:02
STLINK 的MCO输出精准的 8M 给MCU用,跟外部晶振一样,,你这不是用的内部吧


大神解释下?
我感觉我遇到问题了.求涨知识

我的颈 发表于 2015-12-22 14:02:53

moyanming2013 发表于 2015-12-22 12:12
基本都是用的STLINK上的8MHz晶振。

大神看下?
我哪错了/:funk:

yanhaijian 发表于 2015-12-22 14:06:28

手册上写的内部RC误差10%。

我的颈 发表于 2015-12-22 14:08:51

yanhaijian 发表于 2015-12-22 14:06
手册上写的内部RC误差10%。

STlink PA8 MCO 确实输出到STM32F410 的OSC_IN
频率如下









我的颈 发表于 2015-12-22 14:09:25

yanhaijian 发表于 2015-12-22 14:06
手册上写的内部RC误差10%。

明明是1%吗

moyanming2013 发表于 2015-12-22 14:18:05

我的颈 发表于 2015-12-22 14:02
大神看下?
我哪错了/

Cube里面设置的是倍频、等上层时钟,并看不到输入的晶振是哪个,具体还得看下代码,如果你没改过(基本可以确定你没改过),那用的就是STLINK上的8MHz晶振。

我的颈 发表于 2015-12-22 14:25:15

moyanming2013 发表于 2015-12-22 14:18
Cube里面设置的是倍频、等上层时钟,并看不到输入的晶振是哪个,具体还得看下代码,如果你没改过(基本可 ...

我用的寄存器自己配置的
首先是系统的SystemInit
void SystemInit(void)
{
/* FPU settings ------------------------------------------------------------*/
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
    SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));/* set CP10 and CP11 Full Access */
#endif
/* Reset the RCC clock configuration to the default reset state ------------*/
/* Set HSION bit */
RCC->CR |= (uint32_t)0x00000001;

/* Reset CFGR register */
RCC->CFGR = 0x00000000;

/* Reset HSEON, CSSON and PLLON bits */
RCC->CR &= (uint32_t)0xFEF6FFFF;

/* Reset PLLCFGR register */
RCC->PLLCFGR = 0x24003010;

/* Reset HSEBYP bit */
RCC->CR &= (uint32_t)0xFFFBFFFF;

/* Disable all interrupts */
RCC->CIR = 0x00000000;

/* Configure the Vector Table location add offset address ------------------*/
#ifdef VECT_TAB_SRAM
SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
#else
SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
#endif
}然后是自己的配置
/**
                                这是官方库函数的参数,我们按照他的参数设定
*            System Clock source            = PLL (HSI)
*            SYSCLK(Hz)                     = 100000000
*            HCLK(Hz)                     = 100000000
*            AHB Prescaler                  = 1
*            APB1 Prescaler               = 2
*            APB2 Prescaler               = 1
*            HSI Frequency(Hz)            = 16000000
*            PLL_M                        = 16
*            PLL_N                        = 200
*            PLL_P                        = 2
*            PLL_Q                        = 7
*            PLL_R                        = 2
*            VDD(V)                         = 3.3
*            Main regulator output voltage= Scale2 mode
*            Flash Latency(WS)            = 3
*/
void SYSClock_Init(void)
{
        RCC->APB1ENR        |=1<<28;                                                                                //使能PWR
        PWR->CR                        |=3<<14;                                                                         //        等级3
        RCC->CFGR                |=(0<<4)|(4<<10)|(0<<13);                                //AHB不分频 APB1 2分频   APB2 不分频
        RCC->CFGR                |=3<<21;                                                                                //时钟输出 测试PLL
        RCC->CFGR                |=7<<24;                                                                                //5分频
        RCC->PLLCFGR        =(16<<0)|(200<<6)|(0<<16)|(7<<24)|(2<<28);        //M N P Q R
        RCC->CR                         |=1<<24;                                                                                //使能PLL
        while(!((RCC->CR>>25)&0x01));                                                                //等待 Ready
        FLASH->ACR                |=1<<8;                                                                                //        Prefetch
        FLASH->ACR                |=1<<9;                                                                                //Instruction cache
        FLASH->ACR                |=1<<10;                                                                                //Data cache
        FLASH->ACR                |=3<<0;                                                                                //3个延时

        RCC->CFGR                &=~(3<<0);                                                                        //清除
        RCC->CFGR                |=2<<0;                                                                                //PLL source
        while((RCC->CFGR&(3<<2))!=(2<<2));                                                //等待就绪
        SYSTick_Init(100);                                                                                        //滴答定时器
}是不是SystenInit的问题?
我试试
页: [1] 2
查看完整版本: STM32F410RB NUCLEO 时钟为什么会很准????