怎么做一个网站,wamp跟wordpress,做兼职网站的主要参考文献,微网站可以做成域名访问1、超声波测距模块介绍 1、HC-SR04共四个引脚#xff1a;VCC、GND、Trig、Echo#xff0c;如下图 2、使用 1、通过gpio口向Trig引脚发送一个脉冲信号。 2、HC-SR04接收到脉冲信号后#xff0c;就会向外发送一段超声波#xff0c;模块会将echo拉高。 …1、超声波测距模块介绍 1、HC-SR04共四个引脚VCC、GND、Trig、Echo如下图 2、使用 1、通过gpio口向Trig引脚发送一个脉冲信号。 2、HC-SR04接收到脉冲信号后就会向外发送一段超声波模块会将echo拉高。 3、当模块接收到反射回来的超声波后模块会将echo拉低。那么echo引脚高电平持续的时间也就是超声波在往返途中消耗的时间。 知道超声波往返的时间我们就可以算出距离。 给trig发送一个脉冲很简单。但是如何高效、精确的获取echo高电平持续的时间答案是使用定时器输入捕获功能。
2、输入捕获
2.1、什么是输入捕获 1、当定时器输入通道上检测到上升沿或者下降沿时立刻将此时刻计数器的数值记录到捕获寄存器中以待程序稍后读取。
2.2、输入捕获的详细机制 1、每个输入通道都有它自己的捕获寄存器。 如上图TI1FP1通过一个预分频器后接入捕获寄存器1上TI2FP2通过一个预分频器后接入捕获寄存器2上。 3、一个输入捕获通道只能设置为上升沿或者下降沿不能设置为双边沿。 4、假设我们启用了输入通道1的输入捕获模式并且设置为上升沿捕获。定时器启动计数后若输入到输入通道的TI1的信号出现了一个上升沿边沿检测器就会立即检测到随后触发信号就会通过TI1FP1传递到捕获寄存器1捕获寄存器1编立刻将此时计数器的值复制到自身。这种叫做直接捕获。 5、如果我们还为此输入捕获开启了中断还会触发中断HAL_TIM_IC_CaptureCallback。这样我们在中断中读取捕获寄存器的值就得到了上升沿出现时定时器的时刻。 6、只要再获得到下降沿出现的时刻就能够知道高电平持续的时间了这里我们就要使用间接捕获了借助TI2的输入捕获寄存器2来保存下降沿时定时器计数器的值即可。 7、TI1和TI2可以相互借用TI3和TI4可以相互借用。
3、使用 超声波模块echo引脚接在单片机PA10上Trig引脚接在PA11上。
3.1、配置 1、设置TIM1的CH3为直接输入捕获CH4为间接输入捕获 2、设置定时器预分频值为72定时器的时钟频率为1MHz方便计算CH3为上升沿捕获CH4为下降沿捕获 3、开启捕获终中断
3.2、代码
int upEdge 0;
int downEdge 0;
float distance 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if((htim htim1)(htim-ChannelHAL_TIM_ACTIVE_CHANNEL_4)){upEdge HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_3);downEdge HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_4);distance (downEdge - upEdge) * 0.034 / 2;//340m/s 0.034cm/us}
}
while (1)
{//启动测距HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, 1);HAL_Delay(1);HAL_GPIO_WritePin(Trig_GPIO_Port, Trig_Pin, 0);__HAL_TIM_SET_COUNTER(htim1, 0);//等待测距完成HAL_Delay(20);sprintf(message,juli:%.2fcm,distance);OLED_PrintString(0, 0, message);HAL_Delay(500);
}3.3、效果 4、总结 使用STM32 TIM1 CH3 输入捕获中断设置为上升沿捕获来获取超声波模块echo变为高电平时刻STM32 TIM1 CH4 输入捕获中断设置为下降捕获来获取超声波模块echo变为低电平时刻。计算高电平持续的时间进而算出距离。