你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32U5在退出LPBAM后,重新配置时钟发现MSIS时钟正常,MSIK时钟和配置不一致。

[复制链接]
阿衰0110 提问时间:2025-2-26 18:42 / 已解决

您好,我在LPBAM停止函数后调用时钟重新初始化函数(此函数和CUBEMX生成的SystemClock_Config()函数一致,仅仅只是重新写了一遍而已),通过串口输出MSIS和MSIK的寄存器值(通过调用HAL_RCC_GET_MSI_RANGE()和HAL_RCC_GET_MSIK_RANGE()宏),发现在时钟重新初始化函数执行完后,仅MSIS寄存器值正确(1MHz),MSIK寄存器值为0(对应是48MHz),导致部分使用MSIK时钟的外设运行异常!

image.png

/**

  • @brief 系统时钟配置(MSIS和MSIK)
  • @param clockFlag : 系统时钟配置标志 @ref sys_api_clock_flag
  • @arg SYS_API_CLOCK_1M : 1MHz
  • @arg SYS_API_CLOCK_2M : 2MHz
  • @arg SYS_API_CLOCK_4M : 4MHz
  • @arg SYS_API_CLOCK_12M : 12MHz
  • @arg SYS_API_CLOCK_16M : 16MHz
  • @arg SYS_API_CLOCK_24M : 24MHz
  • @retval None

*/

void sys_api_system_clock_config(uint8_t clockFlag)

{

uint32_t clockRange;

RCC_OscInitTypeDef RCC_OscInitStruct = {0};

RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

switch(clockFlag)

{

case SYS_API_CLOCK_1M:

    clockRange = RCC_MSIRANGE_7;

    break;

case SYS_API_CLOCK_2M:

    clockRange = RCC_MSIRANGE_5;

    break;

case SYS_API_CLOCK_4M:

    clockRange = RCC_MSIRANGE_4;

    break;

case SYS_API_CLOCK_12M:

    clockRange = RCC_MSIRANGE_3;

    break;

case SYS_API_CLOCK_16M:

    clockRange = RCC_MSIRANGE_2;

    break;

case SYS_API_CLOCK_24M:

    clockRange = RCC_MSIRANGE_1;

    break;

default:

    clockRange = RCC_MSIRANGE_7;

    break;

}

/** Configure the main internal regulator output voltage

*/

if(HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE4) != HAL_OK)

{

Error_Handler();

}

/** Initializes the CPU, AHB and APB buses clocks

*/

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_MSI|RCC_OSCILLATORTYPE_MSIK;

RCC_OscInitStruct.LSIState = RCC_LSI_ON;

RCC_OscInitStruct.MSIState = RCC_MSI_ON;

RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;

RCC_OscInitStruct.MSIClockRange = clockRange;

RCC_OscInitStruct.LSIDiv = RCC_LSI_DIV1;

RCC_OscInitStruct.MSIKClockRange = clockRange;

RCC_OscInitStruct.MSIKState = RCC_MSIK_ON;

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;

if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)

{

Error_Handler();

}

/** Initializes the CPU, AHB and APB buses clocks

*/

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2|RCC_CLOCKTYPE_PCLK3;

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;

if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)

{

Error_Handler();

}

sys_api_clock_get(); }

收藏 评论1 发布时间:2025-2-26 18:42

举报

1个回答
阿衰0110 回答时间:昨天 18:53

RCC_MSIRANGE_1RCC_MSIKRANGE_1弄错了,两个的宏定义不是一个

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版