我遇到了一个问题、即在适当的 PWM 启动之前出现持续时间变化的 PWM 脉冲。 PWM 位于引脚 PD0和 PD1上。 我使用评估板按钮来启动和停止 PWM。 第一次引导时、我大致得到绿色脉冲的持续时间。 如果我停止、然后再次启动 PWM、则开始时的 PWM 具有不同的形状、可能是黄色或绿色迹线。 我想这是因为 PWM 计数器在开始时不为零、但不确定。
PWM 的开始应该是黄色迹线、但绿色迹线显示在之前。 代码为:
//使用死区生成免费 PWM //包括 #include "inc/tm4c123gh6m.h" #include #include #include #include #include #include "inc/hw_memmap.h" #include "inc/hw_types.h" //#include "inc/hw_ints.h" #include "driverlib/sysctl.h" #include "driverlib/adc.h" #include "driverlib/gpio/debug.h" #include "driverlib/driverline.h"#include "driverlib/driverline.h"#include "driverlib/utilh/#include "driverlib/intrintrat.h"#include "#driverlib/driverlib/driverlib#include "#driverline.h/driver.h"#include "driverlib/driverlib#include "#driverlib.utils/intrintrin.h" /ti/TivaWare_C_Series-2.1.0.12573/utils/ustdlib.h //频率填充 unsigned int ui32PWMFreq = 126000;//默认启动频率 空 InitPWM (void) { uint32_t ui32LoadIn; uint32_t ui32PWMDeadband; //设置 M1PWM0 PD0上具有2个 PWM 的桥式驱动器, M1PWM1 PD1 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);//从 PWM1 ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD)更改;//对于 M1PWM0 M1PWM1和 UART2 //在模块1上配置 PWM0 (引脚 PDTL_Periph_GPIOD);//将 M1PWM1PWM0 引脚 PD_PM0_PM_PMBUS_PM1引脚设置为 GPIO1引脚 PD0_BASE;GP0_PM0_PM0_GPIO1引脚 PD0_PM0_PM0_PM0_PM0_PM0_PM0_PM0_GPIO1引脚 GPIO_PIN_1);//将 PD1设置为 PWM ROM_GPIOPinConfigure (GPIO_PD0_M1PWM0);//模块1 PWM0 ROM_GPIOPinConfigure (GPIO_PD1_M1PWM1);//模块1 PWM1 //设置时钟和频率 ui32GEN =(ROM_PGEN_PWM0); //在 PWM100_MODE_MODE_PWM0中已启用 PWM64_PWM1/PWM1/2_PWM1/2_PWM1/2_PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/PWM1/2/ //设置 PWM 周期和占空比 ROM_PWMGenPeriodSet (PWM1_base、PWM_GEN_0、ui32LoadIn);// PWM 中的加载值应为16位并且已在 funciton ROM_PWMPulseWidthSet (PWM1_base、PWM_OUT_0、ui32HW1010/2)中有-1;// 针对 PWM+400000+配置/输出 PWM (0x400000+配置)/输出 PWM ( 0x400000+ PWM) //设置死区 ROM_PWMDeadBandEnable (PWM1_base、PWM_GEN_0、ui32PWMDeadband >> 1、ui32PWMDeadband >> 1);//Configure Deadband on PWM1 PMW0 }//End of InitPWM1/// Main 的开始--- int main (void) { //40MHz 时钟、使用 ROM 命令节省空间! ROM_SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_MAIN|SYSCTAL_XTAL_16MHz); ROM_SysCtlPWMClockSet (SYSCTL_PWMDIV_1);//设置 PWM、设置为40MHz? ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);//为 LED 启用外设时钟 //等待 GPIOF 模块准备 就绪 while (!SysCtl_Periph_GPIOF) { } //配置 LED ROM_GPIOPCtlGPIOOutput (GPIO_PORTF PeripheralReady (SYSCTL_PERIPH_GPIOF)));1}//将 GPIO_PIN_1引脚设置为 1、2、2、1、1、1、2、1、1、2、1、1、1、1、1、1、2、1、1、1、1、1、1、1、2、1、1、1、1、1、1、1、2、1、1、1、2 、1、1、1、1、1、1、1、1、1、1、1、1、1、1 HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= GPIO_LOCK_KEY; HWREG (GPIO_PORTF_BASE + GPIO_CR)|= 0x01; HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= 0; ROM_GPIODirModeSet (GPIO_PORT_BASE、GPIO_PORT_ROM_FOIN)= 0;GPIO_PDIR_PIN_PIN_DIR_PIN_DIORT_PON_PIN_0 GPIO_PIN_4|GPIO_PIN_0、GPIO_FORCE_2mA、GPIO_PIN_TYPE_STD_WPU); //在这里启用 PWM 模块1 PWM0、PWM1 InitPWM (); while (1) { //打开 PWM if (ROM_GPIOPINREAD (GPIO_PORTFTL_base、GPIO_DEV_0000 );while (1){//打开 PWM if ((ROM_GPIO_0x0000_TO/PM=4)))?/PM=0x0000_4秒) //在 ROM_PWMOutputState (PWM1_base、PWM_OUT_0_BIT | PWM_OUT_1_BIT、TRUE)上打开 PWM10;//PWM0设置为输出 //HWREG (0x40029054)=0x0000; ROM_PWMGenEnable (PWM1_BASE、PWM_GEN_0);//运行 PWM=0x0000_TO/PWM=0=0 (PWM=PHIN )/PWMs (PWM=0xPWM=0_PHIN)/PWMs (PWM=0xPWMs)/PWM=0_TO/PWMs (PWMs)/PWMs (0xPWM=PWMs (0xPWM=PWMs)/PWMs (PWM=PWM=0_TO/PWMs) ROM_PWMOutputState (PWM1_base、PWM_OUT_0_bit | PWM_OUT_1_BIT、false);//PWM0设置为输出 ROM_PWMGenDisable ( PWM1_base、PWM_GEN_0);//关闭 PWM //将 PD0设置为低电平、因为看起来关闭可能是高电平... //Setoutputs low }//end of switch 2 turn off PWM }//end of main while loop }//****** 结束主代码********