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