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.

[参考译文] CCS/MSP432P401R:频率和占空比

Guru**** 2595805 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/646151/ccs-msp432p401r-frequencyy-and-duty-cycle

部件号:MSP432P401R

工具/软件:Code Composer Studio

IM使用定时器是一个示例代码。但谁能解释在何处将频率切换为60Hz,将占空比切换为25?

/* DriverLib包括*/
#include <ti/devices/msp432p4xx/driverlib/driverlib.h>

/*标准包括*/
#include <stdint.h>
#include <stdbool.h>

//![简单定时器A配置]
/* Timer_A PWM配置参数*/
Timer_a_PWMConfig pwmConfig =

       Timer_A_CLOCKSOURCE_SMCLK,
       Timer_a_CLOCKSOURCE_diver_1,
       3.2万,
       Timer_a_CAPTURECOMPare_register_1,
       Timer_a_OUTPUTMODE_RESET_SET,
       3200
};
//![简单定时器A配置]

内部主(无效)

   /*停止监视程序*/
   MAP_WDT_A_HoldTimer();

   //![简单定时器A示例]
   /*将MCLK设置为REFO,低频模式为128Khz
    *将SMCLK设置为64Khz */
   MAP_CS_setReference振 荡器频率(CS_REFO_128KHZ);
   MAP_CS_initClockSignal (CS_MCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_1);
   MAP_CS_initClockSignal (CS_SMCLK,CS_REFOLCLK_SELECT,CS_CLock_diver_2);
   MAP_PCM_setPowerState(PCM_AM_LH_VCORE0);

   /*将2.4 的外围输出配置为PWM ,将WFP的6.7 配置为按钮
    *中断*/
   MAP_GPIO_setAsPeripheralModuleFunctionOutputPin (GPIO端口P2,GPIO_PIN4,
           GPIO主要模块功能);
   MAP_GPIO_setAsInputPinWithPullUp阻 器(GPIO_PORT_P1, GPIO_PIN1);
   MAP_GPIO清除InterruptFlag (GPIO端口P1,GPIO PIN1);
   MAP_GPIO_enableInterrupt (GPIO端口_P1,GPIO _PIN1);

   /*将Timer_A配置为具有大约500ms和的周期
    * 10 % 的初始占空比(3200 tick) *
   MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
   //![简单定时器A示例]

   /*启用中断并启动监视程序计时器*/
   MAP_Interrupt_enableInterrupt (INT_Port1);
   MAP_Interrupt_enableSleepOnIsrExit();
   MAP_Interrupt_enableMaster();

   /*不使用时休眠*/
   同时(1)
   {
       MAP_PCM_GotoLPM0();
   }
}

/*端口1 ISR -此ISR将逐步增加PWM的占空比
 *按下按钮
 */
void Port1_IRQHandler(void)

   UINT32_t状态= MAP_GPIO _getEnabledInterruptStatus (GPIO端口P1);
   MAP_GPIO清除InterruptFlag (GPIO端口P1,状态);

   IF (状态和GPIO _PIN1)
   {
       IF (pwmConfig.dutyCycle == 2.88万)
           pwmConfig.dutyCycle = 3200;
       否则
           pwmConfig.dutyCycle +=3200;

       MAP_Timer_a_generatePWM (TIMER_A0_BASE,&pwmConfig);
   }
}

另外,我尝试使用此代码,但它没有成功,并给出一个错误,指出TA0CRR1,TA0CTL P1DIR未定义。 我想对一些简单易懂的代码进行编码。另外,我需要在哪里更改为引脚1.0 (红色LED),以便LED将亮起?

#include "msp.h"


/**
 主要c
 */
Void主(void)

WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1DIR |= BIT2+BIT3;                       // P1.2 and P1.3 output
  P1SEL |= BIT2+BIT3;                       // P1.2 and P1.3 options select
  TA0CCR0 = 512-1;                          // PWM Period
  TA0CCTL1 = OUTMOD_7;                      // CCR1 reset/set
  TA0CCR1 = 384;                            // CCR1 PWM duty cycle
  TA0CCTL2 = OUTMOD_7;                      // CCR2 reset/set
  TA0CCR2 = 128;                            // CCR2 PWM duty cycle
  TA0CTL = TASSEL_2 + MC_1 + TACLR;         // SMCLK, up mode, clear TAR
  __bis_SR_register(LPM0_bits);             // Enter LPM0
  __no_operation();                         // For debugger
}