找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2055|回复: 0
收起左侧

基于STM32的超声波测距程序以及原理分析

[复制链接]
ID:588966 发表于 2021-10-24 21:06 | 显示全部楼层 |阅读模式
超声波模块以及相关引脚初始化函数void HC_Init(void)
超声波触发函数
void HC_pros(void)
中断服务程序
//外部中断读引脚电平变化,判断是否发生中断
void EXTI9_5_IRQHandler(void)
{
         delay_us(10);                            //RESET=0;         
         if(EXTI_GetITStatus(EXTI_Line7) != RESET)//发出超声波,echo输出高电平
         {
                TIM_SetCounter(TIM2,0);//清空定时器2的值,设置定时器2的值
                TIM_Cmd(TIM2, ENABLE);                          //如果没有接收信号,echo一直为1                    
                while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_7)); //接收到信号时,echo由1变为0                        
                TIM_Cmd(TIM2, DISABLE);
                //关键在于计数周期值,与预分频系数
                dis = TIM_GetCounter(TIM2)*5*34/100.0;//TIM_GetCounter获得定时器2的计数值,//传感器数值
//                if(dis > 0)
//                {
//                        delay_ms(200);
//                        printf("distance:%f cm", dis);
//                }                 
                EXTI_ClearITPendingBit(EXTI_Line7);
         }
}

附:定时器重装载值以及预分频系数

TIM_TimeBaseStructure.TIM_Period =4999; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值         计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =7199; //设置用来作为TIMx时钟频率除数的预分频值  10Khz(=72M/7199+1)的计数频率 计一个数需要                                                                                  0.00001S=1/10k,其中APB1为36M,在预分频系数不为1时,定时器的时钟由APB1倍频而来,即72M

最重要的测距公式解释:
(定时器2的计数值*计一个数所需时间*声速)/2,声速340m/s,发出声波即开始计数

声波触发应该大家都知道,网上也有相关介绍,这里不再赘述。

51hei.png

全部代码51hei下载地址:
超声波实验.7z (193.73 KB, 下载次数: 44)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表