stm32之14.超声波测距代码

 

 

 

 --------------------

源码

void sr04_init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    //打开端口B的硬件时钟,就是供电
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC,ENABLE);
        //打开端口E的硬件时钟,就是供电
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
    
    
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6;    //6号引脚
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_IN;  //输入模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;//不使能上下拉电阻(因为外部已经有上拉电阻)
    GPIO_Init(GPIOE,&GPIO_InitStructure);    
    
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_7;    //6号引脚
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT;  //输出模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;//高速,速度越高,响应越快,但是功耗会更高
    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;//不使能上下拉电阻(因为外部已经有上拉电阻)
    GPIO_Init(GPIOC,&GPIO_InitStructure);
    //只要有输出模式,肯定会有初始化电平的状态,看连接设备说明书
    
    PCout(7)=0;
    
    
    
}

int32_t sr04_get_distance(void)
{
        uint32_t t=0;
        PCout(7)=1;
        delay_us(10);
        PCout(7)=0;    

        //等待回响信号,若等待成功,PE6引脚为高电平,则跳出该循环
        while(PEin(6)==0);
        
        //测量高电平的持续时间
        while(PEin(6))
        {
            t++;
            delay_us(9);        //有多少个9us ,就是有多少个3mm
            
        }        
        //因为超声波的传输时间是发射时间+返回时间,所以需要除以/2
        t=t/2;

        return 3*t;
}

int main(void)
{
    uint32_t distance;
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
        //抢占优先级0~3,支持4级!
    //响应优先级0~3,支持4级!
    key_init();
    Led_init();
    //初始化串口1波特率位115200bps,若发送/接收数据有乱码,请检查PLL
    
    usart1_init(115200);
    sr04_init();

    while(1)
    {
        distance = sr04_get_distance();
        
        if(distance >=20 && distance<=4000)
        {
            printf("distance = %d mm\r\n",distance);
        
        }
        
        //官方要求,时间间隔60ms以上,防止发射信号对反射信号的干扰
        delay_ms(1000);
    }
    
}


 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值