原理:
1.给控制端Trig一个至少持续10us的高电平信号
2.模块内部自动发送8个40kHZ的脉冲,自动检测是否有信号返回。
3. 信号返回时,接收端Echo检测到高电平,高电平持续的时间即决定的检测距离 距离=(高电平脉冲时间*340)/2.(声的传播速度340m/s)
4.鉴于我已经在别的模块用过外部中断,所以使用定时器的输入捕获引脚,进行抓取,当识别到上升沿时定时器开始计时,识别到下降沿时计时结束。
程序编程:
1.Echo引脚需要是一个能实现定时器的引脚。并且设置模式为输入捕获
因为STM32F4中有上下拉推挽输出模式。 这里设置为下拉(GPIO_PuPd_DOWN),根据时序图高电平开始有效。
复用模式为定时器。注意:STM32F4的复用和F1的复用完全不同的配置
习惯了F1配置的我不得不重新学习F4的配置,光看数据手册,并不能很快理解。
F4中每个可复用的引脚可映射到相应的功能,比如PA0复用为TIM5_CH1,TIM5对应AF2。库函数将 AF2定义为GPIO_AF_TIM5;
GPIO_PinAFConfig(GPIOA,GPIO_PinSource0,GPIO_AF_TIM5);
F4复用 区别于F1一个IO引脚不只有一个复用功能。
2.Trig设置为下拉推挽输出。
typedef struct
{
uint32_t GPIO_Pin;
GPIOMode_TypeDef GPIO_Mode;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOOType_TypeDef GPIO_OType;
GPIOPuPd_TypeDef GPIO_PuPd;
}