主题中讨论的其他器件:EVM430-FR6043
社区您好。
我使用 EVM430-FR6043板通过 Timer_A1模块创建 PWM。
Timer_A1模块具有 TA1.0、TA1.1和 TA1.2引脚。
用于 TA1.0的 P1.2、用于 TA1.1的 P1.3以及用于 TA1.2的 P7.0
我读取示例代码以使用 Timer_A1生成两个 PWM、但无法生成正确的 PWM。
仅在 TA1.1 (P1.3)中发生 PWM 生成、占空比不正确。 我将提供占空比值、但创建的占空比值不同。
我附上了我的代码供您参考。 请帮助我解决此问题。
#include <msp430.h> #include "timer_a.h" #define TIMER_PERIOD 49 #define DUTY_CYCLE1 5 #define DUTY_CYCLE2 5 Timer_A_initCompareModeParam pwm_gen_0; Timer_A_initCompareModeParam pwm_gen_1; Timer_A_initUpModeParam pwm_up; /** * main.c */ int main(void) { WDTCTL = WDTPW | WDTHOLD; // Stop WDT // Configure GPIO P1DIR |= BIT2; // P1.2 as output P1DIR |= BIT3; // P1.3 as output P7DIR |= BIT0; // P7.0 as output P1SEL1 |= BIT2; // P1.2,P1.3 and P7.0 options select P1SEL1 |= BIT3; P7SEL1 |= BIT0; // Disable the GPIO power-on default high-impedance mode to activate // previously configured port settings PM5CTL0 &= ~LOCKLPM5; CSCTL0_H = CSKEY_H; // Unlock CS registers CSCTL1 = DCOFSEL_6; // Set DCO = 8MHz CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;// Set ACLK=VLO SMCLK=DCO CSCTL3 = DIVA__8 | DIVS__8 | DIVM__8; // Set all dividers CSCTL0_H = 0; /*------- Timer A1------------*/ pwm_up.clockSource=TIMER_A_CLOCKSOURCE_SMCLK; pwm_up.clockSourceDivider=TIMER_A_CLOCKSOURCE_DIVIDER_1; pwm_up.timerPeriod=TIMER_PERIOD; pwm_up.timerInterruptEnable_TAIE=TIMER_A_TAIE_INTERRUPT_DISABLE; pwm_up.captureCompareInterruptEnable_CCR0_CCIE=TIMER_A_CCIE_CCR0_INTERRUPT_DISABLE; pwm_up.timerClear=TIMER_A_DO_CLEAR; pwm_up.startTimer=false; pwm_gen_0.compareRegister=TIMER_A_CAPTURECOMPARE_REGISTER_1; pwm_gen_0.compareInterruptEnable=TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE; pwm_gen_0.compareOutputMode=TIMER_A_OUTPUTMODE_RESET_SET; pwm_gen_0.compareValue=DUTY_CYCLE1; pwm_gen_1.compareRegister=TIMER_A_CAPTURECOMPARE_REGISTER_2; pwm_gen_1.compareInterruptEnable=TIMER_A_CAPTURECOMPARE_INTERRUPT_DISABLE; pwm_gen_1.compareOutputMode=TIMER_A_OUTPUTMODE_RESET_SET; pwm_gen_1.compareValue=DUTY_CYCLE2; Timer_A_initUpMode(TA1_BASE,&pwm_up); Timer_A_initCompareMode(TA1_BASE,&pwm_gen_0); Timer_A_initCompareMode(TA1_BASE,&pwm_gen_1); Timer_A_startCounter(TA1_BASE,TIMER_A_UP_MODE); return 0; }
提前感谢、
萨尔沃特