我正在努力一次启用多个PWM,我不想复制粘贴代码6次,但我有问题来启用6个不同的PWM,工作的代码是:
void pwmPinChoices(void){
pwm_channel_disable(PWM, PWM_CHANNEL_7);
pwm_pin6_instance.ul_prescaler = PWM_CMR_CPRE_CLKA;
pwm_pin6_instance.ul_period = 100;
pwm_pin6_instance.ul_duty = 50;
pwm_pin6_instance.channel = PWM_CHANNEL_7;
pwm_channel_init(PWM, &pwm_pin6_instance);
pio_set_peripheral(PIOC, PIO_PERIPH_B, PIO_PC24B_PWML7);
pwm_channel_enable(PWM, PWM_CHANNEL_7);
}我希望能够更改pwm_pinx_instance和pwm_channel_x,我尝试使用数组,但它不起作用。
我尝试的代码是:
void pwmChoices(void){
char ChlArr = [0, 1, 4, 5, 6, 7];
char PinArr = [34, 36, 6, 7, 8, 9];
for(int i = 0; i < 6; i++){
pwm_channel_disable(PWM, PWM_CHANNEL_ChlArr[i]);
pwm_PinArr[i]_instance.ul_prescaler = PWM_CMR_CPRE_CLKA;
pwm_PinArr[i]_instance.ul_period = 100;
pwm_PinArr[i]_instance.ul_duty = 50;
pwm_PinArr[i]_instance.channel = PWM_CHANNEL_ChlArr[i];
pwm_channel_init(PWM, &pwm_PinArr[i]_instance);
pio_set_peripheral(PIOC, PIO_PERIPH_B, PIO_PC24B_PWMLChlArr[i]);
pwm_channel_enable(PWM, PWM_CHANNEL_ChlArr[i]);
}但是在这段代码中,我得到了很多错误,说明函数是未声明的。
发布于 2015-05-13 20:41:01
如果你函数看起来像这样
void pwm_pin6_instance ( void )然后,您可以声明一个数组
void (*pwm_PinArr_instance[7]) (void);并初始化它:(&符号是可选的)
pwm_PinArr_instance[0] = &pwm_pin0_instance;
pwm_PinArr_instance[1] = &pwm_pin1_instance;
pwm_PinArr_instance[2] = &pwm_pin2_instance;
pwm_PinArr_instance[3] = &pwm_pin3_instance;
pwm_PinArr_instance[4] = &pwm_pin4_instance;
pwm_PinArr_instance[5] = &pwm_pin5_instance;
pwm_PinArr_instance[6] = &pwm_pin6_instance;然后,您可以使用数组
pwm_channel_init(PWM, pwm_PinArr_instance[i]);编辑
深入研究您的代码,我认为您必须学习一些有关数组的知识。我猜你在想,对于i=0来说,PWM_CHANNEL_ChlArr[i]的翻译应该是PWM_CHANNEL_0。
在编译时,数组值不能替换为变量名。
花时间学习数组并学习如何使用它们。
发布于 2015-05-13 20:42:17
它是
char ChlArr[] = {0, 1, 4, 5, 6, 7}
char PinArr[] = {34, 36, 6, 7, 8, 9};而不是
char ChlArr = [0, 1, 4, 5, 6, 7];
char PinArr = [34, 36, 6, 7, 8, 9];https://stackoverflow.com/questions/30214927
复制相似问题