Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32L05x
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
bark
Доброго времени суток.

Пытаюсь решить задачу с динамическим изменением частоты тактирования от внутреннего источника MSI.
Необходимо переключаться между двумя частотами 1.048Мгц и 65,535кГц.

Контролер STM32L051K8U6.

Код
void SystemClock_Config(uint32_t RCC_MSIRANGE_VALUE)
{
  //RCC_MSIRANGE_VALUE= RCC_MSIRANGE_4
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  /* Enable Power Control clock */
  __PWR_CLK_ENABLE();

  /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency, to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /* Enable MSI Oscillator */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
  RCC_OscInitStruct.MSIState = RCC_MSI_ON;
  RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_VALUE;
  RCC_OscInitStruct.MSICalibrationValue = 0x00;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }

  /* Select MSI as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV2;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    /* Initialization Error */
    Error_Handler();
  }

  /* Set MSI range to 4 */
  __HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_4);
}



В процессе работы пытаюсь перенастроить на частоту RCC_MSIRANGE_0 (65кГц)
Код
__HAL_RCC_MSI_RANGE_CONFIG(RCC_MSIRANGE_0);


Контроллер при этом зависает.

Скажите, возможно ли это впринципе (не перезагружая контроллер к примеру по WDG) и если да - то как это правильно сделать.
ViKo
Переключиться на что-нибудь альтернативное, работающее, настроить то, что надо, включить, дождаться, что работает, переключиться на него.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.