可能的原因,
1.使用了裸机的delay_init函数
这个函数里面可能包含了以下代码
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
然后会导致以下现象:
执行 rt_thread_delay(1000); 实际延时为8秒
正确的做法是不需要做此配置,或者配置为:
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
2.HSE 时钟晶振设置不正确
网上的部分代码示例将HSE晶振设置为25M,这个时候如果自己的开发板上的外部晶振为8M,就需要手动修改配置
默认配置25M如下图:
修改为8M,
1.打开stm32f4xx.h,将上图的25000000改为8000000
#if !defined (HSE_VALUE)
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* HSE_VALUE */
2.打开system_stm32f4xx.c将25改为8
/* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N */
#define PLL_M 8
systick的初始化,照常就行
/**
* This function will initial your board.
*/
void rt_hw_board_init()
{
/* 初始化SysTick */
SysTick_Config( SystemCoreClock / RT_TICK_PER_SECOND );
/* 硬件初始化放在这里 */
/* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
rt_components_board_init();
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}