标题: STM32F103超声波测距源码 [打印本页]

作者: 彬Lsl    时间: 2018-7-1 10:05
标题: STM32F103超声波测距源码
超声波用32的定时器的捕获功能,捕获超声波回传的高电平时间,从而算出距离

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"

  7. /**********************************************
  8. * 文件名  : main.c
  9. * 描述    :超声波测距模块,UltrasonicWave_Configuration()函数
  10.              初始化超声模块,UltrasonicWave_StartMeasure()函数
  11.                          启动测距,并将测得的数据通过串口1打印出来         
  12. * 实验平台:战舰 STM32开发板  STM32F103ZET6
  13. * 硬件连接:------------------
  14. *          | PC1  - TRIG      |
  15. *          | PA0  - ECHO      |
  16. *           ------------------
  17. *
  18. * 作者    :MasterMiao
  19. *********************************************************************************/

  20. #define Trig PCout(1)                //PC1        TRIG

  21. //函数声明
  22. void UltrasonicWave_Configuration(void);
  23. void UltrasonicWave_StartMeasure(void);


  24. extern u8  TIM5CH1_CAPTURE_STA;                //输入捕获状态                                                   
  25. extern u16        TIM5CH1_CAPTURE_VAL;        //输入捕获值        

  26. int main(void)
  27. {               
  28.          u32 temp=0;
  29.         float UltrasonicWave_Distance=0;      //计算出的距离
  30.         delay_init();                     //延时函数初始化         
  31.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  32.         uart_init(115200);         //串口初始化为115200
  33.          LED_Init();                             //LED端口初始化

  34.         UltrasonicWave_Configuration();
  35.          TIM5_Cap_Init(0XFFFF,72-1);        //以1Mhz的频率计数
  36.          
  37.            while(1)
  38.         {
  39.                 UltrasonicWave_StartMeasure();//开始测距
  40.                                  
  41.                  if(TIM5CH1_CAPTURE_STA&0X80)//成功捕获到了一次上升沿
  42.                 {
  43.                         temp=TIM5CH1_CAPTURE_STA&0X3F;
  44.                         temp*=65536;//溢出时间总和
  45.                         temp+=TIM5CH1_CAPTURE_VAL;//得到总的高电平时间
  46.                         
  47.                         UltrasonicWave_Distance=(float)temp*170/10000;//距离计算公式:距离=高电平持续时间*声速/2   
  48.                                                                                                                   //即 距离= 高电平持续时间*340*100/(2*1000 000) = 高电平持续时间*170/10000
  49.                         
  50.                         printf("Distance:%f cm\r\n",UltrasonicWave_Distance);//打印总的高点平时间
  51.                         TIM5CH1_CAPTURE_STA=0;//开启下一次捕获
  52.                 }
  53.         }
  54. }


  55. /*
  56. * 函数名:UltrasonicWave_Configuration
  57. * 描述  :超声波模块的初始化
  58. * 输入  :无
  59. * 输出  :无        
  60. */
  61. void UltrasonicWave_Configuration(void)
  62. {
  63.         GPIO_InitTypeDef GPIO_InitStructure;
  64.         
  65.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  66.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                         //PC8接TRIG
  67.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                     //设为推挽输出模式
  68.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 
  69.         GPIO_Init(GPIOC, &GPIO_InitStructure);                         //初始化外设GPIO

  70. }

  71. /*
  72. * 函数名:UltrasonicWave_StartMeasure
  73. * 描述  :开始测距,发送一个>10us的脉冲,然后测量返回的高电平时间
  74. * 输入  :无
  75. * 输出  :无        
  76. */
  77. void UltrasonicWave_StartMeasure(void)
  78. {
  79.         Trig = 1;
  80.         delay_us(20);                                      //延时20US
  81.         Trig = 0;
  82.         
  83. }
复制代码

所有资料51hei提供下载:
STM32超声波.rar (288.11 KB, 下载次数: 1291)



作者: alai318    时间: 2018-7-2 15:21
正好在學習這個
作者: 呢喃高飞    时间: 2018-7-3 09:38
xiangyao
作者: 彬Lsl    时间: 2018-7-4 09:47
alai318 发表于 2018-7-2 15:21
正好在學習這個

哈哈可以参考参考我这个人,代码易懂
作者: dddggg412    时间: 2018-7-4 11:07
感谢分享 下载了
作者: timyer    时间: 2018-7-7 09:43
感谢楼主,
作者: 唯有努力生存    时间: 2018-7-7 16:05
谢谢分享 收下了
作者: 五个小白    时间: 2018-12-27 09:11
谢谢分享
作者: yxlei82    时间: 2018-12-28 10:32
看的欲犹未尽
作者: Arher    时间: 2018-12-28 11:32
学习一下, 谢谢分享
作者: qxb408725719    时间: 2019-1-8 21:34
就定义了一个trig能行?
作者: xcnyw    时间: 2019-1-9 15:51
谢谢,学习学习
作者: moon1    时间: 2019-1-10 17:03
感谢分享
作者: 大爱单片机    时间: 2019-1-20 15:12
输入捕获初始化时跟正点原子代码一样对吧,怎么我返回的一直是0啊,好像没有检测到返回的高电平
作者: 大爱单片机    时间: 2019-1-20 15:13
输入捕获那个代码是跟正点原子的例程一样对吧,怎么我返回的一直是0啊,好像没有检测到返回的高电平,
作者: buer1209    时间: 2019-1-20 15:23
赞一个  学习
作者: zhengkaipang112    时间: 2019-2-22 16:28
正在学习这个,喜欢
作者: hujj    时间: 2019-2-22 20:14
好资料,正好可以学习、借鉴和参考。
作者: 随风飘零翼    时间: 2019-3-18 10:09
谢谢分享
作者: 家住海边喜欢蒗    时间: 2019-3-22 18:12
谢谢分享
作者: xxldhxx    时间: 2019-3-24 06:47
同样初学者,也在学习中。一同进步
作者: 白歌    时间: 2019-4-4 08:03
感谢分享
作者: MzzLjl    时间: 2019-4-4 08:33
谢谢分享
作者: j979603847    时间: 2019-4-17 20:47
很好 感谢分享
作者: STSF    时间: 2019-4-29 15:47
顶一个,你这个代码比其他的好多了
作者: Mary521    时间: 2019-5-16 13:31
这个是F103的吗?
作者: 995879859    时间: 2019-6-6 09:28
下载看看,谢谢楼主
作者: witp    时间: 2019-6-8 19:40

