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

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

Para inicializar el temporizador 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 principal, 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 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. Intenté cambiar de TIM2 a TIM15 para verificar 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?

Respuestas (1)

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

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

¡Gracias! Según el manual, parece que el puente de soldadura es el problema.