Перейти к содержанию
    

Debug SWV не читаемые символы

При старте МК вывод сообщений через 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть предположения?
Вероятно, нужно измениь делитель скорости последоательного порта (UART) с учетом новой тактовой частоты.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вероятно, нужно измениь делитель скорости последоательного порта (UART) с учетом новой тактовой частоты.

 

ДА не написал реализацию printf.

Вывод в порт SWV 0 без участия UART, вот таким способом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендую перейти на RTT. https://habr.com/post/259205/

Не требуется ножка SWO, вывод по прерываниям

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...