Stm32旧版库函数16——stm32 超声波测距

news2024/12/24 0:25:35

/******************** (C) COPYRIGHT 2012 ELC ********************
* File Name          : main.c
* Author             : ELC@WHUT
* Version            : V1.0
* Date               : 2012-12-05
* Description        : 超声波测距的STM32代码,采用HC-HR04模块,该模块Trig信号默认高电平(高阻态),但是还需要给10uS以上的高电平触发
*                      有些HC-HR04模块需要高电平触发,将程序简单修改即可使用
*                      GPIOB_12作为触发管脚,GPIOA_12作为接收管脚
*                      每隔一秒串口1打印一次距离长度
***************************************************************************/
/**********************************************************
淘宝资料:
1、本模块性能稳定,测度距离精确。能和国外的SRF05,SRF02等超声波测距模块相媲美。
模块高精度,盲区(2cm)超近,稳定的测距是此产品成功走向市场的有力根据!
2 主要技术参数:
        1:使用电压:DC5V         2:静态电流:小于2mA
        3:电平输出:高5V           4:电平输出:底0V
        5:感应角度:不大于15度       6:探测距离:2cm-450cm      
        7:高精度:可达0.3cm  8.PCB板大小:4.5*2.0CM
接线方式,VCC、trig(控制端)、  echo(接收端)、 GND
本产品使用方法:一个控制口发一个10US以上的高电平,就可以在接收口等待高电平输出.
一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离.
如此不断的周期测,就可以达到你移动测量的值了~~
模块工作原理:
   (1)采用IO触发测距,给至少10us的高电平信号;
       (2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.
测试距离=(高电平时间*声速(340M/S))/2;  
***********************************************************/
/*所包含的头文件*/
#include "stm32f10x_lib.h"
#include "usart.h"
#include "delay.h"
#include "sys_config.h"
#include "EXTI.h"
#include  <math.h>    //Keil library  

#define   uchar unsigned char
#define   uint unsigned int    

unsigned char SFlag=0;
unsigned long Distance=0;

void Ultrasonic_GPIO_Conf(void)           
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);          //发射引脚初始化

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);          //接收引脚初始化

    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable , ENABLE);  // 改变指定管脚的映射 GPIO_Remap_SWJ_JTAGDisable ,JTAG-DP 禁用 + SW-DP 使能
}
void Timer_Configuration(void)
{
  TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
  NVIC_InitTypeDef NVIC_InitStructure;

  TIM_DeInit(TIM1);
  TIM_TimeBaseStructure.TIM_Period=2000;         //ARR的值, 一次计时20ms    最大值为3.4米
  TIM_TimeBaseStructure.TIM_Prescaler=719;         //719+1=720
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //采样分频
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
  TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);

  TIM1->DIER|=1<<0;   //允许更新中断                
  TIM1->DIER|=1<<6;   //允许触发中断       

  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
 
  NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;       
  NVIC_Init(&NVIC_InitStructure);
}
//定时器溢出中断服务程序    
void TIM1_UP_IRQHandler(void)
{                                       
    if(TIM1->SR&0X0001)//溢出中断
    {    
      Showstring("Out of distance! ");    
      GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)1);
        delay_us(20);//如果不加延时,系统不稳定
       GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0);//低电平触发
      TIM_SetCounter(TIM1,0);
      TIM_Cmd(TIM1, ENABLE);
      SFlag=0;     //取消当前上升沿标志                                                                
    }                   
    TIM1->SR&=~(1<<0);//清除中断标志位         
}
void Sys_Configuration(void)
{
    RCC_Configuration();
    NVIC_Configuration();
    delay_init(72);
    USART1_Configuration();
    Ultrasonic_GPIO_Conf();
    EXTI_Configuration();
    Timer_Configuration();
}
    unsigned long d=3400;
    unsigned char i=0;
