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.

[参考译文] EK-TM4C1294XL:PWM 问题

Guru**** 2473260 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/682378/ek-tm4c1294xl-pwm-problem

器件型号:EK-TM4C1294XL

大家好、我编写了以下代码来在 P0引脚上获取 PWM 信号。 我创建了此函数并将其调用到主函数中、但它不执行任何操作、LED 未亮起、我所用的示波器显示没有脉冲、可以有人帮助我解决:

void
configurePWM (void)
{
//
//启用 PWM 使用的 GPIO 外设(PF0、最终为 PF1)
//
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);

//
//启用 PWM0
//
SysCtlPeripheralEnable (SYSCTL_Periph_PWM0);

//
//将时钟分频以供 PWM 使用-现在将使用一个
//
SysCtlPWMClockSet (SYSCTL_PWMDIV_1);

//
//解锁引脚
//
HWREG (GPIO_PORTF_BASE + GPIO_LO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_O_CR)= 0x01;

//
//为 PWM 配置 GPIO 引脚
//
GPIOPinConfigure (GPIO_PF0_M0PWM0);
GPIOPinTypePWM (GPIO_PORTF_BASE、GPIO_PIN_0);

//
// Cofigure PWM
//
PWMGenConfigure (PWM_GEN_0_OFFSET、PWM_GEN_0、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);

//
//设置 PWM 周期
//
PWMGenPeriodSet (PWM_GEN_0_OFFSET、PWM_GEN_0、99);//每个周期99+1个时钟节拍仅用于测试

//
//设置占空比
//
PWMPulseWidthSet (PWM_GEN_0_OFFSET、PWM_OUT_0、49);//49+1个时钟周期、仅用于测试

//
//启用 PWM
//
PWMGenEnable (PWM_GEN_0_OFFSET、PWM_OUT_0);
PWMOutputState (PWM_GEN_0_OFFSET、PWM_OUT_0_BIT、TRUE);
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在编译和调试时不会遇到编译器错误
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我有一个针对您的编译器错误的解决方案。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Hisham、您好!

    PWM_GEN_0_OFFSET 的用途是什么? 对于所有函数、该值应为 PWM0_BASE。 我从未见过使用它的 PWM 配置。

    请尝试更改、看看您是否得到结果。

    另请注意我们的示例代码中有关 PWMGenPeriodSet 和 PWMPulseWidthSet 参数的注释

    //
    //将 PWM 周期设置为250Hz。 以计算适当的参数
    //使用以下公式:n =(1 / f)* SYSCLK。 其中 N 是
    //函数参数、f 是所需的频率、SYSCLK 是
    //系统时钟频率。
    //在本例中、您得到:(1/250Hz)* 16MHz = 64000个周期。 请注意
    //可以设置的最大周期为2^16。
    //
    PWMGenPeriodSet (PWM0_BASE、PWM_GEN_0、64000);
    
    //
    //对于此示例、PWM0占空比将是可变的。 占空比
    //将从0.1%开始(0.01 * 64000个周期= 640个周期)并将增加
    //至75%(0.5 * 64000个周期= 32000个周期)。 在75%的占空比后
    //、它被重置为0.1%。 脉冲的动态调整
    //宽度在 PWM0装载中断中完成、这会增加占空比
    //每次收到重新加载中断时,循环0.1%。
    //
    PWMPulseWidthSet (PWM0_BASE、PWM_OUT_0、64); 

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

    [报价用户="Hisham Hafez"] PWMGenEnable (PWM_GEN_0_OFFSET、PWM_OUT_0);[/报价]

    请注意、除了"wm_GEN_0_OFFSET"的"发明"(但错误)创建之外  、您对这个(非常)关键函数的编码也证明(也是)错误:

    [报价用户="Hisham Hafez"] PWMGenEnable (PWM_GEN_0_OFFSET、 PWM_OUT_0);[/报价]

    正确的编码为  :PWMGenEnable (PWM0_BASE、  PWM_GEN_0);


    我们应该注意到        、"编译器错误"的"有根据的解决方案"-如果有的话(由另一位提出)-肯定"错过了"由供应商代理  本报告员确定的真实错误...  (双方都应适当 地"分享"  授予绿色环保。)   不知怎么说 ,“绿色已经渗透 了……  此帖子!

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

    很好,我也错过了这个不匹配。

    虽然有趣的是、我认为这可能仍然会无意中工作、因为这一特定情况下每个匹配的定义都是如此、但使用 GEN 超时是了解所有其他通道的关键、因为只有通道0碰巧在 magically 中对这2个变量具有相同的定义... 简单的成功将会带来未来的麻烦!
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    哇-这比我自己更好的“收获”!   事实上、一旦出现这种(错误)、"似乎正常工作"、就要求"太阳、月亮和星星"都保持一致、然后用户才能"承认他们的错误!"

    "但它只能工作一次"-在果味平原上回声(太频繁了)!    作为顾问-我的公司面临这种情况、 "尝试概括这种"偶然的解决方案" (工作一次-仅工作一次)的频率远远超过预期!

    不幸的是,“工作一次”不能始终如一:“保持开门让工作人员感到温暖,欢呼(白炽灯)!”   (即使此类"发光"已(破坏性)被禁止、尤其是因为此类"发光"已被禁止...)

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

    感谢您-正确的"为每个人颁发绿色奖" (Ralph et Moi)将"完成此主题!"   

    哦... 不要忘记您对“有用”编译器错误的请求-“已发出但未提交”...  或者(可能)不!

    您的"绿色奖"(在它也被"拉"之前)(还不错)...  就像"喜欢"一样)得到了应有的认可、称赞和赞赏...   您正在"跨越式进步"-干得好...