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
|