Skip to main content
JosepM Ribera
Associate II
February 26, 2019
Question

STM32L475RE only run in debug mode

  • February 26, 2019
  • 2 replies
  • 739 views

Hi everyone!

I’m working with a STM32L475RE design. The project works completely fine in “debug mode�? (using ULINK2) but doesn’t work in release mode.

I’m trying to find the code part that could be the problem, using a LED on the initiation. However, it seems that the MCU doesn’t starts. Could be a clock problem? I’m using systick time base . Below you can see my SystemClock config:

void SystemClock_Config(void)
{
 RCC_OscInitTypeDef RCC_OscInitStruct = {0};
 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
 
 /**Initializes the CPU, AHB and APB busses clocks 
 */
 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
 RCC_OscInitStruct.HSIState = RCC_HSI_ON;
 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
 RCC_OscInitStruct.PLL.PLLM = 2;
 RCC_OscInitStruct.PLL.PLLN = 12;
 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV7;
 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
 {
 Error_Handler();
 }
 /**Initializes the CPU, AHB and APB busses clocks 
 */
 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
 RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
 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_1) != HAL_OK)
 {
 Error_Handler();
 }
 PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART3|RCC_PERIPHCLK_UART5
 |RCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_ADC;
 PeriphClkInit.Usart3ClockSelection = RCC_USART3CLKSOURCE_PCLK1;
 PeriphClkInit.Uart5ClockSelection = RCC_UART5CLKSOURCE_PCLK1;
 PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
 PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
 PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSI;
 PeriphClkInit.PLLSAI1.PLLSAI1M = 2;
 PeriphClkInit.PLLSAI1.PLLSAI1N = 8;
 PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV7;
 PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
 PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV2;
 PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_ADC1CLK;
 if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
 {
 Error_Handler();
 }
 /**Configure the main internal regulator output voltage 
 */
 if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK)
 {
 Error_Handler();
 }
}
 

I don’t understand why it’s working in debug, but not in normal mode. Please, any help/idea?

Thank you

Josep M

    This topic has been closed for replies.

    2 replies

    Tesla DeLorean
    Guru
    February 26, 2019

    Make sure BOOT0 pin is pulled LOW externally

    Instrument you code, and failure paths so you know what is happening.

    The Error_Handler() and HardFault_Handler() being of particular interest if the application dies there.

    Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
    JosepM Ribera
    Associate II
    February 27, 2019

    Thank you for answer.

    It seems solved! If could interest to anyone:

     

    it was due to the "Memory Areas" configuration that I had. Now, it's working fine

    It was due to the "Micro Lib" selection.