STM32控制超声波测距模块HC-SR04

STM32控制超声波测距模块HC-SR04

在学习STM32开发板的过程中,碰到一个常用的测距模块HC-SR04,本来想着很简单,结果使用时出现了种种问题,网上的代码乱七八糟基本上不好用,所以自己好好将这个东西梳理了一遍,现在将梳理结果和代买分享出来。

HC-SR04主要参数 :
5V的电压
小于2ms的工作电流
2-450cm的探测距离
有Vcc、 Trig(控制端)、 Echo(接收端)、 Gnd 四个接口,VCC和GND不用多说,一个接板子上5V的输出,一个接GND,Trig和Echo都接板子上的I/O口,这里我选择的是PA4与PA0.

基本工作原理:
1.给Trig一个至少10us的高电平信号
2.HC-SR04自动发送8个40khz的方波,自动检测是否有信号返回
3.信号返回则通过Echo输出一个高电平,高电平持续时间就是超声波从发送到返回被接收的时间
距离=(高电平时间*声速(340m/s))/2

简单来说就是通过给Trig一个10us的高电平,之后在Echo等待高电平输出,进行一次输入捕获,捕获高电平的输出时间,此输出时间即为测距时间,通过计算时间计算出距离。不断地重复上述操作,完成测距。

//初始化PA0,PA4 (PA4作为输出口,PA0作为输入口)
//HC_SR04初始化
void HCSR04_Init(u16 arr,u16 psc)
{
    RCC->APB1ENR|=1<<0;    //TIM2时钟使能
    RCC->APB2ENR|=1<<2;    //使能PORTA时钟
    GPIOA->CRL&=0XFFFFFFF0;//PA0 清除之前设置
    GPIOA->CRL|=0X00000008;//PA0输入
    GPIOA->ODR|=0<<0;      //PA0下拉
    GPIOA->CRL&=0XFFF0FFFF;//PA4清除之前设置
    GPIOA->CRL|=0X00030000;//PA4推挽输出
    GPIOA->ODR|=1<<5;      //PA4 输出高
    TIM2->ARR=arr;         //设定计数器自动重装值
    TIM2->PSC=psc;         //预分频器
    TIM2->CCMR1|=1<<0;     //CC1S=01 选择输入端IC1映射到TI1
    TIM2->CCMR1|=1<<4;     //IC1F=0001 配置滤波器 以Fck_int采样,两个事件后有效
    TIM2->CCMR1|=0<<2;    //IC1PS=00 
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值