int main (void)
{
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); //系统时钟40MHZ
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER1);//使能TIMER1 32位(TIMER0A16位+TIMER0B16位)
SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0);//使能PWM0模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能GPIOB外设
InitConsole();//配置UART,与距离测试无关
UARTprintf("******************************************* \n");
GPIOPinTypePWM(GPIO_PORTB_BASE, GPIO_PIN_6);//配置PB6为PWM功能
GPIOPinConfigure(GPIO_PB6_M0PWM0); //配置PB6为PWM
SysCtlPWMClockSet(SYSCTL_PWMDIV_1);//PWM时钟
PWMGenConfigure(PWM0_BASE,PWM_GEN_0,PWM_GEN_MODE_UP_DOWN| PWM_GEN_MODE_NO_SYNC);//配置PWM发生器0:加减计数,不同步
PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0, 1000);//设置PWM发生器的频率40KHz
PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 500);//设置PWM0/PWM1输出的脉冲宽度,50%占空比
PWMGenEnable(PWM0_BASE, PWM_GEN_0);//使能PWM发生器
GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_4);//配置PB4为输入管脚
GPIOPinConfigure(GPIO_PB4_T1CCP0); //Timer
GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_4);//配置PB4为Timer相关
TimerConfigure(TIMER1_BASE,TIMER_CFG_A_CAP_TIME_UP|TIMER_CFG_SPLIT_PAIR);//计时捕获模式,上升沿捕获
TimerControlEvent(TIMER1_BASE,TIMER_A,TIMER_EVENT_POS_EDGE); //捕获模式,A定时器,上升沿捕获
IntEnable(INT_TIMER1A); //使能TIMER0A
TimerIntEnable(TIMER1_BASE, TIMER_CAPA_EVENT); //定时器A捕获事件触发中断
IntMasterEnable();//master interrupt enable API for all interrupts
TimerEnable(TIMER1_BASE, TIMER_A);//TimerEnable(TIMER1_BASE, TIMER_A);
PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);
while(ui32Counter < 3)
{
ui32Counter++;
}
ui32Counter = 0;
PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, false);
while(1)
{
}
}
void Timer1IntHandler()
{
TimerFinal = TimerValueGet(TIMER1_BASE,TIMER_A);//Timer开始计时时即为超声波发出的时间,进入中断时为超声波接收到的时间,
Distance = (TimerFinal/SysCtlClockGet())*17000.0 ;//算出距离
f_char_printf(Distance);
UARTprintf(". . .over \n");
TimerIntClear(TIMER1_BASE,TIMER_CAPA_EVENT);//清除中断标志
}
就像这样,.....