STM32F051R8: PWM-Timer funktionieren nicht?

Ich arbeite mit dem Discovery Board MB1034B und dem Mikroprozessor STM32F051R8. Ich versuche, einige PWM-Impulse mit Hardware-Timern auszugeben. Ich verwende dieses Tutorial (für STM32F4xx): http://visualgdb.com/tutorials/arm/stm32/pwm/

Das Problem ist, dass nach einigen Änderungen, die zum Kompilieren des Codes erforderlich waren, von denen ich keine Ahnung habe, ob sie korrekt sind, es nicht funktioniert. Ich verwende VisualGDB und VS2013 Community. Ich habe eine LED auf PC8 und PC9.

Vielen Dank für Ihre Hilfe. Hier ist mein Code:

#include <stm32f0xx_gpio.h>
#include <stm32f0xx_rcc.h>
#include <stm32f0xx_tim.h>

void InitializeTimer(int period = 500)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

    TIM_TimeBaseInitTypeDef timerInitStructure;
    timerInitStructure.TIM_Prescaler = 40000;
    timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    timerInitStructure.TIM_Period = period;
    timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    timerInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &timerInitStructure);
    TIM_Cmd(TIM2, ENABLE);
}

void InitializePWMChannel()
{
    TIM_OCInitTypeDef outputChannelInit = { 0, };
    outputChannelInit.TIM_OCMode = TIM_OCMode_PWM1;
    outputChannelInit.TIM_Pulse = 400;
    outputChannelInit.TIM_OutputState = TIM_OutputState_Enable;
    outputChannelInit.TIM_OCPolarity = TIM_OCPolarity_High;

    TIM_OC2Init(TIM2, &outputChannelInit);
    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);

    GPIO_PinAFConfig(GPIOC, GPIO_PinSource9, GPIO_AF_2);
}

void InitializeLEDs()
{
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

    GPIO_InitTypeDef gpioStructure;
    gpioStructure.GPIO_Pin = GPIO_Pin_9;
    gpioStructure.GPIO_Mode = GPIO_Mode_AF;
    gpioStructure.GPIO_OType = GPIO_OType_PP;
    gpioStructure.GPIO_PuPd = GPIO_PuPd_UP;
    gpioStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &gpioStructure);
}


int main()
{
    InitializeLEDs();
    InitializeTimer();
    InitializePWMChannel();

    for (;;)
    {
    }
}

Antworten (2)

In Ihrem Teil haben die Pins 8 und 9 von Port C eine alternative Funktion als Timer3-Kanal, aber Sie versuchen, sie mit Timer2 zu verwenden, was natürlich nicht funktioniert. Siehe Seite 34im Datenblatt . Außerdem sehe ich im Code nichts im Zusammenhang mit PC8, aber Sie sagen, dass eine LED daran angeschlossen ist.

Setzen Sie dies in Ihr void InitializePWMChannel()letztes ein.

// Main Output Enable
TIM_CtrlPWMOutputs(TIM1, ENABLE);
Willkommen bei EE.SE, Tauseef! Würden Sie erklären, warum dies das OP-Problem löst?