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.

[参考译文] TM4C123GE6PM:使用 GPIOAFSEL 和 GPIOPCTL 以 Tivaware 的方式在端口 C 上启用 PWM。。。

Guru**** 2468610 points
Other Parts Discussed in Thread: TM4C123GE6PM

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/675662/tm4c123ge6pm-using-gpioafsel-and-gpiopctl-to-enable-pwm-on-portc-in-a-tivaware-way

器件型号:TM4C123GE6PM

我尝试使用 PC4/5启用 PWM。  我从文档中了解到、我必须设置 PMC 字段并可能设置 GPIOAFSEL 以启用这些引脚。  我找不到一个语法示例来实现这一点。  是否有人可以提供一些关于如何写入这些寄存器的帮助?

我已经离开了设置 PWM 时钟的部分。  该代码一直工作、直到我尝试将其移动到不同的引脚。

提前感谢您的任何帮助。

SysCtlPeripheralEnable (SYSCTL_Periph_PWM0); //PWM
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC); //PWM
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF); //GPIO

/*
*左侧电机
*
GPIOPinTypePWM (GPIO_PORTC_BASE、GPIO_PIN_4);
GPIOPinConfigure (GPIO_PC4_M0PWM6);

/*
*右侧电机
*
GPIOPinTypePWM (GPIO_PORTC_BASE、GPIO_PIN_5);//pin1 =左侧电机、PIN2 =右侧电机
GPIOPinConfigure (GPIO_PC5_M0PWM7);

PWMGenConfigure (PWM0_BASE、PWM_GEN_3、PWM_GEN_MODE_DOWN);


/*
*左侧电机
*
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_6、0); //无电机转速
PWMOutputState (PWM0_BASE、PWM_OUT_6_BIT、TRUE);

/*
*右侧电机
*
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_7、0); //无电机转速
PWMOutputState (PWM0_BASE、PWM_OUT_7_BIT、TRUE);

PWMGenEnable (PWM0_BASE、PWM_GEN_3);


PWMPulseWidthSet (PWM0_BASE,电机,50 * ui32Load /1000);

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

    您好、Alen、

     您是不是说如果您选择 PC4/5、项目将不会编译?  您是如何创建项目的? 您是否按如下方式选择了 Tiva TM4C123GE6PM?

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

    发现您的代码呈现得非常好-您证明您对 PWM API 非常了解-但有几个项目"解锁:"

    • PWMPeriodSet()……  重要-但 未展示!
    • 在  最终 PWMPulseWidthSet 中使用"电机"(代替 PWM_OUT_n)、 但 "电机"  未定义!
    •   在最后一个 PWMPulseWidthSet()中过早使用"复杂表达式"。   始终最好先-使功能发挥作用- 然后再增加复杂性!
    • "0"加载到两个(之前) PWMPulseWidthSet()...  已确定 PWM 值 "在其限值" 经常出现错误行为。   个"安全"值 (不是0或100%)-验证代码的运行!

    必须确保没有硬件或任何(未怀疑)连接侵入 PC4/PC5。

    您在路上表现良好-您已经掌握了"常见的嫌疑"-上面的指导原则旨在加快、简化、提高您的成功...

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

    这是一个很愚蠢的语法问题、感谢您的帮助。  它现在正在工作。

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

    您是否可以"共享语法修复程序"、以便"后续"读者受益?    希望您的 PWM 从"极端"中"受限/保护频带"。   ("0和100%"占空比-其中已注意到"错误行为"...)

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

    没有太多要说的。  我将程序的 PWM 模块切为多个功能、当移动引脚时、尽管外观非常好(在夜间编写代码)、但我还是错过了一个参数。  引脚需要 PWM 0、我忽略了、注意到它仍然设置为1的位置。  因为我对它有了更好的了解、通过了故障排除、所以它的效果最好。  

    最后、在修改我正在使用的 LaunchPad XL GPIO 分线板之后、我将其设置回类似于 Tivaware 工作簿的示例15。  我的引脚数用完了、其中服务器引脚仅由分线重新连接到输入。  我再次移除了允许双向使用的缓冲器。

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

    谢谢-谢谢。
    我仍处于损失状态-您(现在)注意(过去)使用"PWM_1"-但您在这里提供的代码-(正确)针对 PWM_0。   

    "有问题的"是:没有调用"PWMGenPeriodSet()"和"Setting PWM Duty"到其"0" Extreme。

    您的"删除/绕过缓冲区"资源充足。   据说 MCU 用户"永远不会":太富、太薄或 Bi-Di GPIO 太多。   您可能知道、"端口扩展器芯片"可以很好地满足项目3。

    当您通过 MCU 的 PWM 发生器"运行电机"时、  您可以设计出一个出色的"PWM 故障引脚"、它可能会立即高效地"停止所有 PWM 输出"、以响应大多数"错误条件检测"。   (过流、过温、与控制环路的偏差... 例如)   当然值得您考虑...