hsyhsy571639119 发表于 2019-3-27 18:31:22

STM32L052时钟问题

本人使用STM32L052K8T6时出现采用全速运行时(32M)移植的延时程序无问题,当降低频率时,会出现延时卡死的问题,对比全速和非全速时时钟的配置,经过试验发现全速时生成的配置文件中初始化的是FLASH_LATENCY_1,而非全速时初始化的是FLASH_LATENCY_0,
当我在非全速运行时(16M)将FLASH_LATENCY_0改为FLASH_LATENCY_1时,程序刚开始能运行,快运行1分钟时,单片机死机,不明白FLASH_LATENCY_1是配置的啥,如何改才能使非全速时也能用延时,延时函数肯定没问题的


延时函数的初始化代码如下
void delay_init()
{
          /**Configure the Systick interrupt time
    */
// HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick
    */
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8);//ÄÚ²¿Ê±ÖÓ
/* SysTick_IRQn interrupt configuration */
// HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
        fac_us=2;                                //ΪϵͳʱÖÓµÄ
        fac_ms=(uint16_t)fac_us*1000;                                        //·ÇOSÏÂ,´ú±íÿ¸ömsÐèÒªµÄsystickʱÖÓÊý   
}

五哥1 发表于 2019-3-27 19:13:04

用的事滴答定时器,有点像HAL_Delay(),具体你要自己写的延时函数,建议参考下正点原子哥写的,

hsyhsy571639119 发表于 2019-3-28 09:05:16

这就是参考的,就是时钟和正点原子的不一样,所以延时函数的初始化我自己改完的,在32M的时候是正常的,在16M的时候就不行了,

发表于 2019-3-28 10:03:02

楼主,为什么要把这两句代码屏蔽掉呢?
// HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

/* SysTick_IRQn interrupt configuration */
// HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
页: [1]
查看完整版本: STM32L052时钟问题