目录
【硬件说明】
STM32F103内核开发板,超声波模块HC-SR04
图1 HC-SR04超声波模块实物图
【理论说明】
过程中使用的超声波模块是HC-SR04模块。有四个引脚,分别是Echo、Trig、VCC、GND。Trig触发端:是为了触发超声波测距工作的引脚;Echo接收信号端:超声波返回到单片机一个高电平,而我们就是通过高电平持续的时间计算距离。
超声波原理:(1)采用 IO 触发测距,至少给 10us 的高电平信号;(2)模块自动发送 8 个 40khz 的方波,自动检测是否有信号返回;(3)有信号返回,通过 IO 输出一高电平,高电平持续的时间就是超声波从发射到返回的时间。
测试距离 = ( 高电平时间 * 声速(340 M/S ) ) / 2
图2 HC-SR04超声波时序图
【软件设计】
定时器初始化
本次使用TIM3、TIM5来负责超声波模块的数据采集。在程序进入while循环之前,需要对TIM3、TIM5进行初始化,由于两个定时器的配置都大同小异,所以只展示一个。
/**************************************************************************
函数功能:定时器5通道输入捕获初始化
入口参数:入口参数:arr:自动重装值 psc:时钟预分频数
返回 值:无
**************************************************************************/
void TIM5_Cap_Init(u16 arr, u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_ICInitTypeDef TIM_ICInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);
//使能TIM5时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC, ENABLE); //使能GPIO时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PA 输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //2M
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //2M
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;