标题:
STM32F4XX的HC-SR04超声波测距源码
[打印本页]
作者:
nandyku
时间:
2018-4-13 10:05
标题:
STM32F4XX的HC-SR04超声波测距源码
STM32F4系列的超超声波测距,型号HC-SR04,通过超声波模块可正常获取距离,再进行二次开发
0.jpg
(19.13 KB, 下载次数: 39)
下载附件
2018-4-13 15:38 上传
单片机源程序如下:
#include "stm32f4xx.h"
#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "delay.h"
#include "sys.h"
#include "beep.h"
#include "key.h"
#include "led.h"
#include "hc_sr04.h"
#include "init_usart.h"
#include "bsp_ili9341_lcd.h"
//#include "w25qxx.h"
//#include "sdio_sdcard.h"
//#include "lcd.h"
//#include "malloc.h"
//#include "spi.h"
char buf[400] = {0};//WiFi设置接收字符串
volatile uint32_t flag_buf = 0;//判断串口传数据是否传完
volatile uint32_t send_flag = 0;//WiFi设置命令标志位 (暂存)
char rx_buf[200] = {0};//WiFi设置命令字符串
uint32_t i = 0;//返回字符串计数
char edit_buf[20] = {0};//接受设置是时的字符数据
u32 FLASH_SIZE;
//串口3发送字符串:发给wifi
void wifi_set(char *pstr)
{
//判断当 前是否为NULL指针
//字符串是以'\0'(0值为结尾)
uint32_t i = 0;
while(pstr && *pstr)
{
rx_buf[i] = *pstr;
i++;
USART_SendData(USART3,*pstr++);
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);
}
send_flag = 1;
}
uint64_t wifi_all_set(uint64_t flag_buf)
{
if(flag_buf)
{
printf("run here1\r\n");
if(strstr(rx_buf,"AT+CWMODE=2") != NULL && strstr(buf,"OK") != NULL)
{
wifi_set("AT+RST\r\n");//重启是设置生效
delay_ms(666);
delay_ms(666);
delay_ms(666);
delay_ms(666);
//wifi_set("AT+CWSAP="TEST","123456123456",1,3");//设置wifi为多连接模式
wifi_set("AT+CIPMUX=1\r\n");//设置wifi为多连接模式
delay_ms(666);
delay_ms(666);
delay_ms(666);
wifi_set("AT+CIPSERVER=1,6666\r\n");//设置为服务器,端口号为6666
delay_ms(666);
delay_ms(666);
delay_ms(666);
wifi_set("AT+CIPSTO=6000\r\n");//设置超时时间
delay_ms(666);
delay_ms(666);
delay_ms(666);
}
}
else
return 1;
flag_buf = 0;
delay_ms(666);
delay_ms(666);
delay_ms(666);
return 0;
}
//int main(void)
//{
// NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中断优先级分组管理
//
// Systick_Init();//延时初始化时钟
// usart_init(115200);//串口1初始化
// USART3_Init(115200);//串口3初始化
// KEY_Init();
// key_init1();
// LED_Init();
// exit_init();
// Beep_init();
// printf("run here\r\n");
//
// wifi_set("AT+CWMODE=2\r\n");//设置wifi为模式3,sta与AP共存
// delay_ms(666);
// wifi_all_set(flag_buf);//进入中断函数后,当串口3接收完数据,flag_buf = 1
//
//
// //delay_ms(666);
// //delay_ms(666);
// //delay_ms(666);
// //delay_ms(666);
//
// while(1)
// {
// if(PEin(3) == 0)//KEY1
// {
// PAout(6) = 0;//LED2
// delay_ms(500);
// PAout(6) = 1;//LED2
//
// PBout(0) = 1;
// delay_ms(500);
//
// printf("=====\r\n");
// }
// delay_ms(500);
// printf("=====1111\r\n");
// }
// //return 0;
//}
void USART1_IRQHandler(void) //串口1中断服务程序
{
uint8_t d;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断
{
//接收数据
d = USART_ReceiveData(USART1); //读一个发一个
USART_SendData(USART3,d);
}
}
void USART3_IRQHandler(void) //串口3中断服务程序
{
uint8_t d;
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断
{
//接收数据
d = USART_ReceiveData(USART3);
buf[i++] = d;
if(buf[i-2] == 0x0D && buf[i-1] == 0x0A)//判断字符串是否接收完毕
{
i = 0;
flag_buf = 1;
}
if(i >= 300)//判断字符串是否是自己需要的
{
i = 0;
memset(buf,0,sizeof(buf));
}
//printf("%d = s\r\n",d);
//转发给PC显示
USART_SendData(USART1,d);
while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);
}
}
int main(void)
{
int n;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
Systick_Init();//延时延时函数
usart_init(115200);//串口1初始化
USART3_Init(115200);//串口3初始化
KEY_Init(); //初始化串口波特率为115200
key_init1(); //初始化LED
//LED_Init(); //LCD初始化
exit_init(); //按键初始化
init_sr04();
printf("1234r\n");
while(1)
{
printf("F====\r\n");
n = get_sr04_distance()/10;
//printf("HGFHGHGFHFHGGF====\r\n");
printf("distace = %d cm\r\n",n);
delay_s(1);
}
}
复制代码
所有资料51hei提供下载:
sr04.rar
(101.94 KB, 下载次数: 69)
2018-4-13 10:04 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
cheeselala
时间:
2018-4-25 15:56
下载链接失效了,可以再发一次吗 谢谢!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1