运行官方例程empty,点亮redLED代码如下。
void *mainThread(void *arg0) { /* 1 second delay */ uint32_t time = 1; /* Call driver init functions */ GPIO_init(); // I2C_init(); // SPI_init(); // UART_init(); // Watchdog_init(); /* Configure the LED pin */ GPIO_setConfig(CONFIG_GPIO_LED_0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); /* Turn on user LED */ GPIO_write(CONFIG_GPIO_LED_0, CONFIG_GPIO_LED_ON); while (1) { // sleep(time); // GPIO_toggle(CONFIG_GPIO_LED_0); } }
驱动强度如图:
测得LED电压为2.52v
更改驱动能力后电压不变。
巡行官方例程pwmled2
void *mainThread(void *arg0) { /* Period and duty in microseconds */ uint16_t pwmPeriod = 3000; uint16_t duty = 0; uint16_t dutyInc = 100; /* Sleep time in microseconds */ uint32_t time = 50000; PWM_Handle pwm1 = NULL; PWM_Handle pwm2 = NULL; PWM_Params params; /* Call driver init functions. */ PWM_init(); PWM_Params_init(¶ms); params.dutyUnits = PWM_DUTY_US; params.dutyValue = 0; params.periodUnits = PWM_PERIOD_US; params.periodValue = pwmPeriod; pwm1 = PWM_open(CONFIG_PWM_0, ¶ms); if (pwm1 == NULL) { /* CONFIG_PWM_0 did not open */ while (1); } PWM_start(pwm1); pwm2 = PWM_open(CONFIG_PWM_1, ¶ms); if (pwm2 == NULL) { /* CONFIG_PWM_0 did not open */ while (1); } PWM_start(pwm2); /* Loop forever incrementing the PWM duty */ while (1) { PWM_setDuty(pwm1, duty); PWM_setDuty(pwm2, duty); duty = (duty + dutyInc); if (duty == pwmPeriod || (!duty)) {//控制占空比递增递减 dutyInc = - dutyInc; } usleep(time); } }
驱动强度如图:
测得redLED波形如下:
高电平电压达到3v
测试期间测试点没有做修改,为什么同一个LED,驱动强度相同的情况下,PWM的电压能达到3v,GPIO只能达到2.5v,gpio驱动强度提高,电压也不变。