超声波没有做单独的代码文件
直接自己创建.c.h文件,将这些复制粘贴即可,然后进行SYSCFG配置按照这些配置即可,有啥问题直接评论区提出,如果看不懂的话评论区说一下,再出讲解
超声波.c文件
#include "ti_msp_dl_config.h"
#include "Delay.h"int overcount=0; //记录定时器溢出次数
//测距函数
int Senor_Using()
{unsigned int sum=0;unsigned int tim;unsigned int i=0;unsigned int length;int cnt_i=0;while(i!=3) {DL_GPIO_setPins( ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN ); //TRIG=1; //给发送端高电平delay_us(20); DL_GPIO_clearPins(ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN ); //TRIG=0; //给发送端低电平cnt_i=0;//DL_GPIO_readPins(xunji_PORT_PIN1_PORT , xunji_PORT_PIN1_PIN )==xunji_PORT_PIN1_PINwhile(DL_GPIO_readPins(ultrasonic_Port_PORT,ultrasonic_Port_MCHO_Pin_PIN)!=ultrasonic_Port_MCHO_Pin_PIN) //当接收端为0,一直循环 while(ECHO==0){cnt_i++;delay_us(1);if(cnt_i>300){ DL_GPIO_setPins( ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN ); // TRIG=1; 发送端给高电平 delay_us(20);DL_GPIO_clearPins(ultrasonic_Port_PORT ,ultrasonic_Port_TRIG_Pin_PIN ); //TRIG=0; 发送端给低电平cnt_i=0; }} //跳出循环说明已经接收到信号,开启定时器记录时间DL_Timer_startCounter(TIMER_ultrasonic_INST ); // TIM_Cmd(TIM3,ENABLE); 使能定时器 i+=1; while(DL_GPIO_readPins(ultrasonic_Port_PORT,ultrasonic_Port_MCHO_Pin_PIN)==ultrasonic_Port_MCHO_Pin_PIN) //这里是知道信号结束,等待定时器计时 while(ECHO==1); {}DL_Timer_stopCounter(TIMER_ultrasonic_INST) ; //TIM_Cmd(TIM3,DISABLE); 失能定时器 tim=DL_Timer_getTimerCount(TIMER_ultrasonic_INST) ; //tim=TIM_GetCounter(TIM3); 得到时计单元个数length=(tim*50)/58.0; //微秒计算法求距离sum=length+sum;DL_Timer_setTimerCount(TIMER_ultrasonic_INST,0) ; //TIM3->CNT=0; 将计数值清零overcount=0; //一般来说没有超过一个定时器周期该值不需要调用,一直给0即可//delay_ms(10);}length=sum/3; //三次作为平均值return length;
}//测距定时器中断服务函数
void TIMER_ultrasonic_INST_IRQHandler (void)
{switch (DL_TimerA_getPendingInterrupt(TIMER_ultrasonic_INST)){case DL_TIMER_IIDX_ZERO:overcount++;break;default:break;}}
超声波.h文件
#ifndef __ultrasonic_H
#define __ultrasonic_H#include "ti_msp_dl_config.h"int Senor_Using() ;
void TIMER_ultrasonic_INST_IRQHandler (void);#endif
SYSCFG配置
引脚配置:
定时器配置部分: