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
基本都是用的STLINK上的8MHz晶振。 STLINK 的MCO输出精准的 8M 给MCU用,跟外部晶振一样,,你这不是用的内部吧 风子 发表于 2015-12-22 13:02
STLINK 的MCO输出精准的 8M 给MCU用,跟外部晶振一样,,你这不是用的内部吧
大神解释下?
我感觉我遇到问题了.求涨知识
moyanming2013 发表于 2015-12-22 12:12
基本都是用的STLINK上的8MHz晶振。
大神看下?
我哪错了/:funk: 手册上写的内部RC误差10%。 yanhaijian 发表于 2015-12-22 14:06
手册上写的内部RC误差10%。
STlink PA8 MCO 确实输出到STM32F410 的OSC_IN
频率如下
yanhaijian 发表于 2015-12-22 14:06
手册上写的内部RC误差10%。
明明是1%吗 我的颈 发表于 2015-12-22 14:02
大神看下?
我哪错了/
Cube里面设置的是倍频、等上层时钟,并看不到输入的晶振是哪个,具体还得看下代码,如果你没改过(基本可以确定你没改过),那用的就是STLINK上的8MHz晶振。 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