问题描述
我正在尝试从 HSE 以 80mhz 的频率运行我的 Nucleo f401re
int F4xxx::clockInit(int pllM,int pllN,int pllP,int pllQ)
{
enableHse();
//FLASH
CLEAR_BIT(FLASH->ACR,FLASH_ACR_PrftEN);
FLASH->ACR&= ~FLASH_ACR_LATENCY;
FLASH->ACR |= FLASH_ACR_LATENCY_5WS | FLASH_ACR_ICEN | FLASH_ACR_DCEN|FLASH_ACR_PrftEN;
//set HSE as PLL source
RCC->PLLCFGR = RCC_PLLCFGR_PLLSRC_HSE;
//
RCC->CR &= ~(RCC_CR_PLLON); //disable PLL before changes
//
RCC->PLLCFGR = pllM|(pllN<<6)|(((pllP>>1)-1)<<16)|RCC_PLLCFGR_PLLSRC_HSE|(pllQ<<24);
RCC->CR|=RCC_CR_PLLON;
while(!(RCC->CR&RCC_CR_PLLRDY));
RCC->CFGR &= ~(RCC_CFGR_HPRE); //Prescaler 1
RCC->CFGR |= RCC_CFGR_HPRE_DIV1; //AHB = SYSCLK/1
//APB2 Prescaler 2
RCC->CFGR &= ~(RCC_CFGR_PPRE2);
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; //APB2 /1
RCC->CFGR &= ~(RCC_CFGR_PPRE1);
RCC->CFGR|=RCC_CFGR_PPRE1_DIV1; // APB1 /2
RCC->CFGR &= ~RCC_CFGR_SW; // reset SW0,SW1.
RCC->CFGR |= RCC_CFGR_SW_PLL;
RCC->CR|=RCC_CR_PLLON;
while((RCC->CFGR & RCC_CFGR_SWS)!=RCC_CFGR_SWS_PLL); // wait for switching to PLL (while PLL is not used as system clock)
// for power saving
RCC->CR &= ~(RCC_CR_HSION);
return 0;
}
void F4xxx::enableHse()
{
// for control MCO2 (PC9): (freq=SYSCLK/5)
RCC->AHB1ENR|=RCC_AHB1ENR_GPIOCEN;
GPIOC->MODER&=~GPIO_MODER_MODE9;
GPIOC->MODER|=GPIO_MODER_MODE9_1;
GPIOC->OSPEEDR|=GPIO_OSPEEDER_OSPEEDR9;
RCC->CFGR|=RCC_CFGR_MCO2PRE;
RCC->CR |= (RCC_CR_HSEON); //Enable HSE
while( !(RCC->CR & RCC_CR_HSERDY) ) {}; //ready to start HSE
}
然后像这样调用它:
f4.clockInit(8,336,2,7);
但是我的逻辑分析仪显示频率不稳定
level=1 的峰宽^-1 = 16 mhz 但 level=0 的峰宽^-1 = 8 mhz 和 5.33 mhz
什么会导致如此不稳定的频率?
解决方法
如果我没记错的话,您的逻辑分析仪屏幕截图来自 Saleae 软件。除非您拥有使用 USB 3 的最新型号之一,否则我猜您的采样频率最大限制为 24 MHz。基于 FX2 的廉价克隆也是这种情况。基本上,您需要 USB 3 OR 内部缓冲存储器 OR 能够对减少的通道数量进行采样,例如 3 个左右,以便以高于 24 MHz 的速度进行采样。
您没有告诉您的采样频率,但根据可用信息,我假设它限制为 24 MHz。奈奎斯特采样定理指出,您需要以比测量的信号快至少 2 倍的速度进行采样。因此,对于 16 MHz 信号,您至少需要 32 MHz 的采样率。在较低的采样频率下,您会观察到一种称为混叠的现象,您测量的信号似乎具有较低的频率。
请记住,32 MHz 是理论上的最小值,您仍然可能(并且可能会)观察到信号中的失真。对于模拟信号,通常使用 x10 或 x20 采样率。对于您测量的数字信号,x4 可能没问题。
不久前,我不得不使用 Saleae 克隆来调试 USB 全速总线 (12 MHz)。使用 24 MHz 采样率有时有效,有时无效。当它没有时,我按下按钮并再次尝试我的机会......
所以,您可能根本没有问题。由于设备的限制,您无法正确测量您的信号。当您重复测量时,您可能会不时遇到相同的采样问题。