标题:
基于STM32F4ZG的HC_SR04超声波测距例程
[打印本页]
作者:
hzl3128
时间:
2018-11-16 14:54
标题:
基于STM32F4ZG的HC_SR04超声波测距例程
基于STM32F4系列单片机的超声波测距历程,利用串口显示距离(默认115200波特率)
单片机源程序如下:
#include "stm32f4xx.h"
#include "Systick.h"
#include "sys.h"
#include "usart.h"
#include "hc_sr04.h"
//LED
//宏替换PFout(9)成LED0
#define LED0 PFout(9)
#define LED1 PFout(10)
#define LED2 PEout(13)
#define LED3 PEout(14)
//BEEP蜂鸣器
#define BEEP PFout(8)
//按键
#define KEY0 PAin(0)
#define KEY1 PEin(2)
#define KEY2 PEin(3)
#define KEY3 PEin(4)
void delay_s() //简单的延时函数
{
volatile int i = 0x0FE5178;
while(i--);
}
//初始化LED端口,
void LED_Config(void)
{
//定义一个LED的GPIO信息结构体
GPIO_InitTypeDef GPIO_InitStructure;
//1.使能(打开)RCC时钟(失能,关闭)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE | RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOE,GPIOF时钟
//2.设置GPIO的信息结构体
//GPIOF9,F10初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //LED0和LED1对应IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式,
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出,驱动LED需要电流驱动
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
//3.初始化GPIO信息结构体
GPIO_Init(GPIOF, &GPIO_InitStructure);
//如果不同组,需要另外设置和初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14; //LED0和LED1对应IO口
GPIO_Init(GPIOE, &GPIO_InitStructure);
//给LED一个初始化状态,高电平,全灭
// GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);
// GPIO_SetBits(GPIOE,GPIO_Pin_13 | GPIO_Pin_14);
LED0 = 1;
LED1 = 1;
LED2 = 1;
LED3 = 1;
}
//蜂鸣器的初始化
void BEEP_Config(void)
{
//定义一个蜂鸣器的GPIO信息结构体
GPIO_InitTypeDef GPIO_BEEP_InitStructure;
//1.使能(打开)RCC时钟(失能,关闭)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //使能GPIOF时钟
//2.设置GPIO的信息结构体
//GPIOF8初始化设置
GPIO_BEEP_InitStructure.GPIO_Pin = GPIO_Pin_8; //蜂鸣器PF8对应IO口
GPIO_BEEP_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //普通输出模式,
GPIO_BEEP_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出,驱动BEEP需要电流驱动
GPIO_BEEP_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
GPIO_BEEP_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; //下拉
//3.初始化GPIO信息结构体
GPIO_Init(GPIOF, &GPIO_BEEP_InitStructure);
//给蜂鸣器BEEP一个初始化状态,
//GPIO_SetBits(GPIOF,GPIO_Pin_8); //高电平
//GPIO_ResetBits(GPIOF,GPIO_Pin_8); //低电平
BEEP = 0;
}
//按键的初始化函数
void KEY_Config(void)
{
//定义一个按键的GPIO信息结构体
GPIO_InitTypeDef GPIO_KEY_InitStructure;
//1.使能(打开)RCC时钟(失能,关闭)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE, ENABLE); //使能GPIOA时钟
//2.设置GPIO的信息结构体
//GPIOA0初始化设置
GPIO_KEY_InitStructure.GPIO_Pin = GPIO_Pin_0; //按键KEY0对应IO口
GPIO_KEY_InitStructure.GPIO_Mode = GPIO_Mode_IN; //普通输入模式
GPIO_KEY_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出,需要电流驱动
GPIO_KEY_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //100MHz
GPIO_KEY_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
//3.初始化GPIO信息结构体
GPIO_Init(GPIOA, &GPIO_KEY_InitStructure);
//如果不同组,需要另外设置和初始化
GPIO_KEY_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4; //按键KEY1,2,3对应IO口
GPIO_Init(GPIOE, &GPIO_KEY_InitStructure);
}
//检测按下哪一个按键
int Key_Scan(void)
{
int key_num = -1;
//if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) == 0) //按下KEY0
if(KEY0 == 0) //按下KEY0
{
key_num = 0;
}
else if(KEY1 == 0) //按下KEY1
{
key_num = 1;
}
else if(KEY2 == 0) //按下KEY2
{
key_num = 2;
}
else if(KEY3 == 0) //按下KEY3
{
key_num = 3;
}
return key_num;
}
//main函数,程序的入口,从这里开始运行
int main(void)
{
/***************变量的定义***************/
//int i;
u16 distance = 0;
/***************外设函数初始化***************/
//函数的调用,LED初始化函数,PF9,PF10..PE13,PE14
LED_Config();
//蜂鸣器的GPIO初始化,P8
BEEP_Config();
//系统时钟初始化,168MHz的芯片主频
Systick_init(168);
//按键的GPIO初始化,PA0,PE2.3.4
KEY_Config();
//串口的初始化
uart_init(9600);
//超声波模块HC_SR04初始化,TRIG:PE6,ECHO:PB6
HC_SR04_Config();
/***************程序循环执行语句***************/
//程序所有外设都已经初始化完毕
LED0=0;
LED1=0;
LED2=0;
LED3=0;
delay_ms(500);
LED0=1;
LED1=1;
LED2=1;
LED3=1;
/**下面是通过直接操作库函数的方式实现IO控制**/
//死循环,程序会一直循环执行里面的语句
while(1)
{
distance = Get_Distance(); //读取超声波模块检测到的距离,单位为毫米mm
printf("distance = %d\r\n",distance); //串口显示
delay_ms(500);
LED0=!LED0;
}
}
复制代码
所有资料51hei提供下载:
实验1_超声波测距模块.rar
(456.77 KB, 下载次数: 154)
2018-11-16 16:59 上传
点击文件名下载附件
超声波
下载积分: 黑币 -5
作者:
暮筱峰下
时间:
2019-2-12 17:40
谢谢楼主分享!!
作者:
高大尚
时间:
2019-3-10 21:08
不得行啊
作者:
高大尚
时间:
2019-3-10 21:08
【串口打印的值是0】
作者:
hmjb888
时间:
2019-8-6 16:47
谢谢楼主分享
作者:
todaljy
时间:
2019-8-7 15:00
感谢分享,非常棒的学习资料!
作者:
todaljy
时间:
2019-8-7 15:01
感谢分享,非常棒的学习资料!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1