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.

[参考译文] TM4C129XNCZAD:用于切换 PWM 引脚的程序未按预期工作

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1282215/tm4c129xnczad-program-to-toggle-pwm-pin-does-not-work-as-expected

器件型号:TM4C129XNCZAD

尊敬的所有人:

我正在尝试编写一个程序、使用 PWM 引脚(PK5)在 GPIO 上生成脉冲信号。

下面是我写的。 但是、当我检查 Pin 时、我没有得到任何信号。

有什么我可能弄乱了吗?

此致、

吉恩

//一个用于切换给定 GPIO 引脚的功能
//
#包括
#包括
#包括
#包括"inc/hw_memmap.h"
#包括"inc/hw_types.h"
#包括"inc/hw_ints.h"
#包括"driverlib/sysctl.h"
#包括"driverlib/gpio.h"
#包括"driverlib/interrupt.h"
#包括"driverlib/pin_map.h"
#包括"driverlib/rom.h"
#包括"driverlib/rom_map.h"
#包括"driverlib/pwm.h"
#include "driverlib/flash.h"
#include "utils/swupdate.h"
#include "utils/ustdlib.h"
#include "utils/uartstdio.h"


uint32_t g_ui32SysClock;
/**
* main.c
*/
int main (空)
{
//设置微控制器的频率

g_ui32SysClock = MAP_SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480)、120000000);
//启用外设端口 f (激活端口 F)
// SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOB);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOC);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOH);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOJ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);
SysCtlPeripheralEnable (SYSCTL_Periph_GPILL);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOM);
SysCtlPeripheralEnable (SYSCTL_Periph_GPION);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOP);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOQ);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOR);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIO);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOT);

//启用外设端口 K (激活端口 K)
// SysCtlPeripheralEnable (SYSCTL_Periph_GPIOK);

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

//将引脚 PK5初始化为输出引脚
GPIOPinTypeGPIOOutput (GPIO_PORTK_BASE、GPIO_PIN_5);
//
//设置引脚 PF5的上拉功能
GPIOPadConfigSet (GPIO_PORTK_BASE、GPIO_PIN_5、GPIO_strength_8mA、GPIO_PIN_TYPE_STD);

//将输出写入引脚 PK5
GPIOPinWrite (GPIO_PORTK_BASE、GPIO_PIN_5、GPIO_PIN_5);

//将 PK5的默认输出设置为零
GPIOPinWrite (GPIO_PORTK_BASE、GPIO_PIN_5、0);

//将引脚 PK5功能类型设置为 PWM
//
GPIOPinTypePWM (GPIO_PORTK_BASE、GPIO_PIN_5);
//
//将引脚 PK5配置为 PWM7引脚信号
GPIOPinConfigure (GPIO_PK5_M0PWM7);
//
//
//等待 PWM0模块准备就绪。
while (! SysCtlPeripheralReady (SYSCTL_Periph_PWM0)
{

SysCtlPWMClockSet (SYSCTL_PWMDIV_1);

//将 PWM 发生器配置为可立即更新的递减计数模式
//添加到参数中。
//
PWMGenConfigure (PWM0_BASE、PWM_GEN_3、PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);
//
//设置周期。 频率为100KHz 时、周期= 1/100,000或10
//微秒。 对于一个120 MHz 时钟、这将转换为1200个时钟周期。
//使用该值设置周期。
//
PWMGenPeriodSet (PWM0_BASE、PWM_GEN_31200);
//
//将 PWM0的脉冲宽度设置为25%占空比。
//
PWMPulseWidthSet (PWM0_BASE、PWM_OUT_7300);

//启动发生器0中的定时器。
//
PWMGenEnable (PWM0_BASE、PWM_GEN_3);

//启用输出。
//
PWMOutputState (PWM0_BASE、(PWM_OUT_7_bit)、true);

返回0;

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

    您好!

     我真的不觉得你的代码有问题。 可以在 LaunchPad 上运行相同的代码吗? 您看到 PWM 信号了吗?

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

    尊敬的 Charles:

    我终于启动了切换。

    对于 TM4C129XNCZAD、设置 PWM 时钟的功能

     PWMClockSet ();而不是  SysCtlPWMClockSet ();

    谢谢大家。

    此致、

    吉恩