当前位置: 首页 > news >正文

stm32f103 HAL库 HC-SR04测距

目录

  • 一、实现测距
  • 二、添加TIM3控制LED根据距离以不同频率闪烁
  • 三、观察时序
  • Modebus协议
  • 12路超声波雷达设计方案
      • 1. 系统架构设计
      • 2. 硬件设计
      • 3. 软件设计
      • 4. 通信协议设计
      • 5. 用户接口
      • 6. 安全和冗余
      • 7. 测试和验证
      • 8. 电源和物理封装
      • 9. 文档和支持

一、实现测距

配置时钟
在这里插入图片描述
配置定时器
在这里插入图片描述
在这里插入图片描述

GPIO口
在这里插入图片描述

配置串口
在这里插入图片描述
在这里插入图片描述

#include "SR04.h"uint32_t measure_Buf[3] = {0};   //存放定时器计数值的数组
uint8_t  measure_Cnt = 0;    //状态标志位
uint32_t high_time;   //超声波模块返回的高电平时间
float distant;      //测量距离//===============================================读取距离
void SR04_GetData(void)
{
switch (measure_Cnt){case 0:TRIG_H;delay_us(30);TRIG_L;measure_Cnt++;__HAL_TIM_SET_CAPTUREPOLARITY(&htim2, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);HAL_TIM_IC_Start_IT(&htim2, TIM_CHANNEL_1);	//启动输入捕获       或者: __HAL_TIM_ENABLE(&htim5);                                                                                    		break;case 3:high_time = measure_Buf[1]- measure_Buf[0];    //高电平时间printf("\r\n----高电平时间-%d-us----\r\n",high_time);							distant=(high_time*0.034)/2;  //单位cmprintf("\r\n-检测距离为-%.2f-cm-\r\n",distant);          measure_Cnt = 0;  //清空标志位TIM2->CNT=0;     //清空计时器计数break;}
}//===============================================us延时函数void delay_us(uint32_t us)//主频72M
{uint32_t delay = (HAL_RCC_GetHCLKFreq() / 4000000 * us);while (delay--){;}
}//===============================================中断回调函数
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)//
{if(TIM2 == htim->Instance)// 判断触发的中断的定时器为TIM2{switch(measure_Cnt){case 1:measure_Buf[0] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);//获取当前的捕获值.__HAL_TIM_SET_CAPTUREPOLARITY(&htim2,TIM_CHANNEL_1,TIM_ICPOLARITY_FALLING);  //设置为下降沿捕获measure_Cnt++;                                            break;              case 2:measure_Buf[1] = HAL_TIM_ReadCapturedValue(&htim2,TIM_CHANNEL_1);//获取当前的捕获值.HAL_TIM_IC_Stop_IT(&htim2,TIM_CHANNEL_1); //停止捕获   或者: __HAL_TIM_DISABLE(&htim5);measure_Cnt++;  }}}

二、添加TIM3控制LED根据距离以不同频率闪烁

这里我只设置了两个速度,小于10cm时0.2间隔闪烁,大于10cm时0.5s间隔闪烁

在这里插入图片描述
主要代码实现
头文件

#ifndef __SR04_H
#define __SR04_H
#include "main.h"
#include "tim.h"
#include "stdio.h"#define TRIG_H  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_SET)
#define TRIG_L  HAL_GPIO_WritePin(Trig_GPIO_Port,Trig_Pin,GPIO_PIN_RESET)extern float distant;      //测量距离void delay_us(uint32_t us);
void SR04_GetData(void);#endif
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3){// 切换LED状态HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13);}}int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();MX_USART1_UART_Init();MX_TIM3_Init();/* USER CODE BEGIN 2 */__HAL_TIM_CLEAR_IT(&htim3, TIM_IT_UPDATE);HAL_TIM_Base_Start_IT(&htim3);	/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){//printf("\r\n----高电平时间--us----\r\n");							SR04_GetData();if (distant < 10.0f) {// distant小于5,设置定时器周期为0.2秒__HAL_TIM_SET_AUTORELOAD(&htim3, 25000 - 1);//(uint32_t)(SystemCoreClock / 2) / 1000); // 假设系统时钟为SystemCoreClock} else {// distant大于等于5,设置定时器周期为0.5秒__HAL_TIM_SET_AUTORELOAD(&htim3, 50000-1);}// 重新启动定时器HAL_TIM_Base_Start_IT(&htim3);HAL_Delay(1500);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}

三、观察时序

在这里插入图片描述
在这里插入图片描述
延时30us左右和代码中匹配
在这里插入图片描述

Modebus协议

Modbus协议是一种串行通信协议,最初由Modicon公司(现在的施耐德电气Schneider Electric)在1979年发表,用于可编程逻辑控制器(PLC)之间的通信。它已经成为工业领域通信协议的业界标准,并且是工业电子设备之间常用的连接方式。Modbus协议的主要特点包括公开发表、无版权要求、易于部署和维护,以及对供应商来说,修改移动本地的比特或字节没有很多限制。

Modbus协议允许多个设备(大约240个)连接在同一个网络上进行通信,例如,一个测量温度和湿度的设备,并将结果发送给计算机。在数据采集与监视控制系统(SCADA)中,Modbus通常用来连接监控计算机和远程终端控制系统(RTU)。Modbus协议存在用于串口、以太网以及其他支持互联网协议的网络的版本。大多数Modbus设备通信通过串口EIA-485物理层进行。

Modbus协议有两种主要的串行通信变体:Modbus RTU和Modbus ASCII。Modbus RTU采用二进制表示数据,而Modbus ASCII则是人类可读的、冗长的表示方式。RTU格式的命令/数据带有循环冗余校验(CRC)的校验和,而ASCII格式采用纵向冗余校验的校验和。Modbus Plus是Modbus的一个扩展版本,但是它是Modicon专有的,和Modbus不同。

Modbus协议采用master/slave架构,其中一个节点是master节点,其他节点是slave节点,每个slave设备都有一个唯一的地址。在串行和Modbus Plus网络中,只有被指定为主节点的节点可以启动命令,在以太网上,任何一个设备都能发送Modbus命令,但通常也只有一个主节点设备启动指令。

Modbus命令包含了执行操作的设备的Modbus地址,所有设备都会收到命令,但只有指定地址的设备会执行及回应指令。Modbus命令还包括检查码,以确保命令在传输过程中没有被破坏。基本的ModBus命令可以指令一个RTU改变寄存器的值、控制或读取I/O端口,以及指挥设备回送其寄存器中的数据。

Modbus协议是应用层报文传输协议,定义了一个与物理层无关的协议数据单元(PDU),PDU由功能码和数据域组成,功能码为1字节,数据域长度不固定。Modbus RTU协议允许PLC和计算机之间通过串行线路交换信息,并在建筑管理系统(BMS)和工业自动化系统中得到广泛应用。Modbus TCP是设计用于通过TCP/IP堆栈传输Modbus帧的协议,通常通过以太网物理层传输。Modbus最初作为串行层传输数据的应用级协议,现在也可以通过TCP/IP和UDP实现。

12路超声波雷达设计方案

设计一款12路车载超声波雷达系统,使用STM32F103微控制器和HC-SR04超声波传感器模块,同时提供RS485和Modbus协议的接口,需要考虑以下几个关键方面:

1. 系统架构设计

  • 主控制器:选择STM32F103系列微控制器作为主控单元,因为它具有足够的GPIO、定时器和通信接口。
  • 传感器模块:每个HC-SR04模块负责一个方向的测距,共需要12个。

2. 硬件设计

  • GPIO配置:为每个HC-SR04配置一对GPIO用于TRIG和ECHO信号。
  • 定时器:使用STM32的定时器来精确测量HC-SR04的回波时间。
  • RS485通信:使用STM32的USART接口配置为RS485,以实现数据的串行通信。
  • Modbus协议栈:集成Modbus协议栈来处理Modbus RTU或TCP通信。
  • 电源管理:确保系统有稳定的电源供应,并考虑电源防反接和过压保护。
  • 物理布局:合理布局12个传感器,确保覆盖车辆周围所有必要的监测区域。

3. 软件设计

  • 驱动程序:编写HC-SR04超声波传感器的驱动程序,实现距离测量。
  • Modbus协议实现:实现Modbus RTU协议,处理功能码,响应数据读取和写入请求。
  • RS485通信:实现RS485通信接口,确保数据传输的可靠性。
  • 任务调度:设计任务调度程序,合理分配CPU时间给各个传感器的测量任务。
  • 数据融合:设计算法对12路传感器数据进行融合处理,提供更准确的车辆周围环境信息。

4. 通信协议设计

  • Modbus功能码:定义Modbus功能码,实现对每个传感器的独立控制和数据读取。
  • 数据帧格式:设计Modbus数据帧格式,包括设备地址、功能码、数据寄存器地址、数据长度和校验等。

5. 用户接口

  • 配置界面:提供一种方式(如串口命令行、图形界面等)来配置设备参数,例如传感器校准、Modbus地址等。

6. 安全和冗余

  • 故障检测:实现故障检测机制,当某个传感器失效时能够及时报警。
  • 数据校验:确保所有通信数据都有校验机制,如CRC校验。

7. 测试和验证

  • 单元测试:对每个模块进行单元测试,确保其功能正确。
  • 集成测试:进行系统集成测试,确保所有模块协同工作正常。
  • 环境测试:在实际车辆上进行测试,验证系统在不同环境下的性能。

8. 电源和物理封装

  • 电源设计:设计合适的电源方案,包括电源转换和稳压。
  • 封装设计:设计适合车载环境的封装,确保系统的稳定性和耐用性。

9. 文档和支持

  • 用户手册:提供详细的用户手册,包括安装、配置和故障排除指南。
  • 开发文档:为二次开发提供API文档和开发指南。

这个设计方案提供了一个基本的框架,具体实现时还需要根据实际需求和环境进行调整和优化。

相关文章:

stm32f103 HAL库 HC-SR04测距

目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…...

vue中通过自定义指令实现一个可拖拽,缩放的弹窗

效果 功能描述 按住头部可拖拽鼠标放到边框&#xff0c;可缩放多层重叠丰富的插槽&#xff0c;易于扩展 示例 指令代码 export const dragDialog {inserted: function (el, { value, minWidth 400, minHeight 200 }) {// 让弹窗居中let dialogHeight el.clientHeight ?…...

FreeRtos-09事件组的使用

1. 事件组的理论讲解 事件组:就是通过一个整数的bit位来代表一个事件,几个事件的or和and的结果是输出 #define configUSE_16_BIT_TICKS 0 //configUSE_16_BIT_TICKS用1表示16位,用0表示32位 1.1 事件组适用于哪些场景 某个事件若干个事件中的某个事件若干个事件中的所有事…...

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…...

ICMR 2024在普吉岛闭幕,学者与泰国舞者共舞,燃爆全场

惊艳&#xff01;ICMR 2024在普吉岛闭幕&#xff0c;学者与泰国舞者共舞&#xff0c;燃爆全场&#xff01; 会议之眼 快讯 ICMR&#xff08;International Conference on Multimedia Retrieval&#xff09;即国际多媒体检索会议&#xff0c;是一个专注于多媒体检索领域的顶级…...

大模型精调:实现高效迁移学习的艺术

在人工智能领域&#xff0c;大型预训练模型&#xff08;以下简称“大模型”&#xff09;已经取得了令人瞩目的成果。这些模型通过在海量数据上进行预训练&#xff0c;能够捕捉到丰富的特征信息&#xff0c;为各种下游任务提供强大的支持。然而&#xff0c;如何将这些大模型应用…...

epoll服务端和客户端示例代码

epoll 服务端demo #include <stdio.h> #include <sys/epoll.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <fcntl.h> #include <unistd.h> #include <ne…...

最大乘积和-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第85讲。 最大乘积和&#…...

探索C嘎嘎的奇妙世界:第四关---引用与内联函数

1 引用: 引用不是新定义一个变量&#xff0c;而是给已存在变量取了一个别名&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。 #include<iostream> using namespace std;int main() {int a 0;// 引用&#xff1a;…...

DLS平台:惠誉全球经济展望——今年调增至2.6%,明年调减!

摘要 尽管全球货币政策逐渐转向宽松&#xff0c;惠誉国际评级&#xff08;Fitch Ratings&#xff09;在最新的《全球经济展望》中对2024年全球经济增长进行了上调。然而&#xff0c;由于美国经济增速放缓和其他因素的影响&#xff0c;2025年的全球经济增长预期则被下调。这篇文…...

数据结构习题

第一章 绪论 与数据元素本身的形式、内容、相对位置、个数无关的是数据的 逻辑结构。 第二章 线性表 在一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变&#xff0c;平均要移动的元素个数为 63.5。 n/2 单链表的存储密度 小于1。 创建一个包括n个结点的有序单链…...

交通银行软件开发工程师校招面试经历

本文介绍2024届春招中&#xff0c;交通银行总行的软件开发工程师岗位1场面试的基本情况、提问问题等。 2024年04月投递了交通银行总行的软件开发工程师岗位&#xff0c;暂时不清楚所在部门。目前完成了一面&#xff0c;并进入体检阶段&#xff1b;在这里记录一下面试的相关经历…...

bashrc和profile区别

作用与目的&#xff1a; .bashrc&#xff1a;这个文件主要用于配置和自定义用户的终端环境和行为。每次启动新的终端时&#xff0c;.bashrc文件都会被执行&#xff0c;加载用户设置的环境变量、别名、函数等。这使得用户能够根据自己的喜好和需求来定制终端的行为和外观。profi…...

BC153 [NOIP2010]数字统计

数字统计 一.题目描述二.输入描述&#xff1a;三.输出描述&#xff1a;四.数字范围五.题目思路六.代码实现 一.题目描述 请统计某个给定范围[L, R]的所有整数中&#xff0c;数字2出现的次数。 比如给定范围[2, 22]&#xff0c;数字2在数2中出现了1次&#xff0c;在数12中出现1次…...

浅谈LavelDB

简介 LevelDB 是一个开源的轻量级键值存储库&#xff0c;由 Google 开发&#xff0c;用于提供快速的键值存储和支持读写大量数据。LevelDB 具有高性能、快速的读取和写入速度以及支持原子操作的特点&#xff0c;适合用于需要高效存储和检索键值数据的场景。 LevelDB 主要特点…...

Google Earth Engine(GEE)——NDVI的时间序列分析和在线出图

函数: ui.Chart.array.values(array, axis, xLabels) Generates a Chart from an array. Plots separate series for each 1-D vector along the given axis. - X-axis = Array index along axis, optionally labeled by xLabels. - Y-axis = Value. - Series = Vector, d…...

谈吐的艺术(三)

不是要逼人屈服,而只是想请人遵守规定。 0可能遇到的问题 在快餐店买到的汉堡和薯条都是凉的&#xff0c;跟店员理论的时候对方却说味道没有不对。怎么说才能维护自己的权利呢&#xff1f; 更好的说法&#xff1a;“我想问一下&#xff0c;按照你们的规定&#xff0c;食品退换…...

pop链详细分析、构造(以[NISACTF 2022]babyserialize为例)

目录 [NISACTF 2022]babyserialize &#xff08;一&#xff09;理清pop链&#xff08;链尾 链头&#xff09;&#xff0c;标注步骤 1. 先找eval、flag这些危险函数和关键字样&#xff08;这是链尾&#xff09; 2.往eval()上面看 3.往$bb()上面看 4.往strtolower()上面看 …...

使用超声波麦克风阵列预测数控机床刀具磨损

预测性维护是使用传感器数据来推断机器状态&#xff0c;并从这些传感器数据中检测出在故障发生之前存在的缺陷或故障的过程。预测性维护在所有工业领域都是一种日益增长的趋势&#xff0c;包括轴承故障检测、齿轮磨损检测或往复式机器中的活塞磨损等许多其他例子。在预测性维护…...

怎么控制多个存储设备的访问权限?数据安全存储方案来了

数据安全存储是指将数据以安全的方式存储在存储系统中&#xff0c;以确保数据的机密性、完整性和可用性。要控制数据安全存储的权限以保障安全&#xff0c;可以采取以下措施&#xff1a; 访问控制列表&#xff08;ACLs&#xff09;&#xff1a;使用ACLs来定义对存储数据的访问权…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...