请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP432P401R
我正在尝试使用模拟输出接近传感器构建具有障碍物检测功能的汽车。 问题是、每当我集成 PWM 模块以移动车辆和接近传感器时、PWM 不会更新(我使用示波器测量)。 奇怪的是、每当我逐行进入程序时、PWM 都会更新、但如果我运行程序、它不会更新。
下面是我当前使用的代码。
Timer_A_PWMConfig 伺服配置= { Timer_A_CLOCKSOURCE_SMCLK、 Timer_A_CLOCKSOURCE_divider _1、 1300、 Timer_A_CAPTURECOMPARE 寄存器_1、 Timer_A_OUTPUTMODE_RESET_SET、 94 //center }; // Timer_A 伺服 PWM 配置参数*/ Timer_A_PWMConfig motorConfig = { Timer_A_CLOCKSOURCE_SMCLK、 Timer_A_CLOCKSOURCE_divider _1、 1300、 Timer_A_CAPTURECOMPARE 寄存器_2、 Timer_A_OUTPUTMODE_RESET_SET、 75 }; int main (void) { /*停止 WDT */ MAP_WDT_A_HOLDTimer(); MAP_Interrupt_disableSlepOnIsrExit(); /*零填充缓冲器*/ memset (resultsBuffer、0x00、8); 对于 LF 模式、//将 MCLK 设置为 REFO 为128Khz *将 SMCLK 设置为64Khz */ MAP_CS_setReferenceOscillatorFrequency (CS_REFO_128KHZ); ///map_CS_initClockSignal (CS_MCLK、CS_REFOCLK_select、CS_clock_divider); MAP_CS_initClockSignal (CS_SMCLK、CS_REFOCLK_SELECT、CS_CLOCK_DEVIDER_2); MAP_PCM_setPowerState (PCM_AM_LF_VCORE0); /*将 GPIO2.4配置为 PWM 的外设输出和按钮的 P1.1 *中断*/ MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function); MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function); /*将 Timer_A 配置为具有大约500ms 的周期和 *初始占空比为其10%(3200个节拍)*/ MAP_Timer_A_generatePWM (TIMER_A0_BASE、&servoConfig); /*将 Timer_A 配置为具有大约500ms 的周期和 *初始占空比为其10%(3200个节拍)*/ MAP_Timer_A_generatePWM (TIMER_A0_BASE、&motorConfig); /*将 GPIO2.4配置为 PWM 的外设输出和按钮的 P1.1 *中断*/ MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN4、GPIO_PRIMARY_MODULE_Function); MAP_GPIO_setPeripheralModuleFunctionOutputPin (GPIO_PORT_P2、GPIO_PIN5、GPIO_PRIMARY_MODULE_Function); /*初始化 ADC (MCLK/64/8)*/ MAP_ADC14_enableModule(); MAP_ADC14_initModule (ADC_CLOCKSOURCE_MCLK、ADC_PREDIVIDER_64、ADC_DIVIDER_8、 0); /*在*/中为模拟配置 GPIO MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P5、 GPIO_PIN5 | GPIO_PIN4 | GPIO_PIN3 | GPIO_PIN2 | GPIO_PIN1 | GPIO_PIN0、GPIO_TICE_MODULE_FUNCTION); MAP_GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P4、 GPIO_PIN7 | GPIO_PIN6、GPIO_Terti_MODULE_FUNCTION); MAP_GPIO_setAsOutputPin (GPIO_PORT_P2、GPIO_PIN1); MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1); /*配置 ADC 内存(ADC_MEM0 - ADC_MEM7 (A0 - A2),重复)*/ MAP_ADC14_configureMultiSequenceMode (ADC_MEM0、ADC_MEM2、TRUE); MAP_ADC14_configureConversionMemory (ADC_MEM0、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A0、false); MAP_ADC14_configureConversionMemory (ADC_MEM1、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A1、false); MAP_ADC14_configureConversionMemory (ADC_MEM2、 ADC_VREFPOS_INTBUF_VREFNEG_VSS、 ADC_INPUT_A6、false); /*在通道7 (序列结束)上进行转换时启用中断 *已完成并启用转换*/ MAP_ADC14_enableInterrupt (ADC_INT2); /*启用中断*/ MAP_Interrupt_enableInterrupt (INT_ADC14); MAP_Interrupt_enableMaster(); /*将采样计时器设置为自动单步执行序列 *转换。 * MAP_ADC14_enableSampleTimer (ADC_AUTOMATE_DIOTIVation); /*触发样本开始*/ MAP_ADC14_enableConversion(); MAP_ADC14_toggleConversionTrigger (); _DELAY_CYCLES (20000); MAP_Timer_A_generatePWM (TIMER_A0_BASE、&motorConfig); motorConfig.dutyCycle = 90; /*正在休眠*/ while (1) { //map_Timer_a_generatePWM (timer_A0_BASE、&motorConfig); /* if (ADC_SampleComplete = 1){ if ((resultsBuffer[0]> 11000)|(resultsBuffer[1]> 11000)|(resultsBuffer[2]> 11000)){ motorConfig.dutyCycle = 70; MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN1); //map_Timer_a_generatePWM (timer_A0_BASE、&motorConfig); } 否则{ MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1); motorConfig.dutyCycle = 97; // map_Timer_a_generatePWM (timer_A0_BASE、&motorConfig); } } * // map_pcm_gotoLPM0(); } } //每当转换完成并放置在 * ADC_MEM7中时,就会触发此中断。 这表示转换结束、结果数组 被*抓取并放置在 resultsBuffer */ void ADC14_IRQHandler (void) {中 uint64_t status; STATUS = MAP_ADC14_getEncableInterruptStatus(); ADC_SampleComplete = 0; if (status & ADC_INT2) { resultsBuffer[0]= MAP_ADC14_getResult (ADC_MEM0); resultsBuffer[1]= MAP_ADC14_getResult (ADC_MEM1); resultsBuffer[2]= MAP_ADC14_getResult (ADC_MEM2); ADC_SampleComplete = 1; if ((resultsBuffer[0]> 11000)|(resultsBuffer[1]> 11000)|(resultsBuffer[2]> 11000)){ motorConfig.dutyCycle = 70; MAP_GPIO_setOutputHighOnPin (GPIO_PORT_P2、GPIO_PIN1); MAP_Timer_A_generatePWM (TIMER_A0_BASE、&motorConfig); } 否则{ MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P2、GPIO_PIN1); motorConfig.dutyCycle = 97; MAP_Timer_A_generatePWM (TIMER_A0_BASE、&motorConfig); } } MAP_ADC14_clearInterruptFlag (status); }