STM32串口空闲中断接收不定长数据

目录

  • 1. 开启串口空闲中断
  • 2. 合理开关中断
  • 3. 串口发送函数

1. 开启串口空闲中断

最近接触到的 Modbus RTU 项目使用到了串口接收中断和空闲中断。记录一下

初始化可以直接套用正点原子的初始化,只需要添加一行即可

  USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断
}

2. 合理开关中断

FreeRTOS是不能一直串口空闲中断之中的。

我们可以使用这种中断方式来处理:在接收完数据后,开启串口空闲中断;随后在接收完毕后,会触发空闲中断,将数据全部打印出来,此时CPU会归还给任务调度器并使其恢复任务调度。

函数是修改的正点原子的,现在不需要在尾部加入 “\r\n” 也能照常使用。

void USART1_IRQHandler(void)                	//串口1中断服务程序
{u8 Res;if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //空闲中断{printf("%s\n",USART_RX_STA);USART_ITConfig(USART1, USART_IT_IDLE, DISABLE);//关闭串口空闲中断}if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中断{Res =USART_ReceiveData(USART1);	//读取接收到的数据USART_RX_BUF[USART_RX_STA]=Res ;USART_RX_STA++;if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断} 
} 

3. 串口发送函数

还写了一个发送函数,以后调试不愁printf函数只能一个串口用了。

void STMLOG(USART_TypeDef* USARTx, u8 *Data)
{while(*Data!='\0'){ while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET); USART_SendData(USARTx,*Data);Data++;}
}

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

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

相关文章

Dockerfile制作能够ssh的ubuntu和centos7系统

目录 一.制作ubuntu系统 1.Dockerfile内容如下 2.运行容器并验证 二.制作centos7系统 1.Dockerfile内容如下 2.验证并测试 一.制作ubuntu系统 要求:制作一个能够远程ssh的ubuntu操作系统镜像,要求通过该镜像运容器后,内部拥有一些自动…

嵌入式系统复习(一)

第一章 嵌入式系统的定义、特点 嵌入式系统是以应用为中心,以计算机技术为基础,软件硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 特点:嵌入性 专用性 计算机系统 嵌入式系统典型组成…

[Shell编程学习路线]——探讨Shell中变量的作用范围(export)

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月14日10点14分 🀄️文章质量:95分 文章目录 ————前言———— 定义变量: 输出变…

acast,跨平台的asciinema终端录屏工具

项目地址:https://github.com/gvcgo/asciinema 项目文档:https://github.com/gvcgo/asciinema/blob/main/docs/README_CN.md asciinema [as-kee-nuh-muh] 是一个免费开源的终端会话录制和分享工具。 你可以访问 asciinema.org 了解更多关于 asciinema …

【Mars3d】config.json中的蓝色底图map.basemap = 2017代码实现

