Configuración de PWM en PA.3 de la placa Nucleo STM32F091RC

1

Estoy usando STM32Cube y las bibliotecas HAL para configurar el PWM.

Para inicializar Timer 2, tengo:

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{

  GPIO_InitTypeDef GPIO_InitStruct;
  if(htim_base->Instance==TIM2)
  {
  /* USER CODE BEGIN TIM2_MspInit 0 */

  /* USER CODE END TIM2_MspInit 0 */
    /* Peripheral clock enable */
    __TIM2_CLK_ENABLE();

    /**TIM2 GPIO Configuration    
    PA3     ------> TIM2_CH4 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF2_TIM2;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /* USER CODE BEGIN TIM2_MspInit 1 */

  /* USER CODE END TIM2_MspInit 1 */
  }

}

y:

void MX_TIM2_Init(void)
{

  TIM_ClockConfigTypeDef sClockSourceConfig;
  TIM_MasterConfigTypeDef sMasterConfig;
  TIM_OC_InitTypeDef sConfigOC;

  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = 800;
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  HAL_TIM_Base_Init(&htim2);

  sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
  HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig);

  HAL_TIM_PWM_Init(&htim2);

  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);

  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 400;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4);

}

Ambos de los anteriores fueron generados por STM32CubeMX. En general, agregué dos líneas para iniciar el temporizador y el canal PWM:

int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();

  /* USER CODE BEGIN 2 */

    HAL_TIM_Base_Start(&htim2);
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_4);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}

El código se compila y descarga, pero no veo una salida PWM en PA3 (estoy midiendo con un analizador lógico). La salida PWM tampoco funciona en PA4. He intentado cambiar de TIM2 a TIM15 para comprobar si funciona, pero tampoco hay salida PWM.

Para verificar mi código, probé algunos otros pines PWM (PA10, PB3, PB5, PB4, PA8, PA9, PA6, PA5) y todos funcionan. ¿Hay configuraciones únicas para los pines PA3 y PA4 para que funcione la salida PWM?

    
pregunta user2218339

1 respuesta

1

Muy a menudo en las placas de desarrollo, algunos pines pueden ser utilizados por otras funciones de la placa, como una pantalla, botones, LED, etc. Probablemente hay un montón de puentes de soldadura en la parte posterior de la placa que sirven para desconectar un pin en el microcontrolador de los encabezados de GPIO porque cuando están siendo utilizados por otra cosa en el tablero.

Eche un vistazo al manual del usuario y vea si se están utilizando PA3 y PA4 para alguna otra función en la placa. ST a menudo incluye los esquemas para el tablero de desarrollo, y también debería mostrar los puentes de soldadura.

    
respondido por el A.Mac

Lea otras preguntas en las etiquetas