找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3334|回复: 1
打印 上一主题 下一主题
收起左侧

STM32F4XX的HC-SR04超声波测距源码

[复制链接]
跳转到指定楼层
楼主
STM32F4系列的超超声波测距,型号HC-SR04,通过超声波模块可正常获取距离,再进行二次开发

单片机源程序如下:
  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设置接收字符串
  19. volatile uint32_t flag_buf = 0;//判断串口传数据是否传完
  20. volatile uint32_t send_flag = 0;//WiFi设置命令标志位 (暂存)
  21. char rx_buf[200] = {0};//WiFi设置命令字符串
  22. uint32_t i = 0;//返回字符串计数
  23. char edit_buf[20] = {0};//接受设置是时的字符数据

  24. u32 FLASH_SIZE;

  25. //串口3发送字符串:发给wifi
  26. void wifi_set(char *pstr)
  27. {
  28.         //判断当 前是否为NULL指针
  29.         //字符串是以'\0'(0值为结尾)
  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");//重启是设置生效       
  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");//设置wifi为多连接模式  
  54.                                
  55.                                 wifi_set("AT+CIPMUX=1\r\n");//设置wifi为多连接模式
  56.                                 delay_ms(666);
  57.                                 delay_ms(666);
  58.                                 delay_ms(666);
  59.                                 wifi_set("AT+CIPSERVER=1,6666\r\n");//设置为服务器,端口号为6666
  60.                                 delay_ms(666);
  61.                                 delay_ms(666);
  62.                                 delay_ms(666);
  63.                                 wifi_set("AT+CIPSTO=6000\r\n");//设置超时时间
  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); // 中断优先级分组管理
  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");//设置wifi为模式3,sta与AP共存
  93. //        delay_ms(666);
  94. //        wifi_all_set(flag_buf);//进入中断函数后,当串口3接收完数据,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中断服务程序
  121. {
  122.         uint8_t d;
  123.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)          //接收中断
  124.         {
  125.                 //接收数据
  126.                 d = USART_ReceiveData(USART1);        //读一个发一个                                       
  127.                
  128.                 USART_SendData(USART3,d);
  129.         }

  130. }



  131. void USART3_IRQHandler(void)                                                //串口3中断服务程序
  132. {
  133.         uint8_t d;
  134.        
  135.         if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)          //接收中断
  136.         {
  137.                 //接收数据
  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.                 //转发给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);//设置系统中断优先级分组2
  165.        
  166.         Systick_Init();//延时延时函数
  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. }
复制代码

所有资料51hei提供下载:
sr04.rar (101.94 KB, 下载次数: 69)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:315667 发表于 2018-4-25 15:56 | 只看该作者
下载链接失效了,可以再发一次吗 谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表