HC-SR04超声波测距驱动

/***********************************************************************************************************************
------------------------------------------------------------------------------------------------------------------------
||	使用须知:这是一个普适的驱动文件,您可以定义多个驱动句柄作为参数传递给功能函数,完成距离信息的采集.	
||
||	编码风格:所有接口均以函数指针进行传递,数据类型不作重定义,大多采用8bit数据类型进行数据传输,逻辑变量均以类型开头命
||			名,一般符合驼峰命名.(eg:unsigned char ucValue;signed int siValue;float fValue;struct sValue;enum eValue;)
||
||	文件说明:本驱动文件基于STM32F103系列实现,内部使用MCU的一个通用定时器资源,用户可以根据ultrasonic_ranging.h中的宏
||			进行修改,默认使用了TIM2作为时间依据。本驱动文件为用户提供了3个接口以供使用:初始化句柄,获取距离,释放资源。
||
||	使用说明:UltrasonicRanging sUltrasonicRanging;//声明接口
||			  UltrasonicRangingState eState = UltrasonicRangingInitialization(&sUltrasonicRanging,GPIOB,GPIO_Pin_7,GPIOB,GPIO_Pin_6);//初始化接口
||			  if(eState == URS_ERROR){错误处理}//初始化结果判断
||			  float fDistance =  UltrasonicRangingGetDistance(&sUltrasonicRanging);//获取距离信息
||			  UltrasonicRangingClose(&sUltrasonicRanging);//关闭资源		  
||           
||	作者:蒋才有
||            
||	版本:V1.0
||
||	开发时间:2021.10.26 - xxxx.xx.xx
||
||	注意事项:本超声波测距基于HC-SR04实现,STM32F1系列测试有效,如需移植其他平台或使用请自行完成并注明出处!
||			  Tips:When you encounter an exception, you can define "ULTRASONIC_RANGING_DEBUG" to help you find the error.
||	
||	联系方式:1932857334@qq.com  By   Email
________________________________________________________________________________________________________________________
************************************************************************************************************************/
#ifndef __ULTRASONIC_RANGING_H__
#define __ULTRASONIC_RANGING_H__

#include "stm32f10x.h"

/* 调试配置宏,正常使用请注释该宏,在调试模式下将输出更多日志信息,影响系统运行效率 */
//#define ULTRASONIC_RANGING_DEBUG

#include "stm32f10x.h"

/* 定时器硬件资源宏 */
#define ULTRASONIC_RANGING_TIM TIM2
#define ULTRASONIC_RANGING_TIM_RCC RCC_APB1Periph_TIM2
#define ULTRASONIC_RANGING_TIM_RCC_CMD RCC_APB1PeriphClockCmd

/* 超声波测距状态 */
typedef enum {
	URS_ERROR 	= 0,	//错误
	URS_SUCCEED = 1,	//成功
}UltrasonicRangingState;

/* 超声波结构体 */
typedef struct{
	unsigned char ucState;
	GPIO_TypeDef* sTrigGpio;
	GPIO_TypeDef* sEchoGpio;
	unsigned short usTrigPin;
	unsigned short usEchoPin;
}UltrasonicRanging;

/* 对外接口 */
void UltrasonicRangingClose(UltrasonicRanging *sUltrasonicRanging);
float UltrasonicRangingGetDistance(UltrasonicRanging *sUltrasonicRanging);
UltrasonicRangingState UltrasonicRangingInitialization(UltrasonicRanging *sUltrasonicRanging,
	GPIO_TypeDef* sTrigGpio,unsigned short usTrigPin,GPIO_TypeDef* sEchoGpio,unsigned short usEchoPin);

/* 测试接口 */
#ifdef ULTRASONIC_RANGING_DEBUG
	void* UltrasonicRangingTestApi(unsigned int event,void *obj);
#endif /* ULTRASONIC_RANGING */

#endif /* __ULTRASONIC_RANGING_H__ */

相对于激光测距效果

在这里插入图片描述
整体来说数据可以稳定在mm级,这样的一个精度是非常棒的了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值