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.

TM4C123gh6pmPWM模块Fault信号问题

Other Parts Discussed in Thread: TM4C123GH6PM

怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???

uint16_t Fault;

int main(void)
{

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

     SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

     GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);

      IntMasterEnable();

      IntEnable(INT_PWM0_FAULT);

      GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE);
      Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);
      while(Fault==1)
      {
         PWM0faultIntHandler();
      }

      for(;;) //infinite loop
      {}

}

void
PWM0faultIntHandler(void)
{
     //清除错误中断
     PWMFaultIntClear(PWM0_BASE);
     PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false);
     PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);
}

这样写为什么不可以呢?

     

  • 另外你现在出现的问题主要是什么,描述清楚。

    LiangLiang wang1 说:

    怎么使用PWM模块的的Fault信号禁止六路PWM信号的输出???

    uint16_t Fault;

    int main(void)
    {

         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);

         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);

         SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

         SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);

         GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);

          IntMasterEnable();

          IntEnable(INT_PWM0_FAULT);

          GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,FALSE);
          Fault=GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_2);

    PB2.0 作为输出,你怎么读取Fault值。


          while(Fault==1)
          {
             PWM0faultIntHandler();
          }

          for(;;) //infinite loop
          {}

    }

    void
    PWM0faultIntHandler(void)
    {
         //清除错误中断
         PWMFaultIntClear(PWM0_BASE);
         PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
         PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, false);
         PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, false);
         PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, false);
         PWMOutputState(PWM0_BASE, PWM_OUT_4_BIT, false);
         PWMOutputState(PWM0_BASE, PWM_OUT_5_BIT, false);
    }

    这样写为什么不可以呢?

         

  • 就算改成用PD2引脚来读取PB2引脚的值还是不行

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2);
    Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);

    现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数

  • 有没有使用PWM0FAULT0的例子?不知道怎么使用它检测故障信号禁止PWM输出!

  • GPIO读,怎么能对GPIO进行写操作呢。

    PB2信号是什么?

    LiangLiang wang1 说:

    就算改成用PD2引脚来读取PB2引脚的值还是不行

    GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,GPIO_PIN_2);
    Fault=GPIOPinRead(GPIO_PORTD_BASE, GPIO_PIN_2);

    现在的问题是Fault的值一直是0,没法进入PWM0faultIntHandler()中断处理函数

  • 想用PB2来模拟故障信号,PD2为PWM模块的Fault接收信号,将PB2与PD2短接。当PB2为高电平时PD2接收到一个故障信号而进入PWM0FaultIntHandler()中断处理函数,禁止六路PWM输出,起到故障保护的作用。

    就是想实现这样的功能,请问该怎么在程序里面进行设置呢?

  • 你现在的问题是就没有进去中断,好好检查下为什么进不去中断呢?这里有个怀疑的问题,那就是你PB2和PD2短接的问题,你可以试试直接短路PD2为GND和VCC试试。

  • 如果把PD2配置为PWM0Fault0是不是经过下面三步就可以了?

    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);

        GPIOPinTypePWM(GPIO_PORTD_BASE, GPIO_PIN_2);

        GPIOPinConfigure(GPIO_PD2_M0FAULT0);

    然 后设置PWMOutputFaultLevel(PWM0_BASE, PWM_OUT_0_BIT|PWM_OUT_1_BIT|PWM_OUT_2_BITPWM_OUT_3_BIT|

                                                                                           PWM_OUT_4_BIT|PWM_OUT_5_BIT,false)

    当PD2接受到高电平时,六路PWM就按指定电平输出,即PWM被锁死,是这样吗?

  • 最主要的,增加中断向量表的配置,进行中断的配置。IO的配置的话,可以用TI专门的引脚配置工具试试,看看缺少了哪一步的配置。

  • 有PWMFault信号设置成功的程序吗,贴上来参考一下,谢谢!

  • 这个模块没有用过。官方也是没有提供例程的,只能自己写了。

  • 能不能麻烦您抽空写一个关于TM4C123GH6PM在KEIL环境下如何建立一个工程,搭一个完整的开发环境?(之前您那个帖子有点简单)

    刚刚开始接触这个芯片,发现网上关于他的资料更是少之又少,甚至都没有一个详细的资料介绍他在keil环境下的开发,

    为我们这样的初入门者带来极大的困扰,一种有着宝贝用不了的感觉;

    这么好东西没有足够的入门带领,真是挺烦躁的,

    再次请您考虑下小白的痛苦,拜谢!

  • 给你推荐一本书,《嵌入式系统教程——基于TivaC系列ARM Cortex—M4微控制器》里面讲得比较详细,在KEIL和CCS新建工程都有讲解!

  • 下载Tivaware这个软件,里面包含了CCS和Keil工程,从TI代码例程入手。

  • 因为是从51直接到M4 的所以看哪个并不是很清楚呢,哎

  • 从51转过来的话,确实有些不清楚。M3或者M4和51不同的地方在于,用库,都是用库的。其他部分都是交给编译器搞定的。楼上说的那本书,可以看看。