本身的地图效果: Mars3d的蓝色地图效果: 关键代码: basemaps: [{name: "高德电子",icon: "img/basemaps/gaode_vec.png",type: "gaode",layer: "vec",show: true,invertColor: true,filterColor: &q…

Slice用法举例Python

Slice用法举例Python 在Python中,slice(切片)是一个强大的工具,用于处理序列类型的数据,如列表、元组、字符串等。slice提供了一种简洁而高效的方式来获取序列的子集或修改序列的某些部分。下面,我们将从四…

Java 注释

在编程领域,良好的代码注释通常被认为是高效开发的黄金规则之一。特别是在 Java 编程语言中,注释不仅帮助开发者阐述代码功能,提升代码可读性,还是生成技术文档的重要基础。本文将深入探讨 Java 中的注释,解析其种类和…

LLM 大模型学习:数据预处理、模板设计以

在模型训练过程中,数据及数据处理是最为重要的工作之一。在当前模型训练流程趋于成熟的情况下,数据集的好坏,是决定了该次训练能否成功的最关键因素。 在上一篇中,我们提到了模型训练的基本原理是将文字转换索引再转换为对应的向…

Android.mk中LOCAL_NDK_STL_VARIANT标签定义类型都有哪些?

在 Android NDK(Native Development Kit)中,Android.mk 文件是用于定义编译本地代码(如 C/C)的 Makefile 片段。其中,LOCAL_NDK_STL_VARIANT 是一个变量,用于指定在编译时使用的 STL&#xff08…

机器学习python实践——数据“相关性“的一些补充性个人思考

在上一篇“数据白化”的文章中,说到了数据“相关性”的概念,但是在统计学中,不仅存在“相关性”还存在“独立性”等等,所以,本文主要对数据“相关性”进行一些补充。当然,如果这篇文章还能入得了各位“看官…

【React】Lodash---groupBy() 分组

例子 _.groupBy([6.1, 4.2, 6.3], Math.floor); // > { 4: [4.2], 6: [6.1, 6.3] }// The _.property iteratee shorthand. _.groupBy([one, two, three], length); // > { 3: [one, two], 5: [three] }思路分析 来源 定义一个名为groupBy的方法,通过扩展Ar…

OpenAI最强大模型ChatGPT-4o,论文降重小技巧,国内直接使用

一、万字论文,从0到1,只需1小时 通过OpenAI5月14日1点发布的最新大模型ChatGPT4o: 1小时即可完成万字论文的编写通过GPT定制的降重大模型“中文论文降重”,2小时即可完成一篇优质的、查重率较低的万字论文。 在ChatGPT4o对话框中…

【全开源】多功能投票小程序源码(Uniapp+ThinkPHP+FastAdmin)

💥**【热门推荐】多功能投票小程序,一键解决你的选择难题!**💥 基于ThinkPHPFastAdminUniapp开发的多功能系统,支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、…

[UUCTF 2022 新生赛]爱丽丝梦境的兔子(古典密码)

题目: U2FsdGVkX19ixL7s5HryOhyL5oSScYGNVBVWlsUMYQwTRniXreqeSp/iTHtkcxt qicNL4xpHc5X34Daat7ixqkZMpU4JV9USOKKTAw9HJfGnoDzFF/JY0gzJpxgmW1X 4nXktQ4J7OM14EMcTrhPDIOfG2VDJr4yViWc/vNS8np1IFeIRXMoWGAJHuI8IOVG tXi2JX6hTseYkJc2LGHJkLQ0WDW67RyhPC3vOwmJHOs/w…

TF-IDF算法:从文本中发现价值的黄金法则

TF-IDF算法 一、简介二、TF-IDF算法原理2.1 词频(TF)2.2 逆文档频率(IDF)2.3 TF-IDF的计算 三、TF-IDF算法应用3.1 搜索引擎3.2 文本分类3.3 信息提取3.4 文本摘要 四、TF-IDF算法的改进4.1、TF-IDF算法的改进4.1.1. 基于词的权重…

OpenGL3.3_C++_Windows(8)

材质&&漫反射,光照贴图 使用struct为材质建立结构体,以便方便管理漫反射贴图是物体的颜色值(纹理)(通过 UV 坐标映射到渲染物体的表面),材质是物体的属性(物体对光的交互&a…

LabVIEW故障预测

在LabVIEW故障预测中,振动信号特征提取的关键技术主要包括以下几个方面: 时域特征提取:时域特征是直接从振动信号的时间序列中提取的特征。常见的时域特征包括振动信号的均值、方差、峰值、峰-峰值、均方根、脉冲指数等。这些特征能够反映振动…

LLM 中什么是Prompts?如何使用LangChain 快速实现Prompts 一

LLM 中什么是Prompts?如何使用LangChain 快速实现Prompts 一 Prompt是一种基于自然语言处理的交互方式,它通过机器对自然语言的解析,实现用户与机器之间的沟通。 Prompt主要实现方式是通过建立相应的语料库和语义解析模型,来将自…

Spring Boot中的RESTful API详细介绍及使用

在Spring Boot中,RESTful API的实现通过控制器类中的方法和特定的注解来完成。每个注解对应不同的HTTP请求方法,并通过处理请求参数和返回响应来实现不同的操作。 下面将详细解释RESTful API中的各个方面,包括GetMapping, PostMapping, PutMa…

「实战应用」如何用DHTMLX将上下文菜单集成到JavaScript甘特图中(一)

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。 DHTMLX Gantt是一个高度可定制的工具,可以与项目管理应用程序所需的其他功能相补充。在本文中您将学习如何使用自定义上…