STM32 HSE频率不稳定
STM32 HSE unstable frequency
我正在尝试 运行 我的 Nucleo f401re 在 80mhz 从 HSE
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 的峰有 width^-1 = 8 mhz 和 5.33 mhz
频率不稳定的原因是什么?
如果我没记错的话,你的逻辑分析仪截图来自Saleae软件。除非您拥有使用 USB 3 的最新型号之一,否则我猜您的采样频率最大限制为 24 MHz。基于 FX2 的廉价克隆也是如此。基本上,您需要 USB 3 OR 内部缓冲存储器 OR 能够对减少的通道数进行采样,例如 3 个左右以便采样速度快于 24兆赫.
你没有告诉你的采样频率,但根据现有信息,我认为它限制在 24 MHz。奈奎斯特采样定理指出,您的采样速度至少需要比您测量的信号快 2 倍。因此,对于 16 MHz 的信号,您至少需要 32 MHz 的采样率。在较低的采样频率下,您会观察到一种称为 混叠 的现象,其中您测量的信号似乎具有较低的频率。
请记住,32 MHz 是理论上的最小值,您仍然可能(并且很可能会)观察到信号失真。对于模拟信号,通常使用 x10 或 x20 采样率。对于像您测量的数字信号,x4 可能没问题。
不久前,我不得不使用 Saleae 克隆调试 USB 全速总线 (12 MHz)。使用 24 MHz 采样率有时有效,有时无效。当它没有时,我按下按钮并再次尝试机会...
所以,您可能根本没有问题。由于设备的限制,您无法正确测量信号。当您重复测量时,您可能会不时遇到相同的采样问题。
我正在尝试 运行 我的 Nucleo f401re 在 80mhz 从 HSE
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 的峰有 width^-1 = 8 mhz 和 5.33 mhz
频率不稳定的原因是什么?
如果我没记错的话,你的逻辑分析仪截图来自Saleae软件。除非您拥有使用 USB 3 的最新型号之一,否则我猜您的采样频率最大限制为 24 MHz。基于 FX2 的廉价克隆也是如此。基本上,您需要 USB 3 OR 内部缓冲存储器 OR 能够对减少的通道数进行采样,例如 3 个左右以便采样速度快于 24兆赫.
你没有告诉你的采样频率,但根据现有信息,我认为它限制在 24 MHz。奈奎斯特采样定理指出,您的采样速度至少需要比您测量的信号快 2 倍。因此,对于 16 MHz 的信号,您至少需要 32 MHz 的采样率。在较低的采样频率下,您会观察到一种称为 混叠 的现象,其中您测量的信号似乎具有较低的频率。
请记住,32 MHz 是理论上的最小值,您仍然可能(并且很可能会)观察到信号失真。对于模拟信号,通常使用 x10 或 x20 采样率。对于像您测量的数字信号,x4 可能没问题。
不久前,我不得不使用 Saleae 克隆调试 USB 全速总线 (12 MHz)。使用 24 MHz 采样率有时有效,有时无效。当它没有时,我按下按钮并再次尝试机会...
所以,您可能根本没有问题。由于设备的限制,您无法正确测量信号。当您重复测量时,您可能会不时遇到相同的采样问题。