stm32_HAL_串口不定长数据接收发送

串口代码思路//不包括初始化

变量

uint8_t  tx1[256];//缓冲区uint8_t Tx1_size=0;//记录数据的个数

接收

产生第一个数据接收-----进入中断----复制数据-----继续接收----在进入中断----复制数据---在接收直到串口第一次数据全部接收完

中断源码

利用中断经行计算字符个数//

串口接收数据时数据必须达到一定的数据或第一轮每个数据都被接收函数走一遍才会跳出接收函数

void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){if(huart1.Instance==USART1)//判断那个uart{if((int)Tx1_size<256)//判断数据是否溢出{Tx1_size++;}HAL_UART_Receive_IT(&huart1,(uint8_t*)tx1,1);//再次打开数据接收可有可无}}

发送

调用发送函数   -----清空数据个数

发送源码//主函数的死循环

while (1){if(HAL_UART_Receive_IT(&huart1,(uint8_t*)tx1,1)==HAL_OK){if(HAL_UART_Transmit(&huart1,(uint8_t*)tx1,(Tx1_size+1),20)==HAL_OK){Tx1_size=0;//清除个数}}

main函数源码

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2024 STMicroelectronics.* All rights reserved.** This software is licensed under terms that can be found in the LICENSE file* in the root directory of this software component.* If no LICENSE file comes with this software, it is provided AS-IS.********************************************************************************/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes *//* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD *//* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */uint8_t  tx1[256];//缓冲区uint8_t Tx1_size=0;//个数void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart){if(huart1.Instance==USART1)//判断那个uart{if((int)Tx1_size<256)//判断数据是否溢出{Tx1_size++;}}}
/* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
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_USART1_UART_Init();/* USER CODE BEGIN 2 *//* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if(HAL_UART_Receive_IT(&huart1,(uint8_t*)tx1,1)==HAL_OK){if(HAL_UART_Transmit(&huart1,(uint8_t*)tx1,(Tx1_size+1),20)==HAL_OK){Tx1_size=0;//清除个数}}//HAL_Delay(100);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/*** @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

注意

该原理是利用HAL函数的特点进行利用

缺点接收数据过长会丢失

原因因为是一个一个的进行记录字符每次都进入中断,在中断时间过长(不建议使用)

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

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

相关文章

社交媒体数据恢复:KaokaoTalk

KaokaoTalk数据恢复方法 一、数据恢复的基本步骤 在进行KaokaoTalk数据恢复时&#xff0c;首先需要确保你已经停止使用该设备&#xff0c;以防止新的数据覆盖丢失的数据。接下来&#xff0c;你可以按照以下步骤进行操作&#xff1a; 备份数据&#xff1a;在尝试恢复数据之前&a…

深入理解Vue插槽

子组件ChildComp.vue <template><slot></slot><slot name"slot1"></slot><slot name"slot2" msg"hello world"></slot> </template>父组件App.vue <script setup> import { ref } from…

【SpringCloud】OpenFeign服务接口调用快速入门

【SpringCloud】OpenFeign服务接口调用快速入门 文章目录 【SpringCloud】OpenFeign服务接口调用快速入门1. 概述2. 引入依赖3. 配置、测试 1. 概述 官网地址&#xff1a;点击跳转 Feign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用 Feign 创建一个接口…

Nginx(一)

web服务器&#xff0c;负载均衡&#xff0c;API网关&#xff0c;DDoS防御&#xff0c;反向代理&#xff0c;web应用防火墙&#xff0c;缓存.. service nginx status [rootcodeYan ~]# service nginx status Redirecting to /bin/systemctl status nginx.service ● nginx.serv…

第十五届蓝桥杯省赛第二场C/C++B组A题【进制】题解(AC)

解题思路 按照题意进行模拟&#xff0c;计算 x x x 的 b b b 进制过程中&#xff0c;若出现余数大于 9 9 9&#xff0c;则说明 x x x 的 b b b 进制一定要用字母进行表示。 #include <iostream> #include <cstring> #include <algorithm> #include &l…

rysnc 通过文件输入密码的设置方法

在使用 rsync 进行文件同步时&#xff0c;你可以通过一个文件输入密码来避免在命令行中显示或手动输入密码。这在自动化脚本中特别有用。下面是详细的步骤和方法&#xff1a; 创建密码文件 创建一个包含密码的文件&#xff1a; 打开一个文本编辑器&#xff0c;输入远程服务器的…

Python | Leetcode Python题解之第49题字母异位词分组

题目&#xff1a; 题解&#xff1a; class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:mp collections.defaultdict(list)for st in strs:counts [0] * 26for ch in st:counts[ord(ch) - ord("a")] 1# 需要将 list 转换成 tuple …

ubuntu下boa服务器编译运行

一.下载boa源码并解压 官网网站&#xff1a;BOA源码 点击箭头所指的位置即可下载 解压&#xff1a; tar -xvf boa-0.94.13.tar.gz 解压完成得到目录&#xff1a; 二.安装环境所缺依赖&#xff0c;否则编译会报错 sudo apt install bison sudo apt install flex 三.编译 1…

利用地理矢量数据进行路径规划

文章目录 概要绘制osm安装和编译更改配置节点运行概要 地理矢量数据通常是指包括点(如地标、位置坐标)、线(如街道、河流)和多边形(如行政区划、建筑物轮廓)这样的基本几何构造,这些都是构成空间数据的基本要素。在路径规划中,这些矢量数据可以被用来表示网络中的节点…

PC-3000 Mobile Pro: 智能手机及平板设备数据提取工具

天津鸿萌科贸发展有限公司从事数据安全业务20余年&#xff0c;在数据恢复、数据取证、数据备份等领域有丰富的案例经验、前沿专业技术及良好的行业口碑。同时&#xff0c;公司面向取证机构及数据恢复公司&#xff0c;提供数据恢复实验室建设方案&#xff0c;包含数据恢复硬件设…

性能优化:如何高效使用虚拟DOM

优化虚拟DOM的性能是一项重要的任务&#xff0c;下面是一些实际技巧和最佳实践&#xff0c;可以帮助开发者提高虚拟DOM的性能&#xff1a; 减少渲染次数&#xff1a;虚拟DOM的性能优化的关键是尽量减少渲染次数。避免不必要的渲染&#xff0c;比如只有在数据发生真正改变时才进…

Okapi Framework

文章目录 关于 OkapiRainbowCheckMateRatelTikalFilters Plugin for OmegaTLonghorn 关于 Okapi 官网&#xff1a;http://okapiframework.org源码&#xff1a;https://bitbucket.org/okapiframework/okapi/src文档&#xff1a;http://okapiframework.org/wiki/index.php?titl…

Maven:配置与使用指南1

https://mvnrepository.com Maven 1.maven简介 不同模块的jar包以及同时设计的功能的微小变化版本&#xff1b; 真实的开发环境&#xff1a;我们将我们的源代码在服务器上重新编译重新打包&#xff0c;工程升级维护过程繁琐 1.Maven是一个项目管理工具&#xff0c;将项目开…

xv6源码分析 011

xv6源码分析 011 今天我们结束proc.h和proc.c这一块。 wakeup(void *chan) 这个函数用于唤醒所有在这个channel结构上睡眠的进程&#xff0c;类似于我们c中的notify_all()。 void wakeup(void *chan) {struct proc *p;for(p proc; p < &proc[NPROC]; p) {acquire(&a…

模拟LinkedList实现的链表(无哨兵)

1.前言 我们将LinkdList视作链表, 底层设计了内部类Node类, 我这里依然没有用到泛型, 其实加上泛型依然很简单, 即将Node节点的数据域的类型由Int转换为E(<E>), 我在此不做赘述.同时实现了增删查改, 遍历等操作. 2.链表(无哨兵)的代码实现 public class LinkListTest …

基于Promise + XHR 封装myAxios函数

在JavaScript中&#xff0c;你可以使用Promise和XMLHttpRequest&#xff08;XHR&#xff09;来封装一个名为myAxios的函数&#xff0c;用于执行HTTP请求。下面是一个简单的示例&#xff0c;它封装了GET和POST请求的基本功能&#xff1a; function myAxios(url, method GET, da…

matlab回归学习

前言 所谓回归学习即预测&#xff0c;便是由已知的数据推测未知的数据&#xff0c;利用转速与转矩来推测电流。 1、数据准备 下面虚拟一组转速转矩以及电流数据。 speed [100 220 330 440 550 660]; torque [200 300 400 500 700 900]; I [400 500 603 739 821 912]; arr …

DataGrip操作Oracle

一、创建表空间 表名任意起&#xff0c;路径自己指定 -- 创建表空间 create tablespace mydb1 -- 表名 datafile E:\Code\sql\oracle\oracle_tablespace\mydb1.dbf --指定表空间路径 size 100M --指定表空间大小 autoextend on next 50M --指定一次扩充多少mb extent managemen…

万兆以太网MAC设计(7)ARP协议报文格式详解以及ARP层模块设计

文章目录 前言&#xff1a;1、ARP协议详解2、ARP工作机制 二、ARP_RX模块设计三、ARP_TX模块设计四、ARP_table模块5、仿真5.1、发送端5.2、接收端5.3、缓存表 总结 前言&#xff1a; 1、ARP协议详解 ARP数据格式&#xff1a; 硬件类型:表示硬件地址的类型。它的值为1表示以太…

ocr文字识别软件是干什么的?

OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;文字识别软件是一种能够将图像或者扫描的文档中的文字内容转换为可编辑的文本格式的软件。它的主要功能包括&#xff1a; 1. **文字提取&#xff1a;**识别图像中的文字并提取出来&#xff0…