STM32F4系列的超超声波测距,型号HC-SR04,通过超声波模块可正常获取距离,再进行二次开发
单片机源程序如下:
- #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)
|