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.

[参考译文] TM4C1230E下午6:PWM 问题

Guru**** 2387830 points
Other Parts Discussed in Thread: TM4C1230E6PM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/663925/tm4c1230e6pm-pwm-issue

器件型号:TM4C1230E6PM

我在 TM4C1230E6Pm 器件上工作,  并遇到 PWM 代码问题,下面是代码。

编译代码时出现输出错误,并且在运行器件时,执行  PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN)之后会出现 ISR 故障; 行。

请帮助我处理相同的问题或向我分享 PWM 的参考代码。

SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

SysCtlPWMClockSet (SYSCTL_PWMDIV_1);
// HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
// HWREG (GPIO_PORTF_BASE + GPIO_O_CR)|= 0x01;


GPIOPinConfigure (GPIO_PF1_M1PWM5);
GPIOPinConfigure (GPIO_PF2_M1PWM6);
GPIOPinConfigure (GPIO_PF3_M1PWM7);

GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2|GPIO_PIN_3);


// PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN |PWM_GEN_MODE_NO_SYNC);
// PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN |PWM_GEN_MODE_NO_SYNC);

PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN);
PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN);

PWMGenPeriodSet (PWM1_base、PWM_GEN_2、400);
PWMGenPeriodSet (PWM1_base、PWM_GEN_3、400);

PWMPulseWidthSet (PWM1_base、PWM_OUT_5、400);
PWMPulseWidthSet (PWM1_base、PWM_OUT_6、400);
PWMPulseWidthSet (PWM1_base、PWM_OUT_7、400);


PWMGenEnable (PWM1_base、PWM_GEN_2);
PWMGenEnable (PWM1_base、PWM_GEN_3);

PWMOutputState (PWM1_base、(PWM_OUT_4_BIT | PWM_OUT_5_BIT | PWM_OUT_6_bit|PWM_OUT_7_bit)、true);