下载看看,谢谢楼主
作者: winkle    时间: 2019-6-25 20:45
希望对自己能有所帮助
作者: wjbxf    时间: 2019-6-27 19:13
谢谢分享
作者: 菠萝僧接地气    时间: 2019-6-30 19:59
我试过了好几个代码就你的能测,终于决解了
作者: he1010421740    时间: 2019-7-1 16:53
有用看看
作者: snf    时间: 2019-7-12 10:54
谢谢分享
作者: snf    时间: 2019-7-14 16:49
谢谢分享

作者: mayorma    时间: 2019-7-20 09:06

谢谢分享
作者: bigbody1026    时间: 2019-7-20 12:52
希望对自己能有所帮助
作者: liyon    时间: 2019-7-20 13:31
谢谢分享
作者: liyon    时间: 2019-7-20 13:32
谢谢分享
作者: H-WEER    时间: 2019-7-20 17:01
正好在看这方面的
作者: 企鹅黑    时间: 2019-7-23 09:47
谢谢,学习学习
作者: xhh呵    时间: 2019-7-23 18:46
刚学51超声波测距
作者: 猪先生    时间: 2019-7-26 10:24
菠萝僧接地气 发表于 2019-6-30 19:59
我试过了好几个代码就你的能测,终于决解了

能测吗,怎么也改不出来。大神,能把你的程序发我么,江湖救急啊
作者: 1600369950    时间: 2019-7-27 15:37

谢谢,学习学习
作者: aaaaaa。    时间: 2019-7-27 21:41
谢谢分享
作者: asjiif    时间: 2019-8-4 14:21
感谢分享
作者: 迁就    时间: 2019-8-4 16:19
谢谢分享
作者: QAQQAQ    时间: 2019-8-5 10:37
楼主给力
作者: Lucas1998    时间: 2019-8-5 13:07
怎么按照这个接没有输出啊
作者: redeyeroc    时间: 2019-8-5 14:20
感谢楼主分享~~~~~~~~~~~~
作者: 伊特    时间: 2019-8-6 09:12
有没有实物连接图呐
作者: 农夫河流    时间: 2019-8-7 10:35
学习学习加油
作者: jukuca    时间: 2019-8-7 13:37
用来看看
作者: dh981226    时间: 2019-8-9 16:44
打印的为啥一直是10厘米左右
作者: zjh158    时间: 2019-8-12 17:25
学习学习,谢谢。。
作者: 堂堂    时间: 2019-8-28 17:46
下载一个压缩包就行了,另外三个没必要,浪费黑币,网上搜一下就出来了
作者: 1015056212    时间: 2019-10-11 18:52
hex 打开文件失败。。。。。
作者: 1015056212    时间: 2019-10-11 19:01
堂堂 发表于 2019-8-28 17:46
下载一个压缩包就行了,另外三个没必要,浪费黑币,网上搜一下就出来了

大佬怎么连线知道吗
作者: 稚冰    时间: 2019-12-2 12:01
这个怎么改变串口的传输速度呢?还是我的超声波模块坏了,我这边好久才测量一次

作者: jelly_han    时间: 2019-12-2 15:21
谢谢分享,非常有用
作者: jelly_han    时间: 2019-12-2 15:22
新人刚来,非常好,谢谢分享
作者: WFX777888    时间: 2019-12-2 16:27

感谢分享 下载了
作者: 谢放    时间: 2019-12-2 22:33
dh981226 发表于 2019-8-9 16:44
打印的为啥一直是10厘米左右

我都是8到10左右?
作者: Davidzz    时间: 2019-12-14 13:56
正在学习,多谢楼主分享
作者: lijia115003    时间: 2019-12-14 14:21
正好在學習這個
作者: lkjd3k    时间: 2019-12-15 19:25
用到无人机上是个不错的功能

作者: 从心。    时间: 2019-12-22 22:22
学习一下
作者: 2384429904    时间: 2019-12-24 14:00
我也在学超声测距的,感谢楼主分享
作者: cdhwwwwww    时间: 2019-12-24 15:38
感谢分享
作者: shu_007    时间: 2019-12-24 18:48
如果想提高精度,应该加上温度补偿!
作者: 包子2333    时间: 2020-1-3 09:56
楼主,您好,我运行您的程序会报错和警告,while循环里的变量都没有预期表达式
作者: 294411253    时间: 2020-3-12 16:00
感谢分享

作者: quicklee    时间: 2020-3-19 00:29
正在学习超声波,移植有很大问题。希望这个有帮助
作者: danzouyigeliu    时间: 2020-3-23 20:26
正在学习
作者: vvcc    时间: 2020-12-10 09:05
挺好的,易懂




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1