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

国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

参考代码


/**************************************************************************************************
* @file      usart_async_tx_no_int_rx_rxneint.c
* @brief     异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将
*            收到的数据原样通过TX引脚发送出去
* @author    
* @date      
**************************************************************************************************/#include "bsp_usart.h"uint8_t   Rcv_data[4]={0};//接收数组
uint8_t   Rcv_flag=0;//接收标志
uint8_t   Cnt_cart=0;//接收数据长度static void USART_NVIC_Configurature(void)
{
//	NVIC_SetPriority(USART1_IRQn,0);
//	NVIC_EnableIRQ(USART1_IRQn);NVIC_InitTypeDef NVIC_InitStructure;/* 配置USART为中断源 */NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;/* 优先级*/NVIC_InitStructure.NVIC_IRQChannelPriority = 0;/* 使能中断 */NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;/* 初始化配置NVIC */NVIC_Init(&NVIC_InitStructure);
}static void USART_GPIO_Configurature(void)
{GPIO_InitTypeDef m_gpio;USART1_TX_IO_CLK_EN();USART1_RX_IO_CLK_EN();m_gpio.GPIO_Mode = GPIO_Mode_AF;m_gpio.GPIO_OType = GPIO_OType_PP;m_gpio.GPIO_Pin = USART1_TX_PIN;m_gpio.GPIO_PuPd = GPIO_PuPd_NOPULL;m_gpio.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(USART1_TX_PORT, &m_gpio);GPIO_PinAFConfig(USART1_TX_PORT,USART1_TX_PIN_SOURCE,GPIO_AF_1); // TX--PA3m_gpio.GPIO_Pin = USART1_RX_PIN;GPIO_Init(USART1_RX_PORT, &m_gpio);GPIO_PinAFConfig(USART1_RX_PORT,USART1_RX_PIN_SOURCE,GPIO_AF_1);// RX--PD6
}void USART_Config(uint32_t bound)
{USART_InitTypeDef m_usart;//GPIO端口设置USART_GPIO_Configurature();// 函数调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//USART 初始化设置m_usart.USART_BaudRate = bound;// 波特率m_usart.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制m_usart.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//收发模式 接收发送都使能m_usart.USART_Parity = USART_Parity_No;//无奇偶校验位m_usart.USART_StopBits = USART_StopBits_1;//一个停止位m_usart.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_Init(USART1, &m_usart);//初始化串口1USART_Cmd(USART1, ENABLE);//使能串口1USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断//Usart1 NVIC 配置USART_NVIC_Configurature();//函数调用 
}void USART_SendByte(uint8_t ch)
{while((USART1->ISR & USART_ISR_TXE) == 0);USART1->TDR = ch;  // 串口发送
}void USART_SendStringLen(uint8_t *p,uint16_t len)
{while(len--){USART_SendByte(*(p++));}
}//例如:
//产品应答 FF 07 A1 A7
//其中校验码 SUM=A8=(0x07+0xA1+0Xff)&0x00ff
//0x07 为距离的高位数据;
//0xA1 为距离的低位数据;
//距离值为 0x07A1; 转换成十进制为 1953; 单位为: 毫米
void uart_Run(void)//数据处理函数
{if(Rcv_flag==1){USART_Temp = ((uint16_t)Rcv_data[1]<<8) + Rcv_data[2] ; // 左移八位数据进行合并  例如:0x07<<8 = 0x0700       }
}// 串口中断服务函数 USART1_IRQHandler
//void USART1_IRQHandler(void)
//{
	uint32_t ch_rx_test;
//	if((USART1->ISR & USART_ISR_RXNE) != 0)
//	{
//		USART_Temp = USART1->RDR; // 串口接收
//		
//		Display_IntData((uint32_t)USART_Temp);
// 		USART_SendByte(USART_Temp);
//	}
//}void USART1_IRQHandler(void)
{if((USART1->ISR & USART_ISR_RXNE) != 0){	 	if(Cnt_cart<=3)//计数{Rcv_data[Cnt_cart]=USART1->RDR;//接收的数据存入数组if(Rcv_data[0]==0XFF)  // 帧格式为:0XFF+H_DATA+L_DATA+SUM{Cnt_cart++;//计数值累加}else{Cnt_cart =0;USART_ClearFlag(USART1,USART_FLAG_RXNE);//清除中断标志}}else{Cnt_cart=0;if(Rcv_data[0] == 0xFF && Rcv_data[3] == ((Rcv_data[1]+Rcv_data[2]+Rcv_data[0])&0x00FF))// 校验接收的数据是否正确  起始位 校验位 长度{Rcv_flag=1;//接收成功标志}  USART_ClearFlag(USART1,USART_FLAG_RXNE);//清除中断标志}		}//	else
//		{
//			if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) != RESET)  // 相同代码 函数版 
//			{
//				USART_ReceiveData(USART1);
//				USART_ClearFlag(USART1,USART_FLAG_ORE);//清除中断标志
//			}					
//		}USART_ClearFlag(USART1,USART_FLAG_ORE);//清除中断标志
}

资料下载

  • 【CSDN】 资料:HK32F030M超声波测距(20240206)

  • 【CSDN】PCB:隆鑫样品-超声波测距处理器-‎2024‎年‎1‎月‎28‎日

相关文章:

国产航顺HK32F030M: 超声波测距模块串口通信数据接收与处理

参考代码 /************************************************************************************************** * file usart_async_tx_no_int_rx_rxneint.c * brief 异步串口通信例程, 通过查询TXE标志发送数据,通过RXNE中断接收数据,当中断接收到数据后会将 * …...

idea:如何连接数据库

1、在idea中打开database: 2、点击 ‘’ ---> Data Source ---> MySQL 3、输入自己的账号和密码其他空白处可以不填&#xff0c;用户和密码可以在自己的mysql数据库中查看 4、最后选择自己需要用的数据库&#xff0c;点击运用ok&#xff0c;等待刷新即可 最后&#xff1a…...

JS中ES5和ES6的区别

前言 ES5是JavaScript的第五个修订版本&#xff0c;于2009年发布。而ES6是JavaScript的第六个修订版本&#xff0c;也称为ES2015&#xff0c;于2015年发布。以下是它们两个版本之前的一些区别&#xff1a; 变量声明方式 在ES5中&#xff0c;使用var关键字进行变量声明&#…...

软考24-上午题-图1

一、数据结构的回忆 线性结构&#xff1a;&#xff08;一对一&#xff09; 除首结点没有前驱、末尾结点没有后继外&#xff0c;一个结点只有唯一的一个直接前驱和唯一的一个直接后继。 树结构&#xff1a;&#xff08;一对多&#xff09; 除根节点没有前驱节点外&#xff0c;…...

书生·浦语大模型第四课作业

基础作业&#xff1a; 构建数据集&#xff0c;使用 XTuner 微调 InternLM-Chat-7B 模型, 让模型学习到它是你的智能小助手&#xff0c;效果如下图所示&#xff0c;本作业训练出来的模型的输出需要将不要葱姜蒜大佬替换成自己名字或昵称&#xff01; 1.安装 # 如果你是在 Int…...

勒索攻击风起云涌,Sodinokibi深度分析

前言 Sodinokibi勒索病毒&#xff0c;又称为REvil勒索病毒&#xff0c;这款勒索病毒最早在国内被发现是2019年4月份&#xff0c;笔者在早期分析这款勒索病毒的时候就发现它与其他勒索病毒不同&#xff0c;于是被笔者称为GandCrab勒索病毒的“接班人”&#xff0c;为什么它是Ga…...

1124. 骑马修栅栏(欧拉路径,模板)

农民John每年有很多栅栏要修理。 他总是骑着马穿过每一个栅栏并修复它破损的地方。 John是一个与其他农民一样懒的人。 他讨厌骑马&#xff0c;因此从来不两次经过一个栅栏。 你必须编一个程序&#xff0c;读入栅栏网络的描述&#xff0c;并计算出一条修栅栏的路径&#xf…...

C# CAD2016获取数据操作BlockTableRecord、Polyline、DBObject

一、数据操作说明 //DBObject 基础类 DBObject dbObj (DBObject)tr.GetObject(outerId, OpenMode.ForRead); //Polyline 线段类 Polyline outerPolyline (Polyline)tr.GetObject(outerId, OpenMode.ForRead); //BlockTableRecord 块表类 BlockTableRecord modelSpace (Bloc…...

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…...

Linux_线程

线程与进程 多级页表 线程控制 线程互斥 线程同步 生产者消费者模型 常见概念 下面选取32位系统举例。 一.线程与进程 上图是曾经我们认为进程所占用的资源的集合。 1.1 线程概念 线程是一个执行分支&#xff0c;执行粒度比进程细&#xff0c;调度成本比进程低线程是cpu…...

【selenium】

selenium是一个Web的自动化测试工具&#xff0c;最初是为网站自动化测试而开发的。Selenium可以直接调用浏览器&#xff0c;它支持所有主流的浏览器。其本质是通过驱动浏览器&#xff0c;完成模拟浏览器操作&#xff0c;比如挑战&#xff0c;输入&#xff0c;点击等。 下载与打…...

HX711压力传感器学习一(STM32)

目录 原理图&#xff1a;​ 引脚介绍&#xff1a; HX711介绍工作原理: 程序讲解&#xff1a; 整套工程&#xff1a; 发送的代码工程&#xff0c;与博客的不一致&#xff0c;如果编译有报错请按照报错和博客进行修改 原理图&#xff1a; 引脚介绍&#xff1a; VCC和GND引…...

作业2.13

1、选择题 1.1、若有定义语句&#xff1a;int a[3][6]; &#xff0c;按在内存中的存放顺序&#xff0c;a 数组的第10个元素是 D A&#xff09;a[0][4] B) a[1][3] C)a[0][3] D)a[1][4] 1.2、有数组 int a[5] {10&#xff0c;20&#xff0c;30&#xff0c;40&#xff0c;50},…...

ArcGIS学习(七)图片数据矢量化

ArcGIS学习(七)图片数据矢量化 通过上面几个任务的学习,大家应该已经掌握了ArcGIS的基础操作,并且学习了坐标系和地理数据库这两个非常重要且稍微难一些的专题。从这一任务开始,让我们进入到实战案例板块。 首先进入第一个案例一一图片数据矢量化。 我们在平时的工作学…...

G口大流量服务器选择的关键点有哪些?

G口服务器指的是接入互联网的带宽达到1Gbps以上的服务器&#xff0c;那么选择使用G口大流量服务器的用户需要注意哪些选择 关键点呢?小编为您整理关于G口大流量服务器的关键点。 G口服务器通常被用于需要大带宽支持的业务场景&#xff0c;比如视频流媒体、金融交易平台、电子商…...

MongoDB聚合:$unset

使用$unset阶段可移除文档中的某些字段。从版本4.2开始支持。 语法 移除单个字段&#xff0c;可以直接指定要移除的字段名&#xff1a; { $unset: "<field>" }移除多个字段&#xff0c;可以指定一个要移除字段名的数组&#xff1a; { $unset: [ "<…...

DS Wannabe之5-AM Project: DS 30day int prep day14

Q1. What is Alexnet? Q2. What is VGGNet? Q3. What is VGG16? Q4. What is ResNet? At the ILSVRC 2015, so-called Residual Neural Network (ResNet) by the Kaiming He et al introduced the anovel architecture with “skip connections” and features heavy b…...

【程序设计竞赛】C++与Java的细节优化

必须强调下&#xff0c;以下的任意一种优化&#xff0c;都应该是在本身采用的算法没有任何问题情况下的“锦上添花”&#xff0c;而不是“雪中送炭”。 如果下面的说法存在误导&#xff0c;请专业大佬评论指正 读写优化 C读写优化——解除流绑定 在ACM里&#xff0c;经常出现…...

Java缓冲流——效率提升深度解析

前言 大家好&#xff0c;我是chowley&#xff0c;在我之前的项目中&#xff0c;用到了缓冲流来提高字符流之间的比较速度&#xff0c;缓冲流的主要作用类似于数据库缓存&#xff0c;提高IO操作效率。 缓冲流 在Java的输入输出操作中&#xff0c;缓冲流是提高性能的重要工具之…...

16 亚稳态原理和解决方案

1. 亚稳态原理 亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。在同步系统中&#xff0c;输入总是与时钟同步&#xff0c;因此寄存器的setup time和hold time是满足的&#xff0c;一般情况下是不会发生亚稳态情况的。在异步信号采集中&#xff0c;由于异步…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...

nnUNet V2修改网络——暴力替换网络为UNet++

更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...

Ray框架:分布式AI训练与调参实践

Ray框架&#xff1a;分布式AI训练与调参实践 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 Ray框架&#xff1a;分布式AI训练与调参实践摘要引言框架架构解析1. 核心组件设计2. 关键技术实现2.1 动态资源调度2.2 …...

以太网PHY布局布线指南

1. 简介 对于以太网布局布线遵循以下准则很重要&#xff0c;因为这将有助于减少信号发射&#xff0c;最大程度地减少噪声&#xff0c;确保器件作用&#xff0c;最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确&#xff0c;然…...