先说模块的使用
引脚 VCC
Trig
Echo
GND
共四个引脚,
它实现原理就是给Trig引脚一个高电平持续10us之后拉低,这个时候他就会产生发射超声波,同时它的Echo引脚会输出高电平,直到它接到反射回来的超声波之后它就会置低,所以要想测距的话我们只需要写一个捕获程序,来捕获它的高电平持续的时间就可以间接的计算出距离。(具体的工作原理其他博主写得都很好可以参考他们的)
下面就是代码实现
用TIM3定时中断来控制它的工作频率,用TIM5捕获通道1(PA0)来捕获它的高电平持续时间
TIM3和TIM5的初始化配置
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 10Khz的计数频率
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_ITConfig( //使