STM32F3 Timer PWM

OP #4732556
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/document/reference_manual/4a/19/6e/18/9d/92/43/32/DM00043574.pdf/files/DM00043574.pdf/jcr:content/translations/en.DM00043574.pdf

Mein Code:
1
#define osObjectsPublic                     // define objects in main module
2
#include "osObjects.h"                      // RTOS object definitions
3
#include "stm32f3xx.h"                  // Device header
4

5

6
long f_s = 8000000L;
7
volatile int b =0;
8

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

34
  // init
35
  initGPIO();
36
  initTimers();
37
  
38
  // threads
39

40
  osKernelStart ();                         // start thread execution 
41
}

Grüsse Sebastian
#4733253
Lesenswert?
• ▲
▼
Sebastian T. schrieb:
> TIM2->CCER = (1<<TIM_CCER_CC2E);

Du schiebst hier zu weit ;)

Im Header sieht das so aus:
1
#define TIM_CCER_CC2E_Pos         (4U)                                         
2
#define TIM_CCER_CC2E_Msk         (0x1U << TIM_CCER_CC2E_Pos)
3
#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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.