标题:
基于stm32f4的超声波测距代码
[打印本页]
作者:
sabo1655
时间:
2022-3-31 20:50
标题:
基于stm32f4的超声波测距代码
通过使用定时器的计数来实现HCSR04超声波模块测距的功能。
单片机源程序如下:
#include "timer.h"
#include "hc.h"
#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "stdio.h"
//PA9为模块trig引脚接口
//PA10为Echo引脚接口
int main(void)
{
static u8 time;//单程运行时间,单位s
static u8 length;//路程,单位m
uart_init(115200); //串口初始化波特率为115200
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
delay_init(168); //初始化延时函数
while(1)
{
TIM3_Int_Init(100-1,16800-1); //初始化TIM3定时器,计数周期为0.02s
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1);//echo为高电平时,则等待至低电平,才启动超声波
GPIO_SetBits(GPIOA,GPIO_Pin_9); //TRIG置高
delay_us(20);
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 0)//等待echo的高电平到来
TIM_SetCounter(TIM2,0); //清零计数器
TIM_Cmd(TIM3, ENABLE); //使能定时器3,开始计数
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10) == 1);//等待echo的高电平结束
TIM_Cmd(TIM3, DISABLE); //失能定时器3,截止计数
TIM_GetCounter(TIM2);//得到计数器的值
time=TIM_GetCounter(TIM2)/20000;//单程时间
length=time*344;//计算出长度
printf("\r\n当前距离为:\r\n");
}
}
复制代码
Keil代码下载:
代码.7z
(314.21 KB, 下载次数: 29)
2022-4-1 02:18 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1