这里将HSE_VALUE改为12MHz,
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)12000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
/************************* PLL Parameters *************************************/
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M (HSE_VALUE / 1000000)
#define PLL_N 336
/* SYSCLK = PLL_VCO / PLL_P */
#define PLL_P 2
/* USB OTG FS, SDIO and RNG Clock = PLL_VCO / PLLQ */
#define PLL_Q 7
/*******************************************************************************
* Function Name : SysTick_Configuration
* Description : Configures the SysTick for OS tick.
* Input : None
* Output : None
* Return : None
*******************************************************************************/
void SysTick_Configuration(void)
{
RCC_ClocksTypeDef rcc_clocks;
rt_uint32_t cnts;
RCC_GetClocksFreq(&rcc_clocks);
cnts = (rt_uint32_t)rcc_clocks.HCLK_Frequency / RT_TICK_PER_SECOND;
cnts = cnts / 8;
SysTick_Config(cnts);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
}
实际运行时,rt_thread_delay(RT_TICK_PER_SECOND);函数比实际快1.5倍,即实际延时只有三分之二秒,rt-thread-v3.1.0版本,stm32F407VET6,晶振是12MHz
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
rcc_clocks.HCLK_Frequency = 168000000,搞不明白1.5倍这个关系从何而来
根据您的建议试了一下,定时器和rt_thread_delay一样都快1.5倍,使用之前的程序(在rt_thread_v2.1的版本上)时钟是准的,板子上的晶振12MHz可以确定没有问题,SysTick设置上,应该只用更改HSE_VALUE=12000000吧,原先是25000000,而且调试时SYSTEM_Frequency=168M,HCLK_Frequency=168M,PLCK1_Frequency=42M,PLCK2_Frequency=84M,都是正常的,感觉像是时钟源没选对,选成了内部时钟源HSI=16M,但是不知道在哪里设置
一周热门 更多>