/*
* main.c
*/
#include"PWM.c"
#include"msp430f5529.h"
void main(void) {
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
set_PWM(20000);
while(1)
{
//舵机,可自行修改
setPWM_duty_cycle(12,2000);
delay_ms(1000);
setPWM_duty_cycle(13,500);
setPWM_duty_cycle(14,4000);
delay_ms(1000);
setPWM_duty_cycle(13,2500);
setPWM_duty_cycle(14,500);
delay_ms(1000);
}
//_bis_SR_register(LPM0_bits); //进入低功耗模式
//_no_operation();
}文章来源地址https://www.toymoban.com/news/detail-629664.html
PWM.C文件
PWM.c
#include"msp430f5529.h"
void delay_ms(int t)
{
int i;
for(i=0;i<t;i++)
__delay_cycles(1000);
}
void setPWM_duty_cycle(int P_IO,int duty_cycle)//占空比
{
switch (P_IO)
{
case 12:TA0CCR1 = duty_cycle;break;
case 13:TA0CCR2 = duty_cycle;break;
case 14:TA0CCR3 = duty_cycle;break;
case 15:TA0CCR4 = duty_cycle;break;
case 20:TA1CCR1 = duty_cycle;break;
case 21:TA1CCR2 = duty_cycle;break;
case 24:TA2CCR1 = duty_cycle;break;
//case 25:TA2CCR2 = duty_cycle;break;//P25有问题,暂不用
case 35:TB0CCR5 = duty_cycle;break;
case 36:TB0CCR6 = duty_cycle;break;
case 57:TB0CCR1 = duty_cycle;break;
case 74:TB0CCR2 = duty_cycle;break;
case 75:TB0CCR3 = duty_cycle;break;
case 76:TB0CCR4 = duty_cycle;break;
default:
break;
}
}
void set_PWM(int Cycle)
{
//PWM波功能配置
/**************/文章来源:https://www.toymoban.com/news/detail-629664.html
//TA0~TA2,均为普通定时器,各有4个管家
//Timer_A,TA0
P1DIR |= BIT2 + BIT3+BIT4+BIT5; //管脚P1.2,3,4,5设置为输出
P1SEL |= BIT2 + BIT3+BIT4+BIT5; //管脚P1.2,3,4,5选择复用功能
TA0CCR0 = Cycle; //设置PWM波周期
TA0CCTL1 =OUTMOD_7; //TA0比较捕获器1输出模式设置为reset/set模式;//配置P1.2为OUTMOD_7模式;
TA0CCR1 = 500; //设置PWM波的占空比,P1.2
TA0CCTL2 = OUTMOD_7;//配置P1.3为OUTMOD_7模式;
TA0CCR2 =500; //设置PWM波的占空比,P1.3
TA0CCTL3 = OUTMOD_7;//配置P1.3为OUTMOD_7模式;
TA0CCR3 =500; //设置PWM波的占空比,P1.4
TA0CCTL4 = OUTMOD_7;//配置P1.3为OUTMOD_7模式;
TA0CCR4 =500; //设置PWM波的占空比,P1.5
TA0CTL = TASSEL_2 + MC_1 +TACLR; //设置定时器A的时钟输入源为SMCLK增计数模式,MC1为Up模式,同时清零定时器计数值
//Timer_A,TA1
P2DIR |= BIT0 + BIT1+BIT3+BIT4; //管脚P1.0,1,3,4设置为输出
P2SEL |= BIT0 + BIT1+BIT3+BIT4; //管脚P1.0,1,3,4选择复用功能
TA1CCR0 = Cycle; //设置PWM波周期
TA1CCTL1 =OUTMOD_7; //TA1比较捕获器1输出模式设置为reset/set模式;//配置P2.0为OUTMOD_7模式;
TA1CCR1 = 500; //设置PWM波的占空比,P2.0
TA1CCTL2 = OUTMOD_7;//配置P2.1为OUTMOD_7模式;
TA1CCR2 =500; //设置PWM波的占空比,P2.1
TA1CTL = TASSEL_2 + MC_1 +TACLR; //设置定时器A的时钟输入源为SMCLK增计数模式,MC1为Up模式,同时清零定时器计数值
//TA2
TA2CCR0 = Cycle;//PWM波周期
TA2CCTL1 = OUTMOD_7;//配置P2.4为OUTMOD_7模式;
TA2CCR1 = 500;//配置P2.4占空比
//TA2CCTL2 = OUTMOD_7;//配置P2.5为OUTMOD_7模式;
//TA2CCR2 =500; //设置PWM波的占空比,P2.5
/*P2.5口暂时有问题*/
TA2CTL = TASSEL_2 + MC_1 +TACLR;
//Timer_B,TA0
P3DIR |= BIT5 + BIT6; //管脚P3.5,6设置为输出
P3SEL |= BIT5 + BIT6; //管脚P3.5,6选择复用功能
P5DIR |= BIT7;
P5SEL |= BIT7;
P7DIR |= BIT4+BIT5+BIT6+BIT7;
P7SEL |= BIT4+BIT5+BIT6+BIT7;
TB0CCR0 = Cycle; //设置PWM波周期
TB0CCTL5 =OUTMOD_7; //TB0比较捕获器输出模式设置为reset/set模式;//配置P3.5为OUTMOD_7模式;
TB0CCR5 = 500; //设置PWM波的占空比,P3.5
TB0CCTL6 = OUTMOD_7; //配置P3.6为OUTMOD_7模式;
TB0CCR6 = 500; //设置PWM波的占空比,P3.6
TB0CCTL1 =OUTMOD_7; //TB0比较捕获器输出模式设置为reset/set模式;//配置P5.7为OUTMOD_7模式;
TB0CCR1 = 500; //设置PWM波的占空比,P5.7
TB0CCTL2 = OUTMOD_7; //配置P7.4为OUTMOD_7模式;
TB0CCR2 = 500; //设置PWM波的占空比,P7.4
TB0CCTL3 =OUTMOD_7; //TB0比较捕获器输出模式设置为reset/set模式;//配置P7.5为OUTMOD_7模式;
TB0CCR3 = 500; //设置PWM波的占空比,P7.5
TB0CCTL4 = OUTMOD_7; //配置P7.6为OUTMOD_7模式;
TB0CCR4 = 500; //设置PWM波的占空比,P7.6
TB0CTL = TASSEL_2 + MC_1 +TACLR; //设置定时器A的时钟输入源为SMCLK增计数模式,MC1为Up模式,同时清零定时器计数值
//Timer_B,TB0,高级定时器
/**************/
}
到了这里,关于MSP430F5529_PWM波全调制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!