Loading...
 
Skip to main content

System Workbench for STM32


NO PWM Whatsoever - CubeMX DOES NOT include the HAL_TIM_PWM_Start functions

I am also not able to generate PWM on STM32F4 Dicovery. I have tried TIM5 channel 2 and now TIM2 channel. All this code is generated by Cube MX. I am just trying to get any type of PWM out of the STM, it can always be configured and tweeked later. Can anyone point out what I am missing??

I see the green LED blinking on PD12 but the PA1 is all dead. It gives a straight line on the oscilloscope.


pininit() and togglepin() are my own functions.




/**
******************************************************************************
* @file main.c
* @author Ac6
* @version V1.0
* @date 01-December-2013
* @brief Default main function.
******************************************************************************

  • /

  1. include "stm32f4xx.h"
  2. include "stm32f4_discovery.h"
  3. include "compact_functions.h"




static void SystemClock_Config(void);
static void MX_TIM2_Init(void);


TIM_HandleTypeDef htim2;




int main(void)
{
HAL_Init();

SystemClock_Config();

pininit_output(GPIOD, 12);
pininit_alt_pp(GPIOA, 1);

MX_TIM2_Init();

__HAL_RCC_TIM2_CLK_ENABLE();
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);

for(;;)
{
togglepin(GPIOD, 12);
delay_ms(2000);
}
}




/** System Clock Configuration

  • /

void SystemClock_Config(void)
{

RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;

__PWR_CLK_ENABLE();

__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

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);

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);

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

/* SysTick_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}




void MX_TIM2_Init(void)
{

TIM_MasterConfigTypeDef sMasterConfig;
TIM_OC_InitTypeDef sConfigOC;

htim2.Instance = TIM2;
htim2.Init.Prescaler = 0;
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
htim2.Init.Period = 1024;
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
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 = 384;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2);
}


void pininit_alt_pp(GPIO_TypeDef *GPIOx, uint32_t pinno)
{
pininit(GPIOx, pinno, GPIO_MODE_AF_PP,GPIO_SPEED_FREQ_LOW,GPIO_NOPULL);
}