Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Debug SWV не читаемые символы
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Muxamor
При старте МК вывод сообщений через printf и настройке SWV (Core clock = 4 MHz ) работает как положено, то-есть получаю в читабельном виде сообщения Test1 и Test2.
Проблема возникает при перенастройке тактирования МК на максимальную частоту 80MHz. После настройки тактирования SystemClock_Config(), через printf и настройке SWV (Core clock = 80MHz ) получаю не читаемые символы, то-есть вместо Test3 и Test4 получаю что попало.

Код

int main(void){
  LL_Init();
  printf("Test1 \r\n");
  printf("Test2 \r\n");
  
  SystemClock_Config();

  while(1){
  printf("Test3 \r\n");
  printf("Test4 \r\n");
  }
  
}


Код
void SystemClock_Config(void){

  LL_FLASH_SetLatency(LL_FLASH_LATENCY_4);

  if(LL_FLASH_GetLatency() != LL_FLASH_LATENCY_4){
  Error_Handler();
  }

  LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);

  //Enable HSI
  LL_RCC_HSI_Enable();
    // Wait till HSI is ready
  while(LL_RCC_HSI_IsReady() != 1);
  LL_RCC_HSI_SetCalibTrimming(16);

// Enable LSI
  LL_RCC_LSI_Enable();

   /* Wait till LSI is ready */
  while(LL_RCC_LSI_IsReady() != 1);


  LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSI, LL_RCC_PLLM_DIV_1, 10, LL_RCC_PLLR_DIV_2);
  LL_RCC_PLL_Enable();
  LL_RCC_PLL_EnableDomain_SYS();

   /* Wait till PLL is ready */
  while(LL_RCC_PLL_IsReady() != 1);

  LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);

   /* Wait till System clock is ready */
  while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL);

  LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_1);
  LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
  LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
  LL_Init1msTick(80000000);
  LL_SYSTICK_SetClkSource(LL_SYSTICK_CLKSOURCE_HCLK);
  LL_SetSystemCoreClock(80000000);

  LL_RCC_SetUSARTClockSource(LL_RCC_USART1_CLKSOURCE_SYSCLK);
  LL_RCC_SetI2CClockSource(LL_RCC_I2C1_CLKSOURCE_SYSCLK);

  /* SysTick_IRQn interrupt configuration */
  NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0, 0));
}


LL_RCC_GetSystemClocksFreq - возвращает значения согласно расчетным = 80MHz

По всей видимости где-то не совсем правильно настраивается частота, но не понятно, что именно не так.

Есть предположения?

Запускаю на NUCLEO-L452RE, среда TrueStudio.
Сергей Борщ
QUOTE (Muxamor @ Jul 2 2018, 10:46) *
Есть предположения?
Вероятно, нужно измениь делитель скорости последоательного порта (UART) с учетом новой тактовой частоты.
Muxamor
Цитата(Сергей Борщ @ Jul 2 2018, 18:45) *
Вероятно, нужно измениь делитель скорости последоательного порта (UART) с учетом новой тактовой частоты.


ДА не написал реализацию printf.
Вывод в порт SWV 0 без участия UART, вот таким способом
uriy
Рекомендую перейти на RTT. https://habr.com/post/259205/
Не требуется ножка SWO, вывод по прерываниям
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.