找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3706|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

STM32F4XX的HC-SR04超聲波測距源碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:198849 發(fā)表于 2018-4-13 10:05 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
STM32F4系列的超超聲波測距,型號HC-SR04,通過超聲波模塊可正常獲取距離,再進(jìn)行二次開發(fā)

單片機(jī)源程序如下:
  1. #include "stm32f4xx.h"
  2. #include "string.h"
  3. #include "stdio.h"
  4. #include "stdlib.h"
  5. #include "delay.h"
  6. #include "sys.h"
  7. #include "beep.h"
  8. #include "key.h"
  9. #include "led.h"
  10. #include "hc_sr04.h"
  11. #include "init_usart.h"
  12. #include "bsp_ili9341_lcd.h"

  13. //#include "w25qxx.h"
  14. //#include "sdio_sdcard.h"
  15. //#include "lcd.h"
  16. //#include "malloc.h"
  17. //#include "spi.h"


  18. char buf[400] = {0};//WiFi設(shè)置接收字符串
  19. volatile uint32_t flag_buf = 0;//判斷串口傳數(shù)據(jù)是否傳完
  20. volatile uint32_t send_flag = 0;//WiFi設(shè)置命令標(biāo)志位 (暫存)
  21. char rx_buf[200] = {0};//WiFi設(shè)置命令字符串
  22. uint32_t i = 0;//返回字符串計數(shù)
  23. char edit_buf[20] = {0};//接受設(shè)置是時的字符數(shù)據(jù)

  24. u32 FLASH_SIZE;

  25. //串口3發(fā)送字符串:發(fā)給wifi
  26. void wifi_set(char *pstr)
  27. {
  28.         //判斷當(dāng) 前是否為NULL指針
  29.         //字符串是以'\0'(0值為結(jié)尾)
  30.         uint32_t i = 0;
  31.        
  32.         while(pstr && *pstr)
  33.         {
  34.                 rx_buf[i] = *pstr;
  35.                 i++;
  36.                 USART_SendData(USART3,*pstr++);
  37.                 while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);  
  38.         }

  39.         send_flag = 1;
  40. }




  41. uint64_t wifi_all_set(uint64_t flag_buf)
  42. {
  43.         if(flag_buf)
  44.                 {       
  45.                         printf("run here1\r\n");
  46.                         if(strstr(rx_buf,"AT+CWMODE=2") != NULL && strstr(buf,"OK") != NULL)
  47.                         {
  48.                                 wifi_set("AT+RST\r\n");//重啟是設(shè)置生效       
  49.                                 delay_ms(666);
  50.                                 delay_ms(666);
  51.                                 delay_ms(666);
  52.                                 delay_ms(666);
  53.                                 //wifi_set("AT+CWSAP="TEST","123456123456",1,3");//設(shè)置wifi為多連接模式  
  54.                                
  55.                                 wifi_set("AT+CIPMUX=1\r\n");//設(shè)置wifi為多連接模式
  56.                                 delay_ms(666);
  57.                                 delay_ms(666);
  58.                                 delay_ms(666);
  59.                                 wifi_set("AT+CIPSERVER=1,6666\r\n");//設(shè)置為服務(wù)器,端口號為6666
  60.                                 delay_ms(666);
  61.                                 delay_ms(666);
  62.                                 delay_ms(666);
  63.                                 wifi_set("AT+CIPSTO=6000\r\n");//設(shè)置超時時間
  64.                                 delay_ms(666);
  65.                                 delay_ms(666);
  66.                                 delay_ms(666);
  67.                         }
  68.                 }
  69.                 else
  70.                         return 1;
  71.                
  72.                 flag_buf = 0;
  73.                 delay_ms(666);
  74.                 delay_ms(666);
  75.                 delay_ms(666);

  76.         return 0;
  77. }





  78. //int main(void)
  79. //{
  80. //        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 中斷優(yōu)先級分組管理
  81. //       
  82. //        Systick_Init();//延時初始化時鐘
  83. //        usart_init(115200);//串口1初始化
  84. //        USART3_Init(115200);//串口3初始化
  85. //        KEY_Init();
  86. //        key_init1();
  87. //        LED_Init();
  88. //        exit_init();
  89. //        Beep_init();
  90. //        printf("run here\r\n");
  91. //
  92. //        wifi_set("AT+CWMODE=2\r\n");//設(shè)置wifi為模式3,sta與AP共存
  93. //        delay_ms(666);
  94. //        wifi_all_set(flag_buf);//進(jìn)入中斷函數(shù)后,當(dāng)串口3接收完數(shù)據(jù),flag_buf = 1       
  95. //     
  96. //                       
  97. //        //delay_ms(666);
  98. //        //delay_ms(666);
  99. //        //delay_ms(666);
  100. //        //delay_ms(666);
  101. //       
  102. //                while(1)
  103. //                {
  104. //                        if(PEin(3) == 0)//KEY1
  105. //                        {
  106. //                                PAout(6) = 0;//LED2       
  107. //                                delay_ms(500);
  108. //                                PAout(6) = 1;//LED2       
  109. //                               
  110. //                                PBout(0) = 1;
  111. //                                delay_ms(500);
  112. //
  113. //                                printf("=====\r\n");
  114. //                        }       
  115. //                        delay_ms(500);
  116. //                        printf("=====1111\r\n");
  117. //                }
  118. //        //return 0;
  119. //}


  120. void USART1_IRQHandler(void)                                                //串口1中斷服務(wù)程序
  121. {
  122.         uint8_t d;
  123.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)          //接收中斷
  124.         {
  125.                 //接收數(shù)據(jù)
  126.                 d = USART_ReceiveData(USART1);        //讀一個發(fā)一個                                       
  127.                
  128.                 USART_SendData(USART3,d);
  129.         }

  130. }



  131. void USART3_IRQHandler(void)                                                //串口3中斷服務(wù)程序
  132. {
  133.         uint8_t d;
  134.        
  135.         if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)          //接收中斷
  136.         {
  137.                 //接收數(shù)據(jù)
  138.                 d = USART_ReceiveData(USART3);
  139.                
  140.                        
  141.                 buf[i++] = d;
  142.                 if(buf[i-2] == 0x0D && buf[i-1] == 0x0A)//判斷字符串是否接收完畢
  143.                 {
  144.                         i = 0;
  145.                         flag_buf = 1;
  146.                        
  147.                 }
  148.                 if(i >= 300)//判斷字符串是否是自己需要的
  149.                 {
  150.                         i = 0;
  151.                         memset(buf,0,sizeof(buf));
  152.                 }
  153.                 //printf("%d = s\r\n",d);
  154.                 //轉(zhuǎn)發(fā)給PC顯示
  155.                 USART_SendData(USART1,d);
  156.                
  157.                 while(USART_GetFlagStatus(USART3,USART_FLAG_TXE)==RESET);               
  158.         }        
  159. }

  160. int main(void)
  161. {        
  162.         int n;
  163.        
  164.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級分組2
  165.        
  166.         Systick_Init();//延時延時函數(shù)
  167.         usart_init(115200);//串口1初始化       
  168.         USART3_Init(115200);//串口3初始化       
  169.         KEY_Init();                //初始化串口波特率為115200
  170.         key_init1();                                        //初始化LED  
  171.         //LED_Init();                         //LCD初始化  
  172.         exit_init();                         //按鍵初始化  
  173.        
  174.         init_sr04();



  175.         printf("1234r\n");
  176.        
  177.         while(1)
  178.         {
  179.                 printf("F====\r\n");
  180.                 n = get_sr04_distance()/10;
  181.                 //printf("HGFHGHGFHFHGGF====\r\n");
  182.                 printf("distace = %d cm\r\n",n);
  183.                 delay_s(1);
  184.         }

  185. }
復(fù)制代碼

所有資料51hei提供下載:
sr04.rar (101.94 KB, 下載次數(shù): 69)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:315667 發(fā)表于 2018-4-25 15:56 | 只看該作者
下載鏈接失效了,可以再發(fā)一次嗎 謝謝!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表