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