MSP432(Keil5)——6.PWM驱动
本次实验在5个IO扣上产生了PWM波,频率计算方法已经放在了代码注释里面,请大家耐心食用。
pwm.c
#include "pwm.h"
/* Timer_A PWM Configuration Parameter */
/* fre(Hz) = clock / div / period */
/* 48000000/20/48000= 50Hz*/
/* 通道一 */
Timer_A_PWMConfig pwmConfig_c1 =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_20,
/* period */
48000,
TIMER_A_CAPTURECOMPARE_REGISTER_1,
TIMER_A_OUTPUTMODE_RESET_SET,
0
};
/* 通道二 */
Timer_A_PWMConfig pwmConfig_c2 =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_10,
/* period */
48000,
TIMER_A_CAPTURECOMPARE_REGISTER_2,
TIMER_A_OUTPUTMODE_RESET_SET,
10000
};
/* 通道三 */
Timer_A_PWMConfig pwmConfig_c3 =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_5,
/* period */
2400,
TIMER_A_CAPTURECOMPARE_REGISTER_3,
TIMER_A_OUTPUTMODE_RESET_SET,
500
};
/* 通道四 */
Timer_A_PWMConfig pwmConfig_c4 =
{
TIMER_A_CLOCKSOURCE_SMCLK,
TIMER_A_CLOCKSOURCE_DIVIDER_20,
/* period */
2400,
TIMER_A_CAPTURECOMPARE_REGISTER_4,
TIMER_A_OUTPUTMODE_RESET_SET,
500
};
void PWM_A0_Init(void)
{
/* P2.4 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN4 ,
GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig_c1);
/* P2.5 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN5 ,
GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig_c2);
/* P2.6 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN6 ,
GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig_c3);
/* P2.7 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P2, GPIO_PIN7 ,
GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A0_BASE, &pwmConfig_c4);
}
void PWM_A2_Init(void)
{
/* P5.6 */
MAP_GPIO_setAsPeripheralModuleFunctionOutputPin(GPIO_PORT_P5, GPIO_PIN6,
GPIO_PRIMARY_MODULE_FUNCTION);
MAP_Timer_A_generatePWM(TIMER_A2_BASE, &pwmConfig_c1);
}
pwm.h
#ifndef __PWM_H #define __PWM_H /* DriverLib Includes */ #include <ti/devices/msp432p4xx/driverlib/driverlib.h> void PWM_A0_Init(void); void PWM_A2_Init(void); #endif
