Forum: Mikrocontroller und Digitale Elektronik STM32F4 komplementär PWM Problem in ChibiOs


von Kristoffer Ullsten (Gast)


Lesenswert?

Hallo,

in ChibiOs versuche ich vergeblich die komplementären PWMs vom STM32F407 
Discovery Board zu testen.

Kann mir jemand bitte helfen, wo der Fehler liegt. Ich messe nur 
Rauschen am PA8, PA9 und PA10.

Danke im Voraus.
1
#include "ch.h"
2
#include "hal.h"
3
4
static THD_WORKING_AREA(waThread1, 128);
5
static THD_FUNCTION(Thread1, arg) {
6
7
  (void)arg;
8
  chRegSetThreadName("blinker");
9
  while (true) {
10
    palTogglePad(GPIOD, GPIOD_LED3);
11
    palTogglePad(GPIOD, GPIOD_LED4);
12
    palTogglePad(GPIOD, GPIOD_LED5);
13
    palTogglePad(GPIOD, GPIOD_LED6);
14
15
    chThdSleepMilliseconds(500);
16
  }
17
}
18
19
static PWMConfig pwm1cfg = {
20
  8000000,          /* 8MHz PWM clock frequency.   */
21
  US2ST(20),          /* PWM period 20us.       */
22
  NULL,
23
  {
24
  {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH1 */
25
  {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH2 */
26
  {PWM_OUTPUT_ACTIVE_HIGH | PWM_COMPLEMENTARY_OUTPUT_ACTIVE_LOW, NULL}, /* PWM1, CH3 */
27
  {PWM_OUTPUT_DISABLED, NULL}
28
  },
29
  0,
30
  0
31
};
32
33
int main(void) {
34
35
  halInit();
36
  chSysInit();
37
38
  pwmStart(&PWMD1, &pwm1cfg);
39
40
  palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(1));
41
  palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(1));
42
  palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(1));
43
  palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(1));
44
  palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(1));
45
  palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(1));
46
47
  pwmEnableChannel(&PWMD1, 1, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 1000));
48
  pwmEnableChannel(&PWMD1, 1, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 7000));
49
  pwmEnableChannel(&PWMD1, 2, PWM_PERCENTAGE_TO_WIDTH (&PWMD1, 7000));
50
51
  /*
52
   * Activates the serial driver 2 using the driver default configuration.
53
   * PA2(TX) and PA3(RX) are routed to USART2.
54
   */
55
  sdStart(&SD2, NULL);
56
  palSetPadMode(GPIOA, 2, PAL_MODE_ALTERNATE(7));
57
  palSetPadMode(GPIOA, 3, PAL_MODE_ALTERNATE(7));
58
59
  chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
60
61
  while (true) {
62
    sdWrite(&SD2, (uint8_t *)"Hallo\n", 6);
63
    if (palReadPad(GPIOA, GPIOA_BUTTON))
64
      sdWrite(&SD2, (uint8_t *)"Press\n", 6);
65
    chThdSleepMilliseconds(500);
66
  }
67
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.