void EXTI15_10_IRQHandler(void)         //当前是设置的电平变化就进入中断
{
   if(EXTI_GetITStatus(EXTI_Line12) != RESET)
   {
     if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==1)      //接收到上升沿,开始计时
     {
           TIM_SetCounter(TIM1,0);
        TIM_Cmd(TIM1, ENABLE);
        SFlag=1;         //表示经过了上升沿
     }
     else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_12)==0 && SFlag==1)
     {
       TIM_Cmd(TIM1, DISABLE);
       Distance=(int)(((float)TIM_GetCounter(TIM1))*1.7);    //如果测距是2.5m则需15ms
       if(d>Distance)       //只要最小值
         d=Distance;
       i++;
       if(i==3)                 //测量三次,只要最小值
       {
         i=0;
         Showstring("Distance:");
         Show_u16(d);
         Showstring("mm  ");
         delay_ms(300);
         d=3400;
        }
        GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)1);
          delay_us(20);//如果不加延时,系统不稳定
         GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0);//低电平触发
        //TIM_SetCounter(TIM1,0);
        //TIM_Cmd(TIM1, ENABLE);
        SFlag=0;
      }
      EXTI_ClearITPendingBit(EXTI_Line12);
   }
}
void init_Ultrasonic(void)
{
     //delay_ms(100); //为超声波稳定争取时间
    GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0);//先设置成低电平
    delay_ms(100);//
    GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)1); //高电平触发
    delay_us(20);//高电平至少10us
    GPIO_WriteBit(GPIOB, GPIO_Pin_12, (BitAction)0);//降回低电平
    TIM_SetCounter(TIM1,0);
    TIM_Cmd(TIM1, ENABLE);
}

int main(void)
{
    /*系统初始化*/
    Sys_Configuration();
    init_Ultrasonic();

    while(1)
    {
      ;        
    }    
}

 
/******** (C) COPYRIGHT 2012 ELC **********END OF FILE**********/

 

#include <stm32f10x_lib.h>
#include "EXTI.h"

void EXTI_Configuration(void)
{
  EXTI_InitTypeDef   EXTI_InitStructure;
  NVIC_InitTypeDef   NVIC_InitStructure;

  /* Enable GPIOB clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
/* Enable AFIO clock */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
  /* Configure PB.09 pin as input floating */
    
  /* Connect EXTI9 Line to PB.09 pin */
  GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource12);
  /* Configure EXTI9 line */
  EXTI_InitStructure.EXTI_Line = EXTI_Line12;
  EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  EXTI_InitStructure.EXTI_Trigger =EXTI_Trigger_Rising_Falling ;//EXTI_Trigger_Falling  EXTI_Trigger_Rising_Falling
  EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  EXTI_Init(&EXTI_InitStructure);
 
  /* Enable and set EXTI9_5 Interrupt to the lowest priority */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQChannel;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//最高优先级
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

  NVIC_Init(&NVIC_InitStructure);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95693.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git全栈体系(一)

第一章 Git 概述 Git 是一个免费的、开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小型到大型的各种项目。Git 易于学习&#xff0c;占地面积小&#xff0c;性能极快。 它具有廉价的本地库&#xff0c;方便的暂存区域和多个工作流分支等特性。其性能优于 Subvers…

ArcGIS创建地理处理包!让你制作的工具自由分享

喜欢就关注我们吧&#xff01; 0 前言 当用模型做好工具 分享到其他电脑 出现的模型不可用的情况 就如我们上期制作分享 的提取四至点的工具 有这个红叉的情况 因为他用到了子模型 所以发生路径不一致的情况 只要编辑配置就好了 那如何从根本上解决这个问题呢 答案是…

大数据Kudu(八):Kudu与Impala整合

文章目录 Kudu与Impala整合 一、​​​​​​​Kudu与Impala整合配置

乌班图(ubantu)部署.NET Core 6web项目(保姆教程)

1、新建文件夹&#xff0c;给读写权限 $ cd / #移动根目录&#xff08;方便好找&#xff09; 文件夹授权方式1&#xff1a;命令 $ sudo mkdir www #新建文件夹 $ cd /www $ sudo chmod 777 * -R #给读写权限 2、上传打包的项目文件&#xff0c;并解压 安装解压工具 $ sudo …

线性代数之N维向量

向量空间是线性代数的重要研究对象&#xff0c;具有广泛的应用。 1 n维向量运算 向量既有大小又有方向&#xff0c;如下表示&#xff1a; m*n个数aij(i1,2,...,m;j1,2,...,n)排成m行n列的矩形数表 若向量大小相当&#xff0c;方向相同则着两个向量相等 n个数a1,a2,...,an组成的…

SQL执行顺序

目录 1.执行顺序 2.SELECT查询时的两个顺序 3.关联过程 1.执行顺序 我们先执行from,join来确定表之间的连接关系&#xff0c;得到初步的数据 where对数据进行普通的初步的筛选 group by 分组 各组分别执行having中的普通筛选或者聚合函数筛选。 然后把再根据我们要的数据进…

00后女记者的一场直播挑战,触动了多少城市年轻打工人的心

