mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik STM32F3 Timer PWM


Autor: Sebastian Tsch...ld (sebastian_tsch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich versuche gerade auf einem STM32F303VCT6 den Timer2 in den PWM Mode 
zu bringen. Leider gibt mir PA1 kein Signal aus. Habe ich da was 
übersehen, ich habe mich an das Datenblatt (S. 627, 21.3.9) gehalten:

http://www.st.com/content/ccc/resource/technical/d...

Mein Code:

#define osObjectsPublic                     // define objects in main module
#include "osObjects.h"                      // RTOS object definitions
#include "stm32f3xx.h"                  // Device header


long f_s = 8000000L;
volatile int b =0;

void initGPIO() {
    RCC->AHBENR = RCC_AHBENR_GPIOAEN;        //enable PORTA clock
    GPIOA->MODER = GPIO_MODER_MODER1_0;      //Timer2 Output
}
  
 void initTimers() {
   RCC->APB1ENR = RCC_APB1ENR_TIM2EN;                                  // Timer 2 clock Enable
   GPIOA->AFR[1] = 0;
   GPIOA->AFR[0] = (1<<4);                                            //AF1
   TIM2->ARR = 20;                                                     // Auto reload value -> reset Timer if Counter Register TIM2->CNT reaches TIM2_ARR
   TIM2->CCR1 = 40;                                                    //Duty Cycle for PWM -> 2*ARR -> active till ARR, LOW till CCR1
   TIM2->PSC = f_s/100000 - 1;                                         // f_counterClock = f_sys / (PSC + 1) -> choose f_counter = 100khz -> 0.01ms per count
   TIM2->CCMR1 = (1<<11)|(1<<12)|(1<<13)|(1<<14);                      //OC2PE -> enable preload register,PWM Mode 2 for channel 2 of Timer 2
   TIM2->EGR = (1<<TIM_EGR_UG);                                        //Update generation
   TIM2->CCER = (1<<TIM_CCER_CC2E);                                    //enable channel 2 output of timer 2
   TIM2->CR1 = 0;
   TIM2->CR2 = 0;
   TIM2->CR1 |= TIM_CR1_CEN;                                           // Enables Counter 
 }
 
//MAIN
 
int main (void) {
  osKernelInitialize ();                    // initialize CMSIS-RTOS

  // init
  initGPIO();
  initTimers();
  
  // threads

  osKernelStart ();                         // start thread execution 
}


Grüsse Sebastian

: Bearbeitet durch User
Autor: Christopher Johnson (christopher_j23)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian T. schrieb:
> TIM2->CCER = (1<<TIM_CCER_CC2E);

Du schiebst hier zu weit ;)

Im Header sieht das so aus:
#define TIM_CCER_CC2E_Pos         (4U)                                         
#define TIM_CCER_CC2E_Msk         (0x1U << TIM_CCER_CC2E_Pos)
#define TIM_CCER_CC2E             TIM_CCER_CC2E_Msk    

Also kannst du entweder

TIM2->CCER = 1 << TIM_CCER_CC2E_Pos

oder

TIM2->CCER = TIM_CCER_CC2E

machen. Das gleiche gilt für

> TIM2->EGR = (1<<TIM_EGR_UG);

wobei du das sowieso weglassen kannst, so lange du ARR und PSC nicht 
pufferst (Auto-reload preload).


Sebastian T. schrieb:
> GPIOA->MODER = GPIO_MODER_MODER1_0;      //Timer2 Output

Das muss du zu

GPIOA->MODER = GPIO_MODER_MODER1_1;

machen, weil du ja den GPIO auf "alternate function mode" konfigurieren 
willst, damit er auch mit dem Timer funzt. Im MODERy ist 0b01 GPIO 
output und 0b10 ist AF.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.