Problema con la actualización a Keil uVision 5 con descubrimiento STM32F4

0

Mi sistema de desarrollo no funciona en Keil con descubrimiento STM32F4 (STM32F407VG). Estoy usando uVision 5. Todos mis controladores están actualizados. El código se compila sin ningún error, sin embargo, no puedo obtener el Analizador lógico para mostrar ningún dato. Con el tablero, el reloj central es de 16 MHz. Tengo todas las combinaciones de Relojes centrales en la pestaña Rastreo. Lo extraño es que la misma configuración y código parecen funcionar con uVision 4 con 16 MHz como el reloj central en la pestaña de rastreo. ¿Puede alguien decirme qué estoy haciendo mal en uVision 5?

    
pregunta Saurabh Gupta

2 respuestas

2

Después de pasar el agujero por la tarde, finalmente logré resolver el problema. En mi caso, estaba usando el kit de descubrimiento STM32F334.

Hay una almohadilla de soldadura que debe cerrarse para poder rastrear las variables. (SB17 en el kit de descubrimiento STM32F334).

por defecto, esto está abierto. Acabo de soldar la almohadilla, y ahora está funcionando bien.

    
respondido por el edson
1

¡He tenido el mismo problema y me ha molestado todo el día!

Lo he arreglado ahora, aunque básicamente necesitas configurar el reloj central correctamente en uVision 5. En versiones anteriores (hasta 5.10 o algo así), solías poder hacer esto en system_stm32f4xx.c con PLL_M y PLL_Q #define s (8 y 7 respectivamente); sin embargo, en versiones posteriores (estoy usando v5.15) parece que se ha eliminado. Ahora tienes que configurar el reloj con algo como:

void SystemClock_Config(void) 
{
  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

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

  /* The voltage scaling allows optimizing the power consumption when the
     device is clocked below the maximum system frequency (see datasheet). */
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

  /* Enable HSE Oscillator and activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);

  /* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
     clocks dividers */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 |
                                RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
}

Lo que parece funcionar para mí para configurar el SystemCoreClock a 168MHz (que es lo que debería ser).

Puedo hacer que el analizador lógico funcione y también el seguimiento de eventos para el código RTOS.

Espero que esto ayude, y si hay una manera más fácil de hacer esto, ¡me encantaría escucharlo!

    
respondido por el Alex Shenfield

Lea otras preguntas en las etiquetas