久芯网

STM32G070RB HSI 时钟配置失败

avatar xiaoyan 提问时间: 2023-07-08 06:41:16 / 未解决

我们产品有3个模式,正常工作模式(48MHZ HSI),休眠模式(8MHZ HSI),省电模式(48MHZ HSI)

1, 上电默认会将产品配置到正常工作模式,但是当系统从省电模式恢复到正常工作模式时,系统会死机。(注:当我们MASK下面的时钟初始化代码就不会有这个问题。而且不是所有的机子都会出现)

2, 可是在休眠模式恢复到正常工作模式时,就不会死机。是运行同一段代码。

时钟初始化代码为:

LL_RCC_DeInit();

LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);

/ LSI configuration and activation /

if(0 == LL_RCC_LSI_IsReady())

{

LL_RCC_LSI_Enable();

while(0 == LL_RCC_LSI_IsReady()); }

s_eClockFreq = eClock;

LL_UTILS_PLLInitTypeDef stPllConf = {LL_RCC_PLLM_DIV_1, 1, LL_RCC_PLLR_DIV_2};

LL_UTILS_ClkInitTypeDef stClkConf = {LL_RCC_SYSCLK_DIV_1, LL_RCC_APB1_DIV_1};

/ Main PLL configuration and activation /

switch(eClock)

{

case E_CLOCK_FREQ_48MHZ:

// 16 * 12 / 2 / 2 = 48M

stPllConf = {LL_RCC_PLLM_DIV_2, 12, LL_RCC_PLLR_DIV_2};

stClkConf = {LL_RCC_SYSCLK_DIV_1, LL_RCC_APB1_DIV_1};

LL_PLL_ConfigSystemClock_HSI(&stPllConf,&stClkConf);

break;

case E_CLOCK_FREQ_32MHZ:

// 16 * 8 / 2 = 64M

stPllConf = {LL_RCC_PLLM_DIV_1, 8, LL_RCC_PLLR_DIV_2};

// 64 / 2 = 32M

stClkConf = {LL_RCC_SYSCLK_DIV_2, LL_RCC_APB1_DIV_1};

LL_PLL_ConfigSystemClock_HSI(&stPllConf,&stClkConf);

break;

case E_CLOCK_FREQ_24MHZ:

// 16 * 12 / 2 / 2 = 48M

stPllConf = {LL_RCC_PLLM_DIV_2, 12, LL_RCC_PLLR_DIV_2};

// 48 / 2 = 24M

stClkConf = {LL_RCC_SYSCLK_DIV_2, LL_RCC_APB1_DIV_1};

LL_PLL_ConfigSystemClock_HSI(&stPllConf,&stClkConf);

break;

case E_CLOCK_FREQ_16MHZ:

// default is HSI

break;

case E_CLOCK_FREQ_4MHZ:

LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_4);

break;

case E_CLOCK_FREQ_8MHZ:

default:

LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);

break;

}

// update system clock frequency

SystemCoreClockUpdate();

LL_RCC_GetSystemClocksFreq(&s_stSystemClocks);

// system tick configure

LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);

SysTick_Config((s_stSystemClocks.HCLK_Frequency / 1000));

// Enable used peripheral clock

Drv_Clk_EnableUsedPeripheralsClock();


如需获得 STM32G070RB 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

2个回答
  • avatar butterflyspring
    回答时间: 2023-07-08 07:04:09

    看起来等待周期不合适,按照手册上介绍,配置少了。

  • avatar xiaoyan
    回答时间: 2023-07-08 07:34:55

    是的,改成2个等待周期,解决了这个问题。非常感谢!请教一下LL_RCC_DeInit(); 不是相当于把时钟复位到16MHZ吗?

会员中心 微信客服
客服
回到顶部