请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R
大家好、我在使用内置 Timer_A_generatePWM 函数时遇到了一个奇怪的问题。 我知道如何设置和正确使用它、但是在我的应用中、我希望基于连接的传感器的数据具有不同的 PWM。 我尝试自行调试它、但我发现它很奇怪、因为我的代码运行方式与我手动添加断点时的运行方式相同、然后占空比会发生变化。 如果没有断点、则占空比永远不会改变。 我创建了一个简单的程序来展示实现示例和问题:
volatile int toggle = 0; int main (void) { GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function); PWMConfig PWM_Motor_1 = { Timer_A_CLOCKSOURCE_SMCLK、 Timer_A_CLOCKSOURCE_divider _28、 周期、 Timer_A_CAPTURECOMPARE 寄存器_1、 Timer_A_OUTPUTMODE_RESET_SET、 0 }; while (1) { if (toggle =0) { PWM_Motor_1.dutyCycle = DutyCycle _10; //<=此行会更改占空比(定义但未显示,我使用周期*0.10) Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); //<=这应该会改变我的占空比、但是如果没有手动断点、就像 MSP 跳过这个函数一样 切换++; //以下所有 if 语句的问题相同 } 否则、如果(TOGGLE = 1) { PWM_Motor_1.dutyCycle = DutyCycle _ 20; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); 切换++; } 否则、如果(TOGGLE == 2) { PWM_Motor_1.dutyCycle = DutyCycle _40; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); 切换++; } 否则、如果(TOGGLE == 3) { PWM_Motor_1.dutyCycle = DutyCycle _50; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); 切换++; } 否则、如果(TOGGLE == 4) { PWM_Motor_1.dutyCycle = DutyCycle _80; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); 切换++; } 否则、如果(TOGGLE == 5) { PWM_Motor_1.dutyCycle = DutyCycle _100; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); 切换++; } if (切换> 5) { 切换= 0; } }
有什么想法吗? 我是缺少什么东西、还是 MSP432在如此快速地更改占空比时遇到问题?
编辑:
当我在每个 Generate 函数之后添加类似这样的延迟时、令人惊讶的是、它会起作用。 有什么想法吗?
PWM_Motor_1.dutyCycle = DutyCycle _10; Timer_A_generatePWM (timer_A0_BASE、&PWM_Motor_1); uint32_t I = 0; for (I = 0;I < 70000;i++); toggle++;