|
求Tiva C TM4C1294单片机的超声波模块测距的代码
[复制链接]
超声波模块是ping)))的,但是HC-SR04也可以
这是我利用外部中断捕获上升沿和下降沿获得超声波测距的代码,但是并不能工作,求大神指点:
#include
#include
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/systick.h"
#include "driverlib/timer.h"
#include "driverlib/pwm.h"
unsigned char led=1;
int flog=0;
uint32_t ui32SysClkFreq;
unsigned long pluse;
void GPIO_Port_B_ISR(void)
{
GPIOIntClear(GPIO_PORTB_BASE, GPIO_PIN_2);
if(flog==1){
pluse=TimerValueGet(TIMER3_BASE, TIMER_B);
flog=0;
}else if (flog==0){
TimerConfigure(TIMER3_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_CAP_TIME_UP);
TimerLoadSet(TIMER3_BASE, TIMER_B, 0x8FFF);
flog=1;
}
}
int main(void)
{
ui32SysClkFreq=SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ |
SYSCTL_OSC_MAIN |
SYSCTL_USE_PLL |
SYSCTL_CFG_VCO_480), 120000000);
SysCtlClockSet(SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER3);
GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2);
GPIOPinTypeGPIOOutput(GPIO_PORTN_BASE, GPIO_PIN_0|GPIO_PIN_1);
GPIOPinWrite(GPIO_PORTN_BASE, GPIO_PIN_0|GPIO_PIN_1, 0);
GPIODirModeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_DIR_MODE_IN); /*设置连接KEY的PE0为输入*/
GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_2, /* 设置KEY的驱动强度和类型 */
GPIO_STRENGTH_2MA, /*2mA的输出驱动强度*/
GPIO_PIN_TYPE_STD_WPU); /* 设置LEY端口为弱上拉 */
GPIOIntTypeSet(GPIO_PORTB_BASE, GPIO_PIN_2, GPIO_BOTH_EDGES); /*设置KEY中断的触发方式为低电平触发 */
GPIOIntRegister(GPIO_PORTB_BASE,GPIO_Port_B_ISR);
GPIOIntEnable(GPIO_PORTB_BASE, GPIO_PIN_2); /* 使能KEY中断 */
IntEnable(INT_GPIOB); /* 使能GPIO PE 口中断 */
while (1)
{
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,0);
SysCtlDelay(100000);//2ms
//GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_2,1);
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,1);
SysCtlDelay(250000);//5ms
GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2,0);
/*
PORTD=00000001;
_delay_us(15);///triggering the sensor for 15usec
PORTD =00000000;
COUNTA = pulse/58;//getting the distance based on formula on introduction
// GPIOPinWrite(GPIO_PORTF_BASE, LED1, LED1); //点亮LED1
*/
}
}
|
|