一、00后的女记者&#xff0c;在浙江的一个小镇做了一场直播挑战&#xff0c;几天的体验并不轻松&#xff0c;却打开了一个新世界。又或者说&#xff0c;她发现了生活的另一面&#xff0c;人生的另一种可能。这个名叫濮院的小镇&#xff0c;位于浙江北部&#xff0c;桐乡辖下&a…

测试员求职路漫漫其修远兮,HR眼中的你,为什么无人问津

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 公号同名&#xff0c;欢迎加入我的测试交流群&#xff0c;我们一起交流学习&#xff01; 许多…

GrapeCity Documents .NET Bundle 6.0.0 Crack

GrapeCity 文档 .NET 包 6.0.0 添加新的图像查看器和数据查看器以及将 HTML 呈现为 PDF 的能力。2022 年 12 月 16 日 - 15:27 新版本特征 GrapeCity Word文档 您现在可以添加反射、发光、模糊、柔化边缘和填充叠加效果。报告模板 SVG 图像现在可以用作图像模板中的数据。有条件…

SOFA Weekly|Tongsuo 8.3.2 版本发布、C 位大咖说、本周 Contributor QA

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…

[附源码]Python计算机毕业设计Django宁财二手物品交易网站

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

换种方式看后端参数接收、建议躺着看!!!

持续创作&#xff0c;加速成长&#xff01;这是我参与「掘金日新计划 10 月更文挑战」的第1天&#xff0c;点击查看活动详情 常用的接收参数注解RequestParam PathVariable RequestBody 先看个例子RestController public class testController { RequestMapping(value "…

C++ Reference: Standard C++ Library reference: Containers: map: map: operator=

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/operator/ 公有成员函数 <map> std::map::operator C98 copy (1) map& operator (const map& x); C11 copy (1) map& operator (const map& x); move (2) map& oper…

Linux学习04-文件权限与目录配置

1 用户和用户组的概念 Linux中的用户划分很有意义。分为用户、用户组与非本用户组。模式类似于学校的机房。 2 文件权限 使用ls -al查看文件权限&#xff1a; [rootstudy ~]# ls -al -rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg [ 1…

vue3表单输入绑定 v-model

vue3表单输入绑定 v-model 一、基本使用 1.1、v-model 使用 <template><input type"text" v-model"msg"/><h2>{{msg}}</h2> </template><script setup> import { ref} from vue const msgref("Hello World&quo…

Vue中路由守卫的具体应用

目录 &#x1f53d; 概述 1. 全局守卫——全局钩子函数 1.1 全局前置守卫——beforeEach 1.2 全局后置路由守卫 1.3 整合 2. 路由独享的守卫——路由独享的钩子函数 3.组件内的守卫——组件内的钩子函数 &#x1f53d; 参考资料 Vue-Router导航&#xff08;路由&#x…

卫龙上市酿成资本惨剧:CPE损失上亿美元 高瓴浮亏5000万美元

雷帝网 雷建平 12月16日本是年度最受期待的新消费企业上市&#xff0c;却酿成资本惨剧。“辣条一哥”卫龙&#xff08;股票代码为&#xff1a;“09985”&#xff09;昨日在港交所上市&#xff0c;发行价为10.56港元&#xff0c;募资净额为8.99亿港元&#xff1b;卫龙食品首日开…

大数据中的数据安全

数据安全体系全貌 在数据仓库平台中&#xff0c;对应数据的请求必须严格尊属数据安全体系 数据使用安全 数据安全 认证 授权 认证主要是对用户的身份确认&#xff0c;比如最简单的用户的登录需要账户和密码&#xff1b;像你登录Mysql需要输出用户名和密码。比如大数据中使用…

爱科赛博冲刺科创板:拟募资3.8亿 陕西集成电路与达晨是股东

雷递网 雷建平 12月16日西安爱科赛博电气股份有限公司&#xff08;简称&#xff1a;“爱科赛博”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。爱科赛博计划募资3.8亿。其中&#xff0c;1.2亿用于西安爱科赛博电气股份有限公司精密特种电源产业化建设项目&#xf…

2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友

最近沸沸扬扬的就是核酸疫情的事情&#xff0c;突然之间&#xff0c;一下子全国都放开了&#xff0c;很不适应。 大宝在上幼儿园中班&#xff0c;上上个星期&#xff0c;学校的政策&#xff0c;还是没有核酸证明不得入校。 而上周末发的通知&#xff0c;已经是不得在外做核酸…