#define TRIG_PORT GPIOA //TRIG #define ECHO_PORT GPIOA //ECHO #define TRIG_PIN GPIO_Pin_7 //TRIG #define ECHO_PIN GPIO_Pin_6 //ECHO unsigned short int UltrasonicWave_Distance; void DelayTime_us(int Time) { unsigned char i; for ( ; Time>0; Time--) for ( i = 0; i < 72; i++ ); } void UltrasonicWave_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = TRIG_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TRIG_PORT, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = ECHO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(ECHO_PORT,&GPIO_InitStructure); } void UltrasonicWave_CalculateTime(void) { UltrasonicWave_Distance=TIM_GetCounter(TIM2)*5*34/2000; } int UltrasonicWave_StartMeasure(void) { GPIO_SetBits(TRIG_PORT,TRIG_PIN); delay_us(15); GPIO_ResetBits(TRIG_PORT,TRIG_PIN); while(!GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); TIM_Cmd(TIM2, ENABLE); while(GPIO_ReadInputDataBit(ECHO_PORT,ECHO_PIN)); TIM_Cmd(TIM2, DISABLE); UltrasonicWave_CalculateTime(); TIM_SetCounter(TIM2,0); return (int)UltrasonicWave_Distance/256*100+UltrasonicWave_Distance%256; }详细解读各个函数作用
时间: 2023-06-27 08:06:23 浏览: 101
燃烧反应速率UDF_fluentudf_/数值算法/燃烧速率_
5星 · 资源好评率100%
这段代码是一个超声波测距的程序,具体解读如下:
首先是延时函数 `DelayTime_us(int Time)`,实现给定时间的延时,单位为微秒。
接着是硬件初始化函数 `UltrasonicWave_Configuration(void)`,对超声波测距所需的引脚进行初始化,包括 TRIG 引脚和 ECHO 引脚,其中 TRIG 引脚为输出模式,ECHO 引脚为输入模式。
然后是计算时间函数 `UltrasonicWave_CalculateTime(void)`,通过读取 TIM2 计数器的值并进行一定的计算,得到超声波从发射到接收经过的时间。
最后是开始测量函数 `UltrasonicWave_StartMeasure(void)`,该函数通过控制 TRIG 引脚产生一个短时脉冲,然后等待 ECHO 引脚变高电平,启动 TIM2 计数器开始计时,等待 ECHO 引脚变低电平,停止 TIM2 计数器计时,最后调用 `UltrasonicWave_CalculateTime()` 函数计算超声波行进时间,并将距离结果返回。其中返回值为测量结果的百分之一厘米(精度为 0.01 cm)。
阅读全文