i'm trying to use PA9 as PWM Output. But does not work. The VBUS Led is always on. Pls help me. As you can see on the below image, the blue curve is PA9 PWM Output. The other 2 are PA8 and PA10.
Can anyone pls help me?
Code: Select all
#include "ch.h"
#include "hal.h"
static THD_WORKING_AREA(waThread1, 128);
static THD_FUNCTION(Thread1, arg) {
(void)arg;
chRegSetThreadName("blinker");
while (true) {
palTogglePad(GPIOD, GPIOD_LED3);
palTogglePad(GPIOD, GPIOD_LED4);
palTogglePad(GPIOD, GPIOD_LED5);
palTogglePad(GPIOD, GPIOD_LED6);
chThdSleepMilliseconds(500);
}
}
static PWMConfig pwm1cfg = {
1000000, /* 1MHz PWM clock frequency. */
US2ST(5000), /* PWM period */
NULL,
{
{PWM_OUTPUT_ACTIVE_LOW, NULL},
{PWM_OUTPUT_ACTIVE_LOW, NULL},
{PWM_OUTPUT_ACTIVE_LOW, NULL},
{PWM_OUTPUT_DISABLED, NULL}
},
0,
#if STM32_PWM_USE_ADVANCED
0
#endif
};
int main(void) {
halInit();
chSysInit();
pwmStart(&PWMD1, &pwm1cfg);
palSetPadMode(GPIOA, 8, PAL_MODE_ALTERNATE(1));
palSetPadMode(GPIOA, 9, PAL_MODE_ALTERNATE(1));
palSetPadMode(GPIOA, 10, PAL_MODE_ALTERNATE(1));
/*
* Starts the PWM channel 0 using 75% duty cycle.
*/
pwmEnableChannel(&PWMD1, 0, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 5000));
pwmEnableChannel(&PWMD1, 1, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 5000));
pwmEnableChannel(&PWMD1, 2, PWM_PERCENTAGE_TO_WIDTH(&PWMD1, 5000));
/*
* Activates the serial driver 2 using the driver default configuration.
* PA2(TX) and PA3(RX) are routed to USART2.
*/
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
while (true) {
chThdSleepMilliseconds(500);
}
}