This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好!
我尝试使用 PWM 模块生成 PWM 信号。 基本上、配置 PWM 所涉及的步骤很简单、但我最终得到一个信号、该信号一直保持高电平。 请在下面找到我的初始化步骤:
ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN | SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
uint32_t period = ui32SysClock /250;/*250 Hz*/ SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= 0x4C4F434B; GPIOPinConfigure (GPIO_PF0_M0PWM0); ROM_PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_1); GPIOPinTypePWM (PWM0_BASE、GPIO_PIN_0); PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、PERIOD); PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0_BIT、(周期* 10)/ 100);/*10%*/ PWMIntEnable (PWM0_BASE、PWM_INT_GEN_0); PWMGenIntRegister (PWM0_BASE、PWM_GEN_0、pwmIsrCh0); PWMGenIntTrigEnable (PWM0_BASE、PWM_GEN_0、PWM_INT_CNT_LOAD); IntEnable (PWM0_BASE); PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE); PWMGenEnable (PWM0_BASE、PWM_GEN_0); 静态 void pwmIsrCh0 (void) { uint32_t counter_value =(10 *周期)/100; PWMGenIntClear (PWM0_BASE、PWM_GEN_0、PWM_INT_CNT_LOAD); PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0_BIT、COUNTER_VALUE); }
ISR 被成功调用。
函数 GPIOPinTypePWM 的第一个参数是 GPIO 端口的基址、而不是 PWM 的基址。 上面代码的第10行应如下所示:
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0);
我修复了另外两个副本错误。 这是工作代码。
#include #include #include "inc/hw_types.h" #include "include/hw_memmap.h" #include "inc/hw_gpio.h" #include "inc/hw_ints.h" #include "driverlib/sysctl.h" #include "driverlib/gpio.h" #include "driverlib/pwm.h" #include "drivermap/driverlib/trl.h" // ////主"C"语言入口点。 //// ***************** 静态 void pwmIsrCh0 (void); uint32_t period; int main (void) { uint32_t ui32SysClock; // //从 PLL 以120MHz 运行。 // ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480)、120000000); 周期= ui32SysClock / 2500;/*2.5 KHz */ SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); GPIOPinConfigure (GPIO_PF0_M0PWM0); PWMClockSet (PWM0_BASE、PWM_SYSCLK_DIV_1); GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0); PWMGenConfigure (PWM0_BASE、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC); PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、PERIOD); PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、(周期* 10)/ 100);/*10%*/ PWMIntEnable (PWM0_BASE、PWM_INT_GEN_0); PWMGenIntRegister (PWM0_BASE、PWM_GEN_0、pwmIsrCh0); PWMGenIntTrigEnable (PWM0_BASE、PWM_GEN_0、PWM_INT_CNT_LOAD); IntEnable (INT_PWM0_0); PWMOutputState (PWM0_BASE、PWM_OUT_0_BIT、TRUE); PWMGenEnable (PWM0_BASE、PWM_GEN_0); while (true) { } } 静态 void pwmIsrCh0 (void) { uint32_t counter_value =(10 *周期)/100; PWMGenIntClear (PWM0_BASE、PWM_GEN_0、PWM_INT_CNT_LOAD); PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0_BIT、COUNTER_VALUE); }
Bob、您好!
感谢您花时间为我创建此示例。
事实上,我发现了这个错误。 我没有写入"PWM_OUT_0"、而是写入"PWM_OUT_0_bit"。
现在它按预期工作。
一切都很棒!