// PWMGenDisable (PWM1_base、PWM_GEN_2);
// PWMGenDisable (PWM1_base、PWM_GEN_3);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="vijender Singh"]执行   PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN)后,ISR 将出现故障;[/引用]

    这可能是因为您没有为 PWM_GEN_2实施适当的"引脚配置"代码?   您也没有“输入 PIN” ...  任何 PWM 引脚!

    您的代码:

    GPIOPinConfigure (GPIO_PF1_M1PWM5);
    GPIOPinConfigure (GPIO_PF2_M1PWM6);  
    GPIOPinConfigure (GPIO_PF3_M1PWM7);

    忽略 xyz_M1PWM4 -不是吗?

    "PWM_GEN_2"包含: "XYZ M1PWM4 xyz_M1PWM5?"    您已经为位5创建了列表-但不为位4创建了列表!

    我尚未检查您的 MCU 数据表-是否"确定"引脚"xyz_M1PWM4"包含在端口 F 中?    (因为这是(之前)启用的唯一端口?)

    和-您尚未对"GPIOPinTypePWM()"进行所需的调用 、该调用针对所有配置为 PWM 的引脚强制执行。

    供应商提供出色的代码示例-似乎您未完全/正确地"找到或部署"。   软件/示例/外设/PWM……  路标...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

     我看不到您的代码有问题、但在检查 TM4C1230E6上的功能可用性后、PWM 不可用。 这就是您将遇到硬故障的原因。

     我建议您访问 TM4C 产品页面、查找最符合您应用需求的器件。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    悲伤-这是海报 Danny 的 LX4F120的"阴影"-也忽略了任何 PWM 模块! 这必须是"成本最低的 TM4C!"
    这样一个"设备不良的 MCU"在"离网车厢"中可能会很好地工作-其中、"将斗杆摩擦在一起(可能)会产生火灾!"   (还是我的心...)

    是否确实在软件下消除了 StellarisWare 所要求的 PWMPinType()函数?   (海报的代码将任何/所有呼叫保留到 PinType Out。。。)   同时丢失位4的配置...   除此之外-代码是好的。   (突然-我闻到烟味... 它不再是黑暗的。。。)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、
    我认为海报使用的是 GPIOPinTypePWM、这很好。 即使没有正确的引脚类型配置、也不应导致硬故障。 导致故障的原因是该器件型号中的 PWM 模块不可用。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    我们是否可以注意到海报没有使用 GPIOPinTypePWM()?   它从未出现过。

    可能会被询问、"他的代码行"SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);"是如何 产生故障的!"   

    此行代码出现在"PWMGenConfig()"-它是否应该没有引起故障?   (尚未!)    (正如您所注意到的-此 MCU 不包含 PWM 模块!)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 CB1、

     下面是海报代码片段。 我认为 SysCtlPeripheralEnable() 将启用 PWM1模块的时钟。 时钟使能寄存器位于 SYS 模块内部。 在 PWM1寄存器被访问之前、故障不会发生。 该海报说,调用 PWMGenConfigure()时发生故障是有道理的。 访问 SYS 和 GPIO 模块中的寄存器之前的代码。  

    SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
    SysCtlPeripheralEnable (SYSCTL_Periph_PWM1);

    SysCtlPWMClockSet (SYSCTL_PWMDIV_1);
    // HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
    // HWREG (GPIO_PORTF_BASE + GPIO_O_CR)|= 0x01;


    GPIOPinConfigure (GPIO_PF1_M1PWM5);
    GPIOPinConfigure (GPIO_PF2_M1PWM6);
    GPIOPinConfigure (GPIO_PF3_M1PWM7);

    GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2|GPIO_PIN_3);

    // PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN |PWM_GEN_MODE_NO_SYNC);

    // PWMGenConfigure (PWM1_base、PWM_GEN_3、PWM_GEN_MODE_DOWN |PWM_GEN_MODE_NO_SYNC);

    PWMGenConfigure (PWM1_base、PWM_GEN_2、PWM_GEN_MODE_DOWN);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用用户="Charles Tsaa"]我认为 SysCtlPeripheralEnable() 将启用 PWM1模块的时钟。[/quot]

    不能(更远)打败这只死马(尽管它很有趣),但是... 此双通道 MCU 具有无/零 PWM 模块!   因此、"启用一个时钟-到一个不存在的外设模块"-将"不产生故障"是"合理的"吗?    这就是"疯狂制造"-是不是吗?

    我们知道您不会"制定规则"-但(任何)这里的逻辑充其量是"被折磨"的- "不存在"(就像这个 MCU 中的 PWM 模块一样)最糟糕的情况!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    他的项目设置一定有问题。 代码不应编译、因为在定义 PART_TM4C1230E6PM 时、未在 driverlib/pin_map.h 中定义 PWM 引脚宏。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 CB1、

    如前所述、用于启用 PWM 或任何模块的寄存器位于 SYS 中。 外设存在寄存器也位于 SYS 内部。 任何一个都将阻止对 PWM1模块的任何访问、但仅在访问 PWM1内的寄存器之前。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这不是第一次有人在互联网上说过不真实的事情。

    至 OP:始终阅读数据表。 只要您知道芯片的工作原理以及可以配置哪些外设来执行您想要的操作、就可以在芯片上完成您尝试执行的操作。

    具体而言、这些芯片可配置为从其计时器生成 PWM、如果可用、也可从其 PWM 模块生成 PWM。 但您需要阅读数据表。 复制和粘贴某人的代码不会使您远程接近目标。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 user="Danny F"]复制并粘贴某人的代码不能使您远程接近目标。

    从什么时候开始?"   这种方法(经常)不是 "就在这里?"

    [引用用户="Danny F"]这不是第一次有人在互联网上说的不真实的事[/引用]

    这里有一些... 发现" 难以相信"。

    海报的装置(似乎)是  LX4F120的"重塑"。   (两个 PWM 模块均无... 垃圾填埋 "向每一个发出"呼